在不重启服务器的情况下在运行时更改日志级别?
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 框架用于其他目的 >
有两种方法可以外部化记录器级别
一个在系统级别 属性,即 java -Dlogback.configurationFile=/pathToconfig.xml
。参见 How to externalize the log level
<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".
我正在使用 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 框架用于其他目的 >
有两种方法可以外部化记录器级别
一个在系统级别 属性,即
java -Dlogback.configurationFile=/pathToconfig.xml
。参见 How to externalize the log level<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".