Ich habe Log4j für verschiedene Arten von Projekten verwendet und habe einige Erfahrung mit Log4j2. Alle Implementierungen verwendeten den Standardappender und das Layout. Zur Zeit muss ich eine Anwendung schreiben, die im JSON-Format schreibt. Also habe ich das log4j2 JSONLayout Layout ausprobiert, indem ich einen sehr einfachen log4j2 Logger eingerichtet habe.Die beste Möglichkeit, benutzerdefinierte JSON-Nachrichten mit log4j2 zu schreiben
public class JSONLogger {
private static final Logger LOGGER = LogManager.getLogger();
public static void main(String[] args) {
JSONLogger jsonlogger = new JSONLogger() ;
}
public JSONLogger() {
LOGGER.log(Level.FATAL, "hi mum!") ;
int val1 = 10, val2 = 11, val3 = 12;
LOGGER.log(Level.FATAL,"val1={}, val2={}, val3={}", val1, val2, val3);
}
}
jsonLoggerProperties.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
<Properties>
<Property name="log-path">/Users/petervannes/NetBeansProjects/JSONLogger/logfiles</Property>
</Properties>
<Appenders>
<RollingFile name="json_file_appender" fileName="${log-path}/jsonlogger.json"
filePattern="${log-path}/%d{yyyyMMdd}_jsonlogger-%i.json" >
<JSONLayout complete="true" compact="false"/>
<Policies>
<SizeBasedTriggeringPolicy size="1 KB" />
</Policies>
<DefaultRolloverStrategy max="4"/>
</RollingFile>
</Appenders>
<Loggers>
<root level="debug" additivity="false">
<AppenderRef ref="json_file_appender"/>
</root>
</Loggers>
</Configuration>
in einem Logeintrag Resultierende ähnelt;
, {
"timeMillis" : 1474573600359,
"thread" : "main",
"level" : "FATAL",
"loggerName" : "JSONLogger",
"message" : "val1=10, val2=11, val3=12",
"contextStack" : [ "fieldName2" ],
"endOfBatch" : false,
"loggerFqcn" : "org.apache.logging.log4j.spi.AbstractLogger",
"threadId" : 1,
"threadPriority" : 5
}
Was ich brauche, ist in ein JSON-Format wie folgt zu protokollieren;
, {
"DateTime" : "08/01/2016 21:33:22.334",
"level" : "FATAL",
"Summary" : "Something has gone wrong",
"ChainManager" : "Manager A",
"Optionals" : { "Key_1": "Value1",
"Key_2": "Value2" }
}
Ist das possibile mit dem log4j2 JSONLayout oder gibt es eine andere Layout ich dieses Format bekommen kann?
Schön, aber ich wünschte, ich dies ohne sl4j erreichen könnte. log4j2.8 hat noch Unterstützung – prayagupd
Sie können, ich musste nach einem alternativen Pfad suchen, weil slF4j interferring war. – pcvnes
Nun in meinem Kommentar, ich meine zu sagen "Log4j 2.8 hat noch keine Unterstützung von Json-Logs". Es druckt im JSON-Format, aber nicht die Nachricht, die ich hinzufüge. – prayagupd