我有一个类似的日志声明:
bytes
我希望将第一个2 bytearray
替换为字符串消息和localdatetime。但是消息中的第三个private static final Logger LOGGER = LoggerFactory.getLogger(Foo.class);
long elapsedTime = 8348; //test value
LOGGER.info("message:{},timestamp:{}",
"Finished execution in {} milliseconds", elapsedTime,
LocalDateTime.now());
应该用long替换。所以它应该记录:
{}
但相反它记录:
{}
有任何方法可以使用嵌套变量替换日志记录吗?我可以像这样连接字符串
INFO app.Foo - message:Finished execution in 8348 milliseconds,timestamp:2016-03-25T13:55:05.026
但我想避免繁琐的连接。
答案 0 :(得分:1)
它不会那样工作,因为消息值只是被替换而不是被解析。 var arg参数用于主要消息格式。
我可以考虑以下两个选项。
LOGGER.info("message:Finished execution in {} milliseconds,timestamp:{}", elapsedTime,
LocalDateTime.now());
OR
LOGGER.info("message:{},timestamp:{}", String.format("Finished execution in %s milliseconds",
elapsedTime), LocalDateTime.now());
答案 1 :(得分:0)
我检查了Logback 1.1.5
ch.qos.logback.classic.spi.LoggingEvent
和argumentArray在里面。并且
org.slf4j.helpers.MessageFormatter.arrayFormat
不支持嵌套,只支持其他参数中的对象数组。 我认为这同样适用于Log4j。