2015-06-08 77 views
0

我看到Java Logging - where is my log file?,但对我来说,我想找出其中日志文中FileHandler竟开,也就是说,如果我启动多个进程,并有一个模式设置为查找实际打开日志文件

我的Java应用程序
java.util.logging.FileHandler.pattern=MyApp.%g.%u.log 

然后%g%u将取决于有多少进程正在运行的数字将被替换。

我可以迭代所有日志记录处理程序并找到基于文件的处理程序。但据我所见,FileHandler没有办法获取当前打开的文件。

有没有一种方法可以做到这一点?

+0

相关:[java.util.logging.FileHandler]所需的[JDK-4798814 getFiles())(https://bugs.openjdk.java.net/browse/JDK-4798814)。 – jmehrens

回答

2

是的,你可以使用反射来打破private的保护。看到这个问题:How do I read a private field in Java?

下一个选项是覆盖类,并编写你自己的处理程序,它公开此字段。

最后一个选项是使用不同的日志框架,如logback或log4j2。为他们写自己的appender将比7月更简单。

+0

我实际上使用了这些组合,实际上需要使用“lockName”作为原始文件名的扩展FileHandler甚至不再作为成员,所以我最终这样做: \t Field f = FileHandler.class。 getDeclaredField( “lockFileName”); \t f.setAccessible(true); \t return StringUtils.removeEnd((String)f.get(this),“.lck”); – centic

+0

我刚刚发布了一个类似的问题,但我正在寻找不需要反射的Java 9解决方案。请参阅https://stackoverflow.com/questions/48697915/find-log-file-name-at-run-time-with-java-9-jdk-logging – David