我正在使用Jackson,以便将日志输出作为JSON 事情是我们允许使用以下语法进行日志记录:
log.info("yourMessage {}", innerMessageObject, Meta.of("key", ObjectValue))
我有输出
{
"level": INFO,
... classic logging attributes
"metadata": {
"object1": "value 1",
"object2": { ... }
...
}
}
输出我想要
{
"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,但看不到如何实现它。
你有什么想法吗?
谢谢:)
答案 0 :(得分:1)
将metadata
转换为Map<String, Object>
可以吗?你似乎是JSON的例子,而且它实际上是Java中JSON的自然泛型表示。在那种情况下:
private final Map<String, Object> metadata;
@JsonAnyGetter
Map<String, Object> getMetadata() {
return metadata;
}
根据docs,此注释标记了getter方法:
被序列化为包含POJO的一部分(类似于展开)
并且只能与返回Map
的方法一起使用。我不知道Collection