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

时间:2014-10-28 04:09:42

标签: java logging

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

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

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

  2. 这个选项似乎很烦人,不得不在每个班级都这样做。

    1. 将Logger从主类传递给每个构造函数
    2. 再次看起来并不优雅

      1. 仅为记录器创建一个类,然后为该每个日志项调用该类的静态方法。 似乎只为记录器创建一个额外的类是过分的。
      2. 那你们怎么处理这种情况呢?这只是选择最不好选择的问题吗?

2 个答案:

答案 0 :(得分: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中定义一个新的类模板,自动生成记录器代码。

答案 1 :(得分:0)

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

正如Luiggi在下面的评论中提到的java.util.logging就是这样的实施。