Est-il possible de laisser log4j sortir sa journalisation au format JSON en modifiant uniquement le log4j.properties.xml
fichier de configuration?
J'utilise une ancienne application qui utilise log4j 1.2
. Je ne vois que la disposition XML mais pas de disposition JSON.
il suffit d'utiliser buildin PatternLayout est 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
sera mis comme:
{
"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"
}
c'est la mise en page JSON officielle
https://github.com/logstash/log4j-jsonevent-layout
1) Ajouter une dépendance 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) Ajoutez une configuration à votre log4j.properties
fichier
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
Oui c'est possible. Jetez un oeil à ce lien Il peut générer
{
"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"
}