2015-04-01 5 views
14

È possibile consentire a log4j di eseguire l'accesso nel formato JSON modificando solo il file di configurazione log4j.properties.xml?
Mi avvalgo di una vecchia applicazione che utilizza log4j 1.2. Vedo solo il layout XML ma nessun layout JSON.log4j supporta il formato JSON?

risposta

18

basta usare buildin PatternLayout è 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 

sarà fuori messo come:

{ 
    "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

impressionante ... ha lavorato come un fascino .. –

+9

Questo si romperà se il messaggio contiene ' "'. –

+0

Impossibile funzionare se il messaggio di errore contiene "\ n", ecc. – xuanyuanaosheng

1

Sì È possibile. Take a look at this link Può generare

{ 
    "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

questo è il layout ufficiale JSON

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

1) Aggiungere la dipendenza 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> 

2) Aggiungere la configurazione al file di 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