2

Java アプリケーションでメッセージをローカライズしようとしています。Locale に基づいて ResourceBundle の読み込みを使用しています。

コンソールのメッセージをローカライズし、ログ ファイルのメッセージを英語にしたい。

私がやっていることはこれです:

 if (bundle != null) { 
     MessageFormat formatter = new MessageFormat(bundle.getString(message));
     Object [] messageArgument = new Object[] {"arg1"};
     logger.info(formatter.format(messageArgument)); 
  } 

ConsoleHandler のしきい値を INFO に設定しました。問題は、情報ログ ファイルでさえ、コンソールと共にローカライズされたメッセージを含むことです。

英語のメッセージをログ ファイルに入れ、ローカライズされたメッセージをコンソールに入れる方法はありますか?

4

2 に答える 2

2

編集:完全な書き直し

通常、ログを記録するとき、文字列がロガーに渡されます。この文字列は既にローカライズされており、その後翻訳することはできません。ただし、log4j のメッセージのタイプは実際のオブジェクトであり、後でフレームワーク内で実際の文字列に変換されます。これは、メッセージがアペンダーに渡される前に log4j によって行われますが、アペンダーはまだ元のオブジェクトを取得できるようです。そのため、log4j 用のカスタム アペンダを、必要な動作を提供するカスタム メッセージ タイプと組み合わせて作成することは可能であるように思われますが、複雑になります。

コンソールとlog4jの上にレイヤーを配置して、ローカライズされたメッセージをコンソールに直接送信し、英語のメッセージをlog4jに送信することを処理する方がよいと思います。

于 2012-08-10T06:55:36.350 に答える
0

このロギングを 1 か所 (または数か所) でのみ行う場合は、ロギングを 2 つのロガー インスタンスに書き込むことができます。

if (bundle != null) {
  MessageFormat formatter = new MessageFormat(bundle.getString(message));
  Object [] messageArgument = new Object[] {"arg1"};
  locale_logger.info(formatter.format(messageArgument)); 
  english_logger.info(message);
}
于 2012-08-10T07:15:04.777 に答える