全局日志记录到Java应用程序中的文件

时间:2014-01-09 14:52:40

标签: java swing netbeans java.util.logging

我有一个需要一些日志记录功能的swing应用程序。我想将所有全局问题记录到系统某处的日志文件中。

我开始在我的main中设置我的记录器:

// Setup global logging.
Logger.getLogger("").addHandler(new FileHandler("%t/log.txt"));

我知道%t表示临时目录,但是当我在Netbeans工作时,这个目录位于Windows机器上的哪个位置?独立运行时(例如Netbeans之外)文件位于何处?有没有更好的选择,例如将文件放在My Documents或类似的东西?是在temp目录标准实践中创建日志文件吗?

另外,是保留记录器的名称""全局记录器的常用做法,还是应该使用最常用的包(例如com.some.package)?

现在,当我去实际记录文件时,我可以简单地进行以下调用,对吗?

Logger.getLogger("").log(Level.SEVERE, msg, ex);

非常感谢任何有关最佳做法的建议。

2 个答案:

答案 0 :(得分:0)

要获取临时文件夹位置,您可以执行以下操作:

System.out.println(System.getProperty("java.io.tmpdir"));

此外,由于logbackslf4jlog4j等其他日志记录机制的许多原因,使用java util logger进行日志记录的情况较差,因此我建议您开始使用其中一个记录器。

答案 1 :(得分:0)

您应该创建记录器并在单例类中添加处理程序。来自java doc:

可以通过调用其中一个getLogger工厂方法获取Logger对象。这些将创建一个新的Logger或返回一个合适的现有Logger。重要的是要注意,如果没有保留对Logger的强引用,则可以随时对其中一个getLogger工厂方法返回的Logger进行垃圾收集。

这意味着记录器可能被垃圾收集,您的文件处理程序将丢失。

至于文件位置,为什么不在jar所在的文件夹下创建一个日志目录?