Java-我应该为日志消息使用常量吗?

Java-我应该为日志消息使用常量吗?,java,string,logging,compiler-construction,Java,String,Logging,Compiler Construction,只是一个关于形式的简单问题 我正在记录各种错误消息,我想知道是应该在日志调用中为消息创建一个新字符串,还是应该在用于存储其他字符串常量的接口中创建一个常量字符串,然后引用它。 我使用的是一个代码分析器代码,它暗指后者说,创建一个字符串常量并引用它是更好的做法,即使该字符串只使用了一次。 我只是想知道事实是否如此 提前感谢我不确定您使用的是什么分析仪工具,也不确定您是如何配置的,但我觉得这个建议无效。Java编译器已经为您创建了字符串常量(当代码调用log方法时,它通常不会分配新的字符串实例),那

只是一个关于形式的简单问题

我正在记录各种错误消息,我想知道是应该在日志调用中为消息创建一个新字符串,还是应该在用于存储其他字符串常量的接口中创建一个常量字符串,然后引用它。 我使用的是一个代码分析器代码,它暗指后者说,创建一个字符串常量并引用它是更好的做法,即使该字符串只使用了一次。 我只是想知道事实是否如此


提前感谢

我不确定您使用的是什么分析仪工具,也不确定您是如何配置的,但我觉得这个建议无效。Java编译器已经为您创建了字符串常量(当代码调用log方法时,它通常不会分配新的字符串实例),那么手动执行这项工作有什么意义呢

如果您将字符串常量放入接口中,您可以在类之间共享它们,但不是以您认为的方式:Java编译器会将常量的值复制到使用它的代码中(因此生成的字节码将不再有对接口的引用!)


我的建议是:关闭这个误导性的警告。

日志应该很容易添加和删除;只需提供一个非常薄的层。然后可能会使用MessageFormats,当替换为常量名称时,这些格式很容易出错/不可选中

此外,还会导入字符串常量,然后在常量更改时不再检测更改

日志字符串本身也不是很严格,信息量也不是很大


最好将这些字符串标记为不可国际化。

这是一个讨论类型的问题,可能会被关闭。但我忍不住做出贡献:两者都不要。日志消息属于属性文件,由常量键引用,因此,如果需要,可以将其翻译为其他语言。@ErnestFriedman Hill:日志消息是运行时调试工具,用户不应看到:-)如果您的代码进入某个第三方使用的jar文件,你可以打赌他们会希望你记录的错误消息被本地化@欧内斯特·弗里德曼·希尔:没错,但并非所有客户想要的东西都有意义或应该实现:-)