我使用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;
答案 0 :(得分:1)
有两种外部化记录器级别的方法
一个处于系统级属性,即java -Dlogback.configurationFile=/pathToconfig.xml
。请参阅How to externalize the log level
<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也应该有所帮助。