Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在运行时更改日志级别而不重新启动服务器?_Java_Logging_Logback_Slf4j - Fatal编程技术网

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

Java 在运行时更改日志级别而不重新启动服务器?,java,logging,logback,slf4j,Java,Logging,Logback,Slf4j,我使用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">

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

日志/prod.log
日志/产品%d{yyyy-MM-dd}.%i.log
700MB
我希望在不重新启动服务器的情况下,通过在生产中更改配置或外部属性,将级别更改为Info或debug。可能吗


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

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

  • 一个位于系统级属性,即
    java-Dlogback.configurationFile=/pathToconfig.xml
    。看

  • 。然后设置系统级属性
    -Dlog.level=DEBUG

  • 他是你的朋友。也应该有帮助


    另见

    您可以尝试包含另一个文件(在您的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>
    
    
    日志/prod.log
    日志/产品%d{yyyy-MM-dd}.%i.log
    700MB
    
    如果您想要调试com.ecom.SomeClass的日志,那么您的/tmp/logbackDynamic.xml可能如下所示

    <included>
      <logger name="com.ecom.SomeClass" level="DEBUG">
        <appender-ref ref="FILE" />
      </logger>
    </included>
    
    
    

    现在,如果您在/tmp/logbackDynamic.xml中更改了配置,Logback将每30秒检查一次,然后重新加载它。如果要返回原始日志级别,只需删除标记之间的行,Logback将忽略调试级别。您甚至可以删除该文件,因为optional=“true”。

    但这是一种编程方法,我正在寻找配置/属性文件更改。在您提到的示例中,变量替换用于指定创建日志文件的位置。如何使用它在运行时更改日志级别?你的意思是我应该创建像
    这样的外部属性文件,它将包含像LOG\u LEVEL=DEBUG
    这样的属性,然后使用它
    `变量替换也适用于“level”属性。我还修改了上面的答案。