2015-04-01 13 views
14

Czy jest możliwe, aby log4j mógł logować się w formacie JSON, zmieniając tylko plik konfiguracyjny log4j.properties.xml?
Korzystam ze starej aplikacji, która używa log4j 1.2. Widzę tylko układ XML, ale nie ma układu JSON.Czy log4j obsługuje format JSON?

Odpowiedz

18

wystarczy użyć buildin PatternLayout jest ok:

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 

będzie się umieścić jak:

{ 
    "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" 
} 
+0

niesamowite log4j.properties ... działało jak czar .. –

+9

To złamać jeśli wiadomość zawiera ' "'. –

+0

To nie może działać, gdy komunikat o błędzie zawiera "\ n" itp. – xuanyuanaosheng

1

Tak Jest to możliwe. Take a look at this link To może generować

{ 
    "timestamp":1352412458890, 
    "date":"Nov 8, 2012 10:07:38 PM", 
    "hostname":"michael1", 
    "username":"michael", 
    "level":"INFO", 
    "thread":"main", 
    "classname":"uk.me.mjt.log4jjson.SimpleJsonLayoutTest", 
    "filename":"SimpleJsonLayoutTest.java", 
    "linenumber":25, 
    "methodname":"testDemonstration", 
    "message":"Example of some logging" 
} 
15

ten jest oficjalnym graficzny wzór JSON

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

1) Dodaj maven zależność https://mvnrepository.com/artifact/net.logstash.log4j/jsonevent-layout

<dependency> 
    <groupId>net.logstash.log4j</groupId> 
    <artifactId>jsonevent-layout</artifactId> 
    <version>1.7</version> 
</dependency> 

2) Dodaj konfigurację do pliku

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