【问题标题】:java.util.logging stops working after a whilejava.util.logging 一段时间后停止工作
【发布时间】:2011-06-11 05:26:39
【问题描述】:

我对 java.util.logging 有疑问。从一开始一切都运行良好,但过了一段时间,记录器只是停止将任何数据写入文件,我不知道为什么(没有异常,没有错误)也不知道如何找到这个问题的原因。

我尝试了谷歌,但没有发现任何类似的问题。

tl,博士; java.util.logging 停止工作,想知道原因。

【问题讨论】:

  • 您确定所使用的Handler 没有设置为文件的最大大小吗?
  • 线程卡住了吗?还是代码运行愉快?
  • @Darien 记录器停在(看似)随机的时间点/文件大小
  • @Jochen Bedersdorfer 整个应用程序运行得很好(好吧,老实说那里有很多线程),唯一的问题是在某些时候记录器(它工作正常环境)只是停止将数据输出到文件。
  • 你能从 jstack 节目中报道吗?

标签: java logging java.util.logging


【解决方案1】:

请注意,从 getLogger 工厂方法返回的记录器可以随时被垃圾收集,这可能会破坏事情,就像您在 main() 中设置的任何级别一样。

http://download.oracle.com/javase/6/docs/api/java/util/logging/Logger.html

使用对 Logger 的强引用以避免它被垃圾:

Logger logger = Logger.getLogger("");

【讨论】:

  • 很棒的答案。为我节省了很多时间。非常非常感谢斯科特
  • 我会同意的。我一直在为同样的问题苦苦挣扎(即记录器在一段时间后停止工作)整整 2 天!您的回答解决了问题;我不知道工厂隐式使用弱引用。
【解决方案2】:

作为@Darien cmets,这可能是因为FileHandler 配置了非零limit

  • 处理程序可能已经切换到下一个文件 - 如果 count 大于 1。
  • 如果count 等于一,它可能会停止。

FWIW - 大多数 Java 开发人员在多年前就放弃了使用 java.util.logging。我会推荐 log4j、slf4j 或 logback,而不是 java.util.logging。

【讨论】:

  • 好吧,如果没有默认值则没有:FileHandler fileMy = new FileHandler("logger.txt", true);
  • 您是否通过使用 LogManager 配置属性来呈现该模拟?
  • @Stephen,我们确实使用 java.util.logging 和改进的 Logger(不同步)和 LogRecord(在 c-toe 中也没有同步),从​​来没有问题。该框架具有足够的可扩展性和灵活性。我们有自己的配置器,带有动态可重新部署的 xml(即不使用 prop 文件),. Imo,它优于两个框架,尤其是 slf4j。
  • @bestsss - 问题是你几乎必须扩展它。例如,标准配置器太有限了(我发现)。相比之下,log4j 和朋友不需要扩展即可使用。
  • @Stephen,除了 key=value 的东西(有点和类意味着糟糕的 props 使用)之外,prop 文件很糟糕,尽管 JBuilder 曾经使用 props 进行配置。我记得我们很久以前就接受了 java.util.logging(1.4 是新的),但它是一个标准库,并且一直存在。我确实希望变得更受欢迎,但它确实缺乏日常翻转、漂亮的格式化程序和可重新部署的配置等东西......但没有什么比 log4j 不能手动做得更好了:)
猜你喜欢
  • 2013-12-20
  • 1970-01-01
  • 1970-01-01
  • 2022-07-15
  • 2013-11-19
  • 2010-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多