Java logback嵌套变量替换

时间:2016-03-25 17:56:10

标签: java logging log4j

我有一个类似的日志声明:

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

但我想避免繁琐的连接。

2 个答案:

答案 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。