log4j是否支持JSON格式?

Ste*_*fan 24 java json log4j

是否可以通过仅更改log4j.properties.xml配置文件让log4j以JSON格式输出其日志记录?
我使用了一个旧的应用程序log4j 1.2.我只看到XML布局但没有JSON布局.

小智 36

这是官方的JSON布局

https://github.com/logstash/log4j-jsonevent-layout

1)添加maven依赖项https://mvnrepository.com/artifact/net.logstash.log4j/jsonevent-layout

<dependency>
    <groupId>net.logstash.log4j</groupId>
    <artifactId>jsonevent-layout</artifactId>
    <version>1.7</version>  
</dependency>
Run Code Online (Sandbox Code Playgroud)

2)将配置添加到您的log4j.properties文件

 log4j.rootCategory=WARN, RollingLog
 log4j.appender.RollingLog=org.apache.log4j.DailyRollingFileAppender
 log4j.appender.RollingLog.Threshold=TRACE
 log4j.appender.RollingLog.File=api.log
 log4j.appender.RollingLog.DatePattern=.yyyy-MM-dd
 log4j.appender.RollingLog.layout=net.logstash.log4j.JSONEventLayoutV1
Run Code Online (Sandbox Code Playgroud)


小智 23

只需使用buildin PatternLayout即可:

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.encoding=UTF-8
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern={"debug_level":"%p","debug_timestamp":"%d{ISO8601}","debug_thread":"%t","debug_file":"%F", "debug_line":"%L","debug_message":"%m"}%n
Run Code Online (Sandbox Code Playgroud)

会出来像:

{
    "debug_level" : "INFO",
    "debug_timestamp" : "2016-05-26 16:37:08,938",
    "debug_thread" : "main",
    "debug_file" : "TestLogOutPut.java",
    "debug_line" : "316",
    "debug_message" : "hello i am a log message"
}
Run Code Online (Sandbox Code Playgroud)

  • 如果消息包含"",这将中断. (31认同)
  • 当错误消息包含"\n"等时,这不起作用 (10认同)
  • 这不会转义json,并会导致错误。 (3认同)