log4j2 跳过记录其他信息



log4j2 将原始消息包装在 "message" 属性中 我正在使用 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"
}

只想像打印语句一样打印数据 不需要其他信息,如记录器名称,线程等

我认为"附加信息"是JSONLayout的全部目的。如果您不想使用此布局提供的格式,那么我可以想到几个选项:

  1. 配置不同的布局,使其生成 JSON 输出。例如,您可以使用如下PatternLayout<PatternLayout pattern="{&quot;message&quot;:&quot;%m&quot;}%n" />,它会产生如下输出:{"message":"log message"}

此方法的缺点是它仅适用于非常简单的方案。如果你想记录一个更复杂的数据结构,而不仅仅是一个字符串消息,它不会很好地工作。

    在将消息
  1. 传递给记录器之前,将消息序列化为 JSON 字符串。这不需要任何特殊的布局 - 您可以使用像pattern="%m%n"这样的简单模式,因为您的消息已经是 JSON 格式。这将要求您每次在将消息传递给记录器之前对其进行序列化。

  2. 创建一个自定义类,该类实现 log4j2 消息接口,并负责根据您提供给其构造函数的输入生成 JSON 字符串。然后,当您记录时,您只需创建类的实例并向其传递必要的输入。使用此方法,您可以将序列化合并到消息类本身中,而不必预序列化数据,这可能比创建自定义布局的工作量更少。

我希望这能为你指明正确的方向。如果没有更详细的要求,就很难提供精确的解决方案。

相关内容

  • 没有找到相关文章

最新更新