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 中消息的类型是实际的 Object 并且仅在稍后在框架内它被转换为实际的字符串。这是在消息传递给附加程序之前由 log4j 完成的,但看起来附加程序仍然可以获取原始对象。因此,似乎可以为 log4j 编写自定义附加程序,并结合自定义消息类型来提供您想要的行为,但它会很复杂。

我认为您最好在控制台和 log4j 之上放置一个层,然后让它处理直接向控制台发送本地化消息并向 log4j 发送英文消息。

于 2012-08-10T06:55:36.350 回答
0

如果您只在一个(或几个)地方执行此日志记录,则可以将日志记录写入两个记录器实例:

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 回答