在不重启服务器的情况下在运行时更改日志级别?

Change Log level at runtime without server restart?

我正在使用 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>

我想在运行时通过配置或外部属性更改将级别更改为信息或调试,而无需重新启动服务器。可能吗?

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

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

  1. 一个在系统级别 属性,即 java -Dlogback.configurationFile=/pathToconfig.xml。参见 How to externalize the log level

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

Variable substitution is your friend here. Default values for variables 应该也有帮助。

另见 variable scoping

您可以尝试包含另一个文件(在您的 webapp 之外)来覆盖 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 秒检查一次,并重新加载它。如果你想 return 原始日志级别,只需删除标记之间的行,Logback 将忽略 DEBUG 级别。您甚至可以删除该文件,因为 optional="true".