我有一个Java项目,我创建了七个日志记录器,通过外观者从程序的每个点访问。但是在互联网上,我看到很多示例都是每个类中都有一个日志记录器。
什么是最推荐的记录日志的方法?
在每个类中都有一个日志记录器会更好,更易于扩展。原因是在一个类中定义一个日志记录器可以很容易地将真正的日志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中的日志记录器是否共享日志记录器实例。
因此,“每个类中的一个记录器”仅为每个类定义一个记录器,但是这种记录器可能引用在不同类中使用的相同记录器实例。
我为每个类使用一个日志记录器来处理所有技术方面的问题,例如日志记录、跟踪、调试和方法输入/输出(private static final...
)。通常我会为功能方面使用共享的日志记录器,例如审计日志、安全性,这些使用公共的日志记录器在共享类中。
我不知道是否有标准或一般最佳实践,但这种方法对我来说很有效。
class Foo {
private static final Logger log = Logger.getLogger( Foo.class );
}
使用大多数日志框架,您可以定义日志级别(WARN、ERROR、DEBUG),还可以为附加器定义模式,因此您可以按不同的条件将消息存储在不同的文件中进行过滤。
此外,使用这些框架,您可以轻松设置诸如日志轮换之类的东西,这可能非常有用。