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

时间:2011-02-22 07:57:14

标签: java log4j

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

3 个答案:

答案 0 :(得分:9)

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

或者,您可以使用此帖中描述的JMX:Change Logging Levels using JMX

答案 1 :(得分:3)

通过JMX可以访问Log4j并使用JMX控制台来控制过滤器,记录器,级别,追加器等,可以做到这一点......

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

答案 2 :(得分:2)

我正在使用:

  • 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 并更改记录器级别

    E.g:

    • log4j.properties:

      log4j.rootLogger=INFO, stdout, file
      

      变为

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

      <root>
          <level value="INFO" />
          <appender-ref ref="console" />
          <appender-ref ref="file" />
      </root>
      

      变为

      <root>
          <level value="DEBUG" />
          <appender-ref ref="console" />
          <appender-ref ref="file" />
      </root>
      

    如果classes文件夹中有这两个文件,则会考虑XML文件(将忽略.properties文件)。

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

      

    2015年11月12日下午4:52:49 org.apache.catalina.core.StandardContext reload

         

    INFO:重新加载具有名称[/ YourApp]的上下文

         

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

         

    信息......

         

    2015年11月12日下午4:52:50 org.apache.catalina.core.StandardContext reload

         

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

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