Java公共记录器

时间:2015-08-26 12:04:49

标签: java logging

是否允许为您的日志创建一个静态类?

public final class Log {

    public static final Logger LOGGER = Logger.getLogger(Log.class.getName());

}

并在需要时调用它?

Log.LOGGER.info("Let's log something!");

而不是在每个类上添加这一行代码?

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

我读到的信息是你应该在每个类中初始化Logger。

public static final Logger LOGGER = Logger.getLogger(ClassName.class.getName());

或者走的路是什么?我更喜欢静态approuch而不是在每个类中初始化记录器......

我试了一下,结果如下。

预览:

日志

public class Log {

    public static final Logger LOGGER = Logger.getLogger(Log.class.getName());

}

应用

final class App() {

    public static void main(String[] args) {
        start();
    }

    private static void start() {
        Log.LOGGER.info("Starting the application.");
    }

}

内核

public final class Kernel() {

    public static void preload() {
        Log.LOGGER.info("Preload kernel modules.");
    }

}

输出:

Aug 26, 2015 2:17:34 PM nl.nberlijn.powercontrol.App start
INFO: Starting the application.
Aug 26, 2015 2:17:34 PM nl.nberlijn.powercontrol.kernel.Kernel preload
INFO: Preload kernel modules.

2 个答案:

答案 0 :(得分:1)

如果您想遵循类似的方法,我建议使用静态方法进行日志记录,如下例所示:

m

然后只需使用以下命令在客户端类中调用它:

 public final class Log {

    private static final Logger LOGGER = Logger.getLogger(Log.class.getName());
    public void logError(String someText) {
       LOGGER.error(someText);
    }
    public static LogInfo(String someText) {
       LOGGER.info(someText);
    }
}

当然在您需要静态导入之前:

    private static void start() {
        LogInfo("Starting the application.");
    }

这是一种可以遵循的方法,但我更愿意将记录器注入需要记录某些内容的应用程序组件中,使事情更加分离......

答案 1 :(得分:1)

这是允许的,但有一个原因是人们不这样做。

通常的方法是为每个类设置一个单独的记录器,您可以根据要查看的包和类,在什么级别过滤日志记录。这样你就不必过于担心是否要给记录器插入一个调用,即使你不需要它也可以保留它,因为你可以将它过滤掉。当出现问题时,您可以仅为那些您感兴趣的类增加日志级别。但是使用单个Log类方法,您根本无法做到这一点。