【发布时间】:2011-05-02 07:49:15
【问题描述】:
我正在使用java.util.logging 来记录我的应用程序的所有日志。
直到最近,我还在使用没有任何特定配置的日志记录工具。一切都按预期工作,所有日志都在控制台中可见(stderr)
现在,我想为我的日志自定义配置。我希望将日志显示在控制台上,但我也希望将它们写入文件中。我想出了以下解决方案:
public static void main(String[] args) {
System.setProperty("java.util.logging.config.file", "log.config");
Logger defLogger = Logger.getLogger("fr.def"); // all loggers I use begin by "fr.def"
defLogger.setLevel(Level.ALL);
defLogger.addHandler(new ConsoleHandler());
defLogger.addHandler(new FileHandler());
// real code here ...
这是log.config文件的内容:
java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.FileHandler.count=10
java.util.logging.FileHandler.pattern=logs/visiodef2.%g.log
这个解决方案最有效:我可以在控制台和文件中看到日志。除此之外,在某些情况下,一些日志消息会丢失(对于控制台和文件)。日志丢失的情况示例:
- 在 JVM 的关闭挂钩上
- 在默认的未捕获异常处理程序上
- 在 EDT 的异常处理程序上
- 关于主JFrame的windowClosing事件(配置了默认的关闭操作EXIT_ON_CLOSE)
除上述配置外,没有其他配置。不涉及日志级别:我可以看到一些 INFO 日志,但一些丢失的日志是 SEVERE。
我还尝试添加关闭挂钩来刷新所有处理程序,但没有成功。
所以,问题是:以我的方式配置日志记录是否安全?你能看出一些日志丢失的原因吗?
【问题讨论】:
标签: java logging exception-handling