2016-03-25 50 views
0

我有一個記錄的語句,像這樣:的Java的logback嵌套的變量替換

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()); 

我想第2 {}由字符串消息和localdatetime所取代。但是第三個{}裏面的信息應該被替換成long。因此,它應該記錄:

INFO app.Foo - message:Finished execution in 8348 milliseconds,timestamp:2016-03-25T13:55:05.026 

而是將其記錄:

INFO app.Foo - message:Finished execution in {} milliseconds,timestamp:5017 

任何方式嵌套變量替換的記錄?我可以連接字符串像

long elapsedTime = 8348; //test value 
LOGGER.info("message:{},timestamp:{}", 
       "Finished execution in " + elapsedTime + " milliseconds", 
       LocalDateTime.now()); 

但我想避免繁瑣的連接。

+0

你有你的格式化字符串3 {}中,但只有2個參數後,每{}應遵循的說法一致。 –

+0

@DennisR右我明白爲什麼結果是這樣,但我想看看我可以如何嵌套變量替換。 – Richard

+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()); 
0

我檢查的logback 1.1.5

ch.qos.logback.classic.spi.LoggingEvent 

和argumentArray在裏面。並且

org.slf4j.helpers.MessageFormatter.arrayFormat 

不支持嵌套,只有附加參數中的對象數組。 我認爲這同樣適用於Log4j。