【问题标题】:Find actual opened logfile with JDK Logging使用 JDK Logging 查找实际打开的日志文件
【发布时间】:2015-06-08 11:05:56
【问题描述】:

我看到了Java Logging - where is my log file?,但在我的情况下,我想在我的 Java 应用程序中找出 FileHandler 实际打开的日志文件,即如果我启动多个进程并将模式设置为

java.util.logging.FileHandler.pattern=MyApp.%g.%u.log

然后%g 和%u 将根据正在运行的进程数替换为数字。

我可以遍历所有日志处理程序并找到基于文件的处理程序。但据我所知,FileHandler 中没有任何方法可以获取当前打开的文件。

有什么办法可以做到吗?

【问题讨论】:

标签: java logging java.util.logging


【解决方案1】:

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

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

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

【讨论】:

  • 我实际上使用了这些的组合,一个扩展的 FileHandler 它实际上需要使用“lockName”,因为原始文件名甚至不再作为成员可用,所以我最终做了: Field f = FileHandler.class.getDeclaredField("lockFileName"); f.setAccessible(true); return StringUtils.removeEnd((String) f.get(this), ".lck");
  • 我刚刚发布了一个类似的问题,但我正在寻找不需要反射的 Java 9 解决方案。见stackoverflow.com/questions/48697915/…
猜你喜欢
  • 2010-11-20
  • 2021-06-24
  • 1970-01-01
  • 1970-01-01
  • 2021-09-19
  • 1970-01-01
  • 1970-01-01
  • 2017-08-17
  • 2016-10-02
相关资源
最近更新 更多