log4j2将原始消息包装在“消息”属性中 我正在使用JSON布局
{
"timeMillis": 1538154855953,
"thread": "MyThred #19",
"level": "INFO",
"loggerName": "MyLogger",
"message": "My log message",
"endOfBatch": false,
"loggerFqcn": "org.ops4j.pax.logging.slf4j.Slf4jLogger",
"threadId": 63,
"threadPriority": 5
}
我要避免添加其他字段
只想收到以下消息
{
"message": "My log message"
}
只想像打印语句一样打印数据 不需要其他信息,如loggerName,thread等
答案 0 :(得分:0)
我认为“附加信息”是JSONLayout的全部目的。如果您不想使用此布局提供的格式,那么我可以考虑一些选择:
PatternLayout
:<PatternLayout pattern="{"message":"%m"}%n" />
来产生这样的输出:{"message":"log message"}
此方法的缺点是,它仅在非常简单的情况下才能很好地工作。如果您想记录一个比简单的字符串消息更复杂的数据结构,它将无法正常工作。
将消息序列化为JSON字符串,然后再将它们传递给记录器。这不需要任何特殊的布局-您可以使用pattern="%m%n"
之类的简单模式,因为您的消息已经是JSON格式。这将要求您每次都将消息序列化,然后再将其传递到记录器。
创建一个自定义类,该类实现log4j2 Message interface,并根据您提供给其构造函数的输入来生成JSON字符串。然后,当您登录时,您只需创建类的实例并传递必要的输入即可。通过这种方法,您可以将序列化合并到消息类本身中,而不必预先序列化数据,这可能比创建custom layout的工作量少。
我希望这可以为您指明正确的方向。没有更详细的要求,很难提供确切的解决方案。