Я использую log4j для проектов разных типов и имею некоторый опыт работы с log4j2. Во всех реализациях использовались компоновщик и макет по умолчанию. В настоящее время мне нужно написать приложение, которое записывается в формате json. Поэтому я попробовал компоновку log4j2 JSONLayout, установив очень простой log4j2-регистратор.Лучший способ писать пользовательские сообщения json с помощью log4j2
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>
В результате в записи журнала аналогично;
, {
"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
}
Что мне нужно, чтобы войти в формат JSON следующим образом:
, {
"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" }
}
Это possibile с log4j2 JSONLayout или есть любой другой макет я могу использовать, чтобы получить этот формат?
Nice, но я хочу, чтобы я мог достичь этой цели без sl4j. log4j2.8 все еще имеет поддержку – prayagupd
Вы можете, мне пришлось искать альтернативный путь, потому что slF4j интерферировал. – pcvnes
В моем комментарии я хочу сказать, что «log4j 2.8 все еще не поддерживает json logs». Он печатает в формате json, но не в сообщении, которое я добавляю. – prayagupd