在没有服务器重启的情况下更改日志级别

时间:2016-11-04 06:50:21

标签: java logging logback slf4j

我使用logback作为SL4j接口的实现。这是配置

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logs/prod.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">          
        <FileNamePattern>logs/prod.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>700MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
</appender>


    <logger name="com.ecom" additivity="false" level="ERROR">
        <appender-ref ref="FILE" />
    </logger>

我希望在不重新启动服务器的情况下,通过生产中的配置或外部属性更改将级别更改为Info或在运行时调试。有可能吗?

仅供参考,我使用Weblogic作为应用程序服务器,并将Spring框架用于其他目的&gt;

3 个答案:

答案 0 :(得分:1)

有两种外部化记录器级别的方法

  1. 一个处于系统级属性,即java -Dlogback.configurationFile=/pathToconfig.xml。请参阅How to externalize the log level

  2. <root level="${log.level:-Error}">。然后设置系统级属性-Dlog.level=DEBUG

答案 1 :(得分:1)

您可以尝试在webback之外包括另一个文件,该文件将覆盖logback.xml中的配置。

<configuration scan="true" scanPeriod="30 seconds">
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logs/prod.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">          
      <FileNamePattern>logs/prod.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
         <maxFileSize>700MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
  </appender>

  <logger name="com.ecom" additivity="false" level="ERROR">
    <appender-ref ref="FILE" />
  </logger>

  <include optional="true" file="/tmp/logbackDynamic.xml"/>

</configuration>

然后,如果您想要com.ecom.SomeClass的DEBUG日志记录,则/tmp/logbackDynamic.xml可能看起来像这样

<included>
  <logger name="com.ecom.SomeClass" level="DEBUG">
    <appender-ref ref="FILE" />
  </logger>
</included>

现在,如果您在/tmp/logbackDynamic.xml中更改了配置,则Logback将每30秒检查一次,然后重新加载它。如果要返回原始日志级别,只需删除标记之间的行,Logback将忽略DEBUG级别。您甚至可以删除文件,因为optional =“ true”。

答案 2 :(得分:0)

Variable substitution是你的朋友。 Default values for variables也应该有所帮助。

另见variable scoping