是每个类一个记录器,还是由整个应用程序访问的一组记录器?

2022-09-03 13:15:30

我有一个Java项目,我创建了七个记录器,这些记录器可以通过程序的每个点的外观访问。但是在互联网上,我看到很多例子,每个班级都有一个记录器。

最推荐的日志记录方法是什么?


答案 1

每个类中的记录器更好,更易于扩展。原因是,在一个类中定义一个记录器很容易将真正的日志记录 API 与记录器的配置(格式、持久性)分开。我使用过不止一个庞大而复杂的java软件(>100万行代码),它们每个类都使用一个记录器。

此外,“每个类一个记录器”的定义并不意味着每个类使用不同的记录器实例。

class Foo {
    private static final Logger log = Logger.getLogger( Foo.class );
}


class Bar {
    private static final Logger log = Logger.getLogger( Bar.class );
}

上述代码中引用的两个记录器是否使用相同的记录器实例尚不清楚。通常,有一个配置位置(在属性文件或代码中)指定 Foo 和 Bar 中的记录器是否共享记录器实例。

因此,“每个类中的记录器”只是为每个类定义一个记录器,但此类记录器可能引用不同类中使用的相同记录器实例


答案 2

我为每个类使用一个记录器来处理所有技术方面,例如日志记录,跟踪,调试,方法输入/输出()。我经常使用共享记录器来实现功能方面,例如审计跟踪,安全性;共享类中的公共记录器。private static final...

我不了解标准或一般的最佳实践,但这种方法对我来说效果很好。