【问题标题】:Java - should I use constants for log messages? [closed]Java - 我应该为日志消息使用常量吗? [关闭]
【发布时间】:2013-03-12 13:45:43
【问题描述】:

只是一个关于表单的简单问题。

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

提前致谢

【问题讨论】:

  • 这是一个讨论型问题,可能会被关闭。但我无法抗拒贡献:两者都不做。日志消息属于属性文件,由常量键引用,因此可以在需要时将它们翻译成其他语言。
  • @ErnestFriedman-Hill:日志消息是运行时调试工具,而不是用户应该看到的东西 :-)
  • 如果您的代码进入某个第三方使用的 jar 文件,您可以打赌他们会希望您记录的错误消息被本地化!
  • @ErnestFriedman-Hill:没错,但并非客户想要的一切都有意义或应该实施:-)

标签: java string logging compiler-construction


【解决方案1】:

我不确定您使用的是什么分析工具或如何配置它,但这些建议对我来说似乎无效。 Java 编译器已经为您创建了字符串常量(当代码调用 log 方法时,它通常不会分配新的 String 实例),那么手动完成这项工作有什么意义呢?

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

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

【讨论】:

    【解决方案2】:

    日志应该易于添加和删除;只需提供一个非常薄的层。然后可能使用了 MessageFormats,当替换为常量名称时容易出错/无法检查。

    还导入字符串常量,然后在常量更改时不再需要检测更改。

    另外,日志字符串不是很严格,信息量很大。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-30
      • 2011-06-07
      • 1970-01-01
      • 2016-05-31
      • 2018-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多