Logback占位符不使用测试

时间:2012-08-02 11:59:28

标签: java logging slf4j logback

我的代码包含日志行,如下所示:

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 :{}

有没有人有同样的问题以及如何解决?请帮我。感谢。

2 个答案:

答案 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()来检索格式化的消息。