如何借助log4j2 JSON技术将自定义字段从java应用程序打印到日志文件中?

时间:2017-03-06 09:22:05

标签: java log4j2 apache-commons-logging

我正在寻找以自定义方式打印日志。

例如,

目前我们有以JSON形式的日志结构,

{
  "timeMillis" : 1488791217953,
  "thread" : "restartedMain",
  "level" : "DEBUG",
  "loggerName" : "org.springframework.jdbc.datasource.DriverManagerDataSource",
  "message" : "hello world",
  "endOfBatch" : false,
  "loggerFqcn" : "org.apache.commons.logging.impl.SLF4JLocationAwareLog",
  "threadId" : 17,
  "threadPriority" : 5
}

现在我发现,还有几个字段仍然丢失,这对我来说很重要,

预期的JSON同样如下:

{
  "timeMillis" : 1488791217953,
  "thread" : "restartedMain",
  "level" : "DEBUG",
  .................. 
  "file" : "p1.pck.HelloWorld.java",
  "line" : "190",
  "application-id" : "101",
  "logged in user id " : "199",
  "etc" : "etc"
  ..................
  "threadPriority" : 5
}

注意:日志配置文件log4j2.yml具有以下配置

JsonLayout:
          propertiesAsList: true

1 个答案:

答案 0 :(得分:0)

您希望包含log4j-web工件以在日志中获取上下文数据 -

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-web</artifactId>
    <version>2.8.2</version>
</dependency>

另外,您可能会发现我创建的工件很有用[extended-jsonlayout]。它允许您通过实现一个简单的接口,并在类路径中包含jar,将其他信息添加到json日志消息中。你可以在这里查看 -
https://github.com/savantly-net/log4j2-extended-jsonlayout