log4j2跳过记录其他信息

时间:2018-09-28 17:20:20

标签: log4j2

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等

1 个答案:

答案 0 :(得分:0)

我认为“附加信息”是JSONLayout的全部目的。如果您不想使用此布局提供的格式,那么我可以考虑一些选择:

  1. 配置其他布局,使其产生JSON输出。例如,您可以使用像这样的PatternLayout<PatternLayout pattern="{&quot;message&quot;:&quot;%m&quot;}%n" />来产生这样的输出:{"message":"log message"}

此方法的缺点是,它仅在非常简单的情况下才能很好地工作。如果您想记录一个比简单的字符串消息更复杂的数据结构,它将无法正常工作。

  1. 将消息序列化为JSON字符串,然后再将它们传递给记录器。这不需要任何特殊的布局-您可以使用pattern="%m%n"之类的简单模式,因为您的消息已经是JSON格式。这将要求您每次都将消息序列化,然后再将其传递到记录器。

  2. 创建一个自定义类,该类实现log4j2 Message interface,并根据您提供给其构造函数的输入来生成JSON字符串。然后,当您登录时,您只需创建类的实例并传递必要的输入即可。通过这种方法,您可以将序列化合并到消息类本身中,而不必预先序列化数据,这可能比创建custom layout的工作量少。

我希望这可以为您指明正确的方向。没有更详细的要求,很难提供确切的解决方案。