Java 是每个类都有一个记录器,还是整个应用程序都可以访问一组记录器?

Java 是每个类都有一个记录器,还是整个应用程序都可以访问一组记录器?,java,oop,logging,Java,Oop,Logging,我有一个Java项目,我创建了七个记录器,这些记录器由一个facade从程序的每个点访问。但是在互联网上,我看到了很多例子,每堂课都有一个记录者 最推荐的日志记录方式是什么?我在所有技术方面为每个类使用一个日志记录程序,例如日志记录、跟踪、调试、方法输入/输出(private static final…)。我经常使用共享记录器来记录功能方面的信息,例如审计跟踪、安全性;共享类中的公共记录器 我不知道标准或一般最佳实践,但这种方法对我很有效。我建议您使用一些日志框架,您可以找到很多,作为最流行的l

我有一个Java项目,我创建了七个记录器,这些记录器由一个facade从程序的每个点访问。但是在互联网上,我看到了很多例子,每堂课都有一个记录者


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

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


我不知道标准或一般最佳实践,但这种方法对我很有效。

我建议您使用一些日志框架,您可以找到很多,作为最流行的log4j之一,它将为您节省大量重新发明轮子的努力,因为他们已经实现了大多数最佳实践

如果使用Log4J之类的日志框架,一个常见的最佳实践是在每个类的静态变量中检索记录器

class Foo {
    private static final Logger log = Logger.getLogger( Foo.class );
}
对于大多数日志框架,您可以定义日志级别(警告、错误、调试)以及附加程序的模式,以便您可以将消息存储在不同的文件中,并根据不同的标准进行过滤


此外,使用这些框架,您可以轻松设置日志旋转之类的内容,这可能非常有用

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

class Foo {
    private static final Logger log = Logger.getLogger( Foo.class );
}
此外,“每个类一个记录器”的定义并不意味着每个类使用不同的记录器实例

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


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


因此,“每个类中的记录器”只为每个类定义一个记录器,但是这些记录器可能引用不同类中使用的相同记录器实例,因为您只需要初始化一次。更多的实例化是没有意义的,使用final可以确保不会出错。顺便说一句:我们也使用log4j。即使在eclipse应用程序中,我们也会为每个类使用一个记录器来记录日志,并根据eclipse的构建日志机制进行调整(这是因为我们需要在eclipse应用程序和独立应用程序中使用插件代码)。