2017-10-28 8 views
1

JSONとしてログ出力するためにジャクソンを使用しています。
物事は、我々は次の構文でログインできるようにということである。Jackson Collection <Object>トップレベルのJSON出力文字列

log.info("yourMessage {}", innerMessageObject, Meta.of("key", ObjectValue)) 

OUTPUT私は私が望む

{ 
    "level": INFO, 
    ... classic logging attributes 
    "metadata": { 
    "object1": "value 1", 
    "object2": { ... } 
    ... 
    } 
} 

OUTPUT

{ 
    "level": INFO, 
    ... classic logging attributes 
    "object1": "value 1", 
    "object2": { ... } 
    ... 
} 

マイログPOJOを持って

@Data 
class JsonLog { 
    @JsonIgnore 
    private static final ObjectMapper mapper = JsonLog.initMapper(); 

    private final String message; 
    private final String class_name; 
    private final Collection<Object> metadata; 
    private final Marker marker; 
    private final String level; 
    private final Long timestamp; 
    private final String thread; 
    private final String logger; 
    private final LoggerContextVO logger_context; 
    private final Map<String, String> environment_vars; 
} 

metadata属性を最上位属性としてシリアル化するだけでは成功しません。

this issueのために@JsonUnwrappedを使用できないようですが、私もthis solutionを試しましたが、実装方法はわかりません。

アイデアはありますか?

ありがとうございました:)

答えて

1

Map<String, Object>するmetadataを変換するために、OKでしょうか?それはJSONの例であり、それは実際にはJavaでのJSONの自然なジェネリック表現です。その場合:

private final Map<String, Object> metadata; 

@JsonAnyGetter 
Map<String, Object> getMetadata() { 
    return metadata; 
} 

docsによれば、この注釈は、ゲッターメソッドをマーク:

は(アンラップと同様)POJOを含むの一部としてシリアル化する

と缶Mapを返すメソッドでのみ使用できます。私は解決策を認識していませんCollection

+0

あなたの答えをありがとう、それはいくつかの変更が必要ですが、私はそれを試してみましょう! – ogdabou

+0

ありがとうございます:) – ogdabou

関連する問題