java - 在运行时更改日志级别而不重新启动服务器?

标签 java logging logback slf4j

我使用 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/

相关文章:

java - 在Java中有效连接2个节点列表

java - 如何创建一个单独的类来处理 android 常见任务,例如创建进度对话框?

C# 最佳实践错误处理和传递错误消息

java - logback:AsyncAppender 比同步 FileAppender 花费更多时间

Java logback FileAppender 文件模式

java - 将 JsonLayout 添加到 log4j2 json 配置

java - Java 嵌套子类实例化声明

java - 如何用Java处理声音?

java - 是否有用于在 Java 中设置默认日志级别的命令行选项

python - Google Stackdriver 记录 : write_log_entries, 数组里面有什么?