如何在java项目中避免不需要的日志消息?

时间:2009-01-07 12:32:42

标签: java nls

在我的java项目中,我在messages.properties文件上有一堆外部化的字符串。在其各自的Messages.java文件中,我具有相同数量的公共静态字符串类型属性,因此我可以访问这些外部化文本。

然后,我实现了一个名为getString的方法,它接收常量的名称作为其参数,并返回所需的文本。这样,就不需要在Messages.java文件中声明所有公共静态字符串类型属性。

但在执行此操作后,我的日志中充满了“ NLS未使用的消息”消息。

您知道是否有办法阻止记录这些警告信息?

提前致谢。

3 个答案:

答案 0 :(得分:5)

您的Messages课程 - 听起来像是org.eclipse.osgi.util.NLS。{/ p>

如果是这种情况,它的目的是满足要求:

  • 提供编译时检查消息是否存在。
  • 以避免包含键和值的映射的内存使用(在资源包方法中就是这种情况)。
  • 良好的i18n支持。

即。 NLS使用在messages.properties中找到的Message.staticVariable的值填充staticVariable的值。

警告日志记录提供有关Messages.javamessages.properties文件不匹配的信息。

您的getString()方法听起来好像没有使用NLS的任何优势,正如其他人所建议的那样,您可能最好使用ResourceBundle。

答案 1 :(得分:3)

消息听起来像你写的一个类,因为我没有在我的JDK 6 javadocs中看到它。

听起来你已经尝试重新发明java.util.ResourceBundle。我建议使用它而放弃你的课程。它具有正确处理I18N的附加优势。

我认为在类中对公共静态消息密钥进行硬编码没有任何价值。这是你必须要维护的另一件事。如果我理解你正在做什么,我会扔掉你的消息并改用ResourceBundle。

答案 2 :(得分:0)

duffymo,正如jamesh所说,Messages是我写的一个类,它扩展了org.eclipse.osgi.util.NLS。它有一个私有静态属性,其类型是...... ResourceBundle!

jamesh,感谢详细介绍NLS的工作方式。

根据您的回答,我从项目中删除了Messages类,并在需要使用外化字符串的类上添加了ResourceBundle类型属性。另外,我这样做的方式是访问外化字符串的行不需要更改。

我们项目中的文件数量已经减少,代码保持与以前一样干净,并且没有更多日志警告。

谢谢你们,伙计们。你摇滚。