随着系统的发展,日志语句将被更改以满足新的需求,理想情况下,应该一致地更改具有相同或非常相似的上下文的日志记录语句。但在许多情况下,开发人员很难记住所有这些内容的存在。然后他们可能只改变其中的一部分,而忘记一致地改变其他部分。
以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.");
...
}
是否有工具或某些文档等解决方案可以帮助他们一致地更改它们?
答案 0 :(得分:0)
当谈到日志记录时,我认为你真的应该尽量避免在日志中添加细节。[whatever_leve]。([message_text]]语句(至少在出现错误时),而你想要创建自己的异常类和将消息详细信息放入其中。使用过滤器/拦截器来处理意外异常的记录也是一种很好的做法。
所以在你的代码示例中,子类抛出一个类型化的Exception,让我们称之为InitializingException(...)。然后是调用者或过滤器来处理它并记录它。
您希望以与业务逻辑代码相同的方式关注代码库的日志记录部分(人们可以认为它是其中的一部分),所以请致敬DRY(不要重复自己)
同样的逻辑也适用于Debug和Trace语句,您不希望在系统中复制粘贴相同的消息。因此,应该采用一般的重构来避免它。但我通常认为调试或跟踪消息可能会发生变化(这取决于开发人员)。