如何在应用程序运行期间更改log4j设置?

是否可以在应用程序执行期间更改log4j设置?

您可以使用PropertyConfigurator.configureAndWatch使log4j生成一个线程,以定期检查属性文件中的更改。

或者,您可以使用本文中描述的JMX: 使用JMX更改日志记录级别

有办法通过JMX访问Log4j并使用JMX控制台来控制filter,记录器,级别,追加器等……

我在某个地方有一个例子,但我需要修剪它以使它可以理解。 你想要这个吗?

我正在使用:

  • Windows 7的
  • Apache Tomcat 7.0.34
  • log4j 1.2.17

如果你按照下面的步骤自动完成(不需要重启Tomcat)(假设你已经将war文件部署到%CATALINA_HOME%\ webapps并启动了startup.bat ):

  1. 转到%CATALINA_HOME%\ webapps \ YourApp \ WEB-INF \ classes
  2. 编辑log4j.properties / log4j.xml并更改记录器级别

    例如:

    • log4j.properties:

      log4j.rootLogger=INFO, stdout, file 

       log4j.rootLogger=DEBUG, stdout, file 
    • 的log4j.xml

            

            

    如果在classes文件夹中同时包含这两个文件,则将考虑XML文件(将忽略.properties文件)。

  3. 在0-10秒内,您将能够在Tomcat控制台和%CATALINA_HOME%\ logs \ catalina.yourDate.log中看到以下行:

    2015年11月12日下午4:52:49 org.apache.catalina.core.StandardContext重新加载

    信息:重新加载具有名称[/ YourApp]的上下文已启动

    2015年11月12日下午4:52:50 org.apache.catalina.loader.WebappClassLoader validateJarFile

    信息……

    2015年11月12日下午4:52:50 org.apache.catalina.core.StandardContext重新加载

    信息:已完成名称为[/ YourApp]的重新加载上下文

  4. 使用该应用程序并查看新的日志记录级别(在控制台和/或日志记录文件中)。