Java 如何将字段添加到log4j2';s JSON日志
假设我有一个标准的JSON日志,如下面文档中的示例所示 现在我想将自定义信息添加到此日志,如下所示:Java 如何将字段添加到log4j2';s JSON日志,java,json,log4j2,Java,Json,Log4j2,假设我有一个标准的JSON日志,如下面文档中的示例所示 现在我想将自定义信息添加到此日志,如下所示: { "logger":"com.foo.Bar", "timestamp":"1376681196470", "level":"INFO", "thread":"main", "message":"Message flushed with immediate flush=true", "extrainformation":"Some very im
{
"logger":"com.foo.Bar",
"timestamp":"1376681196470",
"level":"INFO",
"thread":"main",
"message":"Message flushed with immediate flush=true",
"extrainformation":"Some very important stuff I need to include",
"extrainformation2":"Some other very important stuff I need to include"
}
有办法做到这一点吗?文档似乎没有提到任何关于向日志对象添加属性的内容。我是否需要自定义布局或以编程方式添加字段或什么
就像@alan7678所说的- 自定义布局也是我的解决方案
@Plugin(name = "ExtendedJsonLayout", category = Node.CATEGORY,
elementType = Layout.ELEMENT_TYPE, printObject = true)
public class ExtendedJsonLayout extends AbstractJacksonLayout {
// Lots of code!
}
我创建了一个名为“ExtendedJSonLayout”的Log4j2布局插件。您可以将其包含在Maven或Gradle的项目中。看看这里-
只需通过配置文件归档即可 请参阅我的log4j2.yaml:
Configuration:
status: warn
appenders:
Console:
name: STDOUT
JsonLayout:
complete: false
compact: true
eventEol: true
KeyValuePair:
-
key: extrainformation
value: Some very important stuff I need to include
-
key: extrainformation2
value: Some other very important stuff I need to include
Loggers:
Root:
level: "warn"
AppenderRef:
ref: STDOUT
自定义字段总是最后一个,按声明顺序排列。这些值支持我认为创建自定义布局插件是您需要做的。您可以根据需要使用布局设置打印消息的格式。剩下的是从LogEvent/消息中检索数据的问题,我很担心。我从来没有写过插件。我想是学习的好时机。谢谢如何在Maven中进行同样的配置?尽管上面的配置文件独立于Maven或gradle,但您可以在这里找到说明:如果我们不总是需要这些值怎么办?如何有条件地添加它们。因为默认情况下,它们将显示在每个日志行中。我不知道单独通过配置文件解决问题的任何方法。您可能需要通过代码深入研究解决方案。但是您确定这是一个有效的用例,绝对必要,而且花费了大量精力吗?自定义字段的值是动态的还是
getMixedFields()
方法在应用程序启动时只调用一次?getMixedFields()
在每个日志事件上都被调用,因此它可以是动态的。但这可能会很棘手,这取决于您希望从中获取值的上下文。它能与log4j2v2.21一起工作吗?自述文件提到了2.8和2.9。
Configuration:
status: warn
appenders:
Console:
name: STDOUT
JsonLayout:
complete: false
compact: true
eventEol: true
KeyValuePair:
-
key: extrainformation
value: Some very important stuff I need to include
-
key: extrainformation2
value: Some other very important stuff I need to include
Loggers:
Root:
level: "warn"
AppenderRef:
ref: STDOUT