繁体   English   中英

在Java中跨类实现Logger的标准方法?

[英]Standard way to implement a Logger across classes in Java?

我正在构建一个包含许多类的Javafx应用程序。 我想从所有类中使用java日志记录。 但是所有选项似乎都带有过多或重复的代码。 这些是我能想到的:

  1. 将Logger声明为每个类中的私有静态final字段,即

    private static final Logger LOGGER = Logger.getLogger(MyClass.class.getName());

这个选项似乎有点烦人,必须在每个班级都这样做。

  1. 将Logger从主类传递给每个构造函数

再次似乎并不优雅

  1. 为记录器创建一个类,然后为每个日志项调用该类的静态方法。 似乎只为记录器创建一个额外的类是过多的。

那你们怎么处理这种情况呢? 这只是选择最不好选择的问题吗?

选项1与选项3相结合(就像人们提到的使用类似slf4j的包装器)将允许在实现之间进行切换被广泛使用。

declare Logger as a private static final field in each class i.e.

private static final Logger LOGGER = Logger.getLogger(MyClass.class.getName());

声明一个记录器并不是什么大问题,你应该能够在IDE中定义一个新的类模板,它自动生成记录器代码。

我不同意第三种选择的“过度”:“包装”选项实际上相当优雅,因为它有一个专用的记录器类( SRP ),它允许你切换实现( log4japache-commons-loggingjava。 util.logging etc)“引擎盖下”没有将其余代码耦合到该实现。

正如Luiggi在下面的评论中提到的那样, SLF4J就是这样的实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM