如何在兄弟类中重构日志记录语句?

时间:2018-04-09 15:01:19

标签: java logging

随着系统的发展,日志语句将被更改以满足新的需求,理想情况下,应该一致地更改具有相同或非常相似的上下文的日志记录语句。但在许多情况下,开发人员很难记住所有这些内容的存在。然后他们可能只改变其中的一部分,而忘记一致地改变其他部分。

以Java代码片段为例,有两个兄弟类(ChildClassA,ChildClassB),它们都扩展了相同的超类(ParentClass),它们有一对类似的方法,它们具有相似的功能并包含相同的日志语句

public class ChildClassA implements ParentClass{
  public void processShellCommand(){
  ...
  logger.error("Error initializing command, field " + field.getName() + " is not accessible.");
  ...
 }

public class ChildClassB implements ParentClass{
  public void processNetworkCommand(){
  ...
  logger.error("Error initializing command, field " + field.getName() + " is not accessible.");
  ...
 }

是否有工具或某些文档等解决方案可以帮助他们一致地更改它们?

1 个答案:

答案 0 :(得分:0)

当谈到日志记录时,我认为你真的应该尽量避免在日志中添加细节。[whatever_leve]。([message_text]]语句(至少在出现错误时),而你想要创建自己的异常类和将消息详细信息放入其中。使用过滤器/拦截器来处理意外异常的记录也是一种很好的做法。

所以在你的代码示例中,子类抛出​​一个类型化的Exception,让我们称之为InitializingException(...)。然后是调用者或过滤器来处理它并记录它。

您希望以与业务逻辑代码相同的方式关注代码库的日志记录部分(人们可以认为它是其中的一部分),所以请致敬DRY(不要重复自己)

同样的逻辑也适用于Debug和Trace语句,您不希望在系统中复制粘贴相同的消息。因此,应该采用一般的重构来避免它。但我通常认为调试或跟踪消息可能会发生变化(这取决于开发人员)。