是否允许为您的日志创建一个静态类?
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.
答案 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类方法,您根本无法做到这一点。