log4j线程

时间:2016-10-06 18:20:40

标签: java multithreading memory-leaks log4j

我在log4j v1中遇到内存泄漏问题。如何解决此内存泄漏问题。 此方法定期检查我的类中的log4j.properties文件更新。

  

PropertyConfigutaror.configureAndWatch(time_ms);

但是在关机期间tomcat内存泄漏问题来了。日志如下:

  

06-Oct-2016 15:13:55.973警告[localhost-startStop-2]   org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads   Web应用程序[myapp]似乎已启动一个名为的线程   [Thread-10]但未能阻止它。这很有可能创造一个   内存泄漏。堆栈线程跟踪:

     

java.lang.Thread.sleep(Native Method)   org.apache.log4j.helpers.FileWatchdog.run(FileWatchdog.java:103)

提前致谢

1 个答案:

答案 0 :(得分:1)

  

有没有办法让log4j在配置文件发生变化时自动重新加载?

     

是。 DOMConfigurator和PropertyConfigurator都支持通过configureAndWatch方法自动重新加载。有关详细信息,请参阅API文档。

     

因为configureAndWatch启动了一个单独的wathdog线程,并且由于无法在log4j 1.2中停止此线程,所以configureAndWatch方法对于在应用程序被回收的J2EE环境中使用是不安全的。 {{ 3}}

对于像Tomcat这样不完整的应用服务器,第二种说法也是如此。

如果您想在运行时重新加载配置,我建议更新到log4j 2.

还可以编写自己的属性文件阅读器并以编程方式设置日志配置。有关详细信息,请参阅(1)