为了执行JSON日志记录,我使用了Log4J2中的属性(properties =“ true”):
<rollingFile name="JsonFile" fileName="logs/student-ds-service.json"
filePattern="logs/student-ds-service-%d{yyyy-MM-dd}-%i.json.gz">
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
<JsonLayout complete="true" properties="true">
</JsonLayout>
</rollingFile>
它允许我执行以下操作:
try (final CloseableThreadContext.Instance ctc = CloseableThreadContext.putAll(map)) {
logger.info(message);
}
“ map”是键和值的映射。它将在日志中这样呈现:
{
"timeMillis" : 1534426598078,
"thread" : "http-nio-auto-1-exec-2",
"level" : "INFO",
"loggerName" : "be.api.impl.V1ApiImpl",
"message" : "Get student data by citizenNumber=12345678901",
"endOfBatch" : false,
"loggerFqcn" : "org.apache.logging.log4j.spi.AbstractLogger",
"contextMap" : {
"citizenNumber" : "12345678901"
},
"threadId" : 23,
"threadPriority" : 5
}
我的问题是我想写一个定制的记录器来做这样的事情:
public void info(String message, Map<String, String> map) {
try (final CloseableThreadContext.Instance ctc = CloseableThreadContext.putAll(map)) {
logger.info(message);
}
}
其中“ logger”是log4j2 logger实现。
最干净的方法是什么?
答案 0 :(得分:0)
我使用了http://logging.apache.org/log4j/2.0/manual/customloglevels.html#CustomLoggers中所述的扩展记录器的生成方法。问题是我必须在要记录的类中显式引用记录器实现,我希望可以只使用LogManager.getLogger(...)。