0

次のようなログ行のコードがあります。

log.info("Message received with ID :"+ messageId);

プレースホルダーを使用して、すべての連結をログバック スタイルに変更する必要があります。

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

この問題は、 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 に答える
1

new Object[]{messageId}の代わりにメソッド パラメータとして試してくださいmessageId。より正確には:

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