我使用 logback 作为 SL4j 接口(interface)的实现。这是配置
<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 框架用于其他目的 >
最佳答案
您可以尝试包含另一个文件(在您的网络应用程序之外)来覆盖 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 级别。您甚至可以删除该文件,因为 option="true"。
关于java - 在运行时更改日志级别而不重新启动服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40416876/