我有一个Java项目,我创建了七个记录器,可以从程序的每个点通过外观访问。但是在互联网上,我看到很多例子都是每个班级都有一个记录器。
最常推荐的记录方式是什么?
答案 0 :(得分:11)
我为每个技术方面使用一个记录器,例如:记录,跟踪,调试,方法输入/输出(private static final...
)。我经常使用共享记录器来实现功能方面,例如:审计线索,安全;公共记录器在共享类中。
我不了解标准或一般最佳做法,但这种方法对我来说效果很好。
答案 1 :(得分:8)
每个类中的记录器更好,更容易扩展。 原因是在一个类中定义一个记录器可以轻松地将实际记录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中的logger是否共享记录器。
所以“每个类中的记录器”只是在每个类中定义一个记录器,但是这样的记录器可能从不同的类引用相同的记录器实例
答案 2 :(得分:0)
我建议你使用一些框架进行日志记录,你可以找到很多它们,作为最受欢迎的log4j之一,它会为你节省很多努力来重新发明轮子,因为它们已经带来了大多数已实施的最佳做法。
如果使用Log4J之类的日志框架,常见的最佳做法是在每个类的静态变量中检索记录器。
class Foo {
private static final Logger log = Logger.getLogger( Foo.class );
}
对于大多数日志记录框架,您可以定义日志级别(WARN,ERROR,DEBUG)以及appender的模式,以便您可以将消息存储在按不同标准过滤的不同文件中。
使用这些框架,您可以轻松设置日志轮换等内容,这非常有用