2016-07-20 2 views
-1

私はマップにフォーマットされたメッセージを配置する必要がありフォーマットされたLOGGER.warnを取得する方法はjavaになりますか?

 LOGGER.warn("Ignore [{}] preference for user [{}] with id = [{}], value =[{}])", 
          preference.getUserPreferenceType(), 
          userService.findById(preference.getUserId()).getUserName(), 
          preference.getUserPreferenceId(), 
          preference.getValue()); 

私のクラスでは、いくつかのログメッセージを持っています。しかし、それはフォーマットされた値でなければなりません。したがって、すべて{}を値に置き換える必要があります。

どうすればいいですか?

+1

地図に_what_を入れますか? –

+0

@Sotirios Delimanolis key - userName、value listエラーメッセージ – gstackoverflow

+2

'' String.format''を使うだけですか?なぜ地図を使うのですか? – f1sh

答えて

0

私は解決策を発見しましたSLF4J/Logbackをご覧ください。Log4j 2も同様です。パフォーマンス上の理由から、これはロギングの内部で行われます。それ以外の場合は、ログメッセージを連結(またはフォーマット)する際に高価なtoString()呼び出しを避けるために、ログレベルを有効にする必要があります。

旧式のロギングフレームワークのみがこれをサポートしていません - できるだけそれらを使用しないでください!

+0

Log4j 1.xは2015年8月に終了しました –

+0

@Arne Burmeisterそこには世界中の古いプロジェクトがたくさんあります – gstackoverflow

+0

Slf4jラッパーを試してください。 –

0

f1shが提案@として、私はあなたのような何かを探していると思う:

MessageFormatter.arrayFormat(oldFormatString, new Object[]{value1,value2...}).getMessage() 
0

通常、このプレースホルダは、ロギングフレームワークやファサードに置き換えられます:。

LOGGER.warn(String.format("First %d, Second %d, Third %d", var1, var2, var3)); 
関連する問題