0

我有带有日志行的代码,如下所示:

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

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

4

2 回答 2

1

You should try new Object[]{messageId} as method paramether instead of messageId. To be more precise:

log.info("Message received with ID :{}", new Object[]{messageId});
于 2012-08-02T12:09:33.593 回答
1

该问题很可能是InfoQ 文章中提到的 TestLoggingAppender 中的实现问题。文章中提到了其doAppend方法的实现:

public synchronized void doAppend(LoggingEvent loggingEvent) {
  String msg = **loggingEvent.getMessage()**.toString();
}

在 logback-classic 中,ILoggingEvent .getMessage() 方法返回原始(未格式化)消息。您需要调用getFormattedMessage()来检索格式化的消息。

于 2012-08-03T06:26:13.963 回答