是否允许为您的日志创建一个静态类?
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());
或者怎么走?我更喜欢一些静态方法而不是在每个类中初始化记录器...
我试了一下,结果如下。
预览:
日志
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.
最佳答案
如果您想遵循类似的方法,我建议您使用静态方法进行日志记录,而不是像下面的示例那样:
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.");
}
当然在你需要静态导入之前:
import static com.yourpackage.Log.*
这是一种可以遵循的方法,但我更愿意将记录器注入(inject)到需要记录某些内容的应用程序组件中,从而使事情更加解耦......
关于Java公共(public)记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32226164/