我的代码包含日志行,如下所示:
log.info("Message received with ID :"+ messageId);
我需要将所有concat更改为使用占位符的logback样式。
log.info("Message received with ID :{}", messageId);
它工作正常,当我看到日志时它们没问题。我也有基于日志记录的测试,我写了期望消息,然后发送它通过逻辑的消息,我检查,如果日志与预期相同。 http://www.infoq.com/articles/Utilizing-Logging。当我有concat样式日志时,每一件事情都很好,但是现在我看不到值,我在这个测试中看到了{},它们都失败了。 所以,申请给我:
Message received with ID : 32145
但测试给了我:
Message received with ID :{}
有没有人有同样的问题以及如何解决?请帮我。感谢。
答案 0 :(得分:1)
您应该尝试new Object[]{messageId}
作为方法参数而不是messageId
。
更确切地说:
log.info("Message received with ID :{}", new Object[]{messageId});
答案 1 :(得分:1)
问题很可能是InfoQ article中提到的TestLoggingAppender中的实现问题。文章提到了doAppend
方法的实现:
public synchronized void doAppend(LoggingEvent loggingEvent) {
String msg = **loggingEvent.getMessage()**.toString();
}
在logback-classic中,ILoggingEvent。getMessage()方法返回原始(未格式化)消息。您需要调用getFormattedMessage()来检索格式化的消息。