2013-10-29 49 views
2

因此,我为我的java应用程序使用logback,现在客户端希望能够从GUI更改日志级别(并尽快传播),我知道存在两种方法可以做到这一点:更改logback级别并保存到logback.xml

Logger root = (Logger)LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); 
root.setLevel(Level.INFO); 
or 
<configuration scan="true" scanPeriod="30 seconds"> 

的事情是我想更新在logback.xml文件中的水平,以便它会自动扫描,但也是在将来的会话可以读取改变的级别从XML。我很想解析整个文件,寻找这片:

<root> 
     <level value="debug"/> 

和手动更改,但必须有将其写入到conf文件更好的办法。

回答

1

我建议存储日志级配置在单独的属性文件等

root_log_level=INFO 

这个文件可以被包括并且在logback.xml用于从它可变

<configuration scan="true"> 

    <property scope="local" file="logback_root_level.properties" /> 


    <root level="${root_log_level}"> 
    ... 
    </root> 
</configuration> 

注意,变量的范围应该是本地的,这将刷新其配置重新扫描的价值。

+0

mmm这不是一个糟糕的解决方案,我最终解析了xml并更改了所需的值,因为有两个地方可以设置根级别 –

+0

您可以在两个地方使用变量 –

0

更改单独的属性文件不会使logback配置重新加载。您还需要更改logback.xml文件修改日期以强制重新加载。这将重新加载属性在单独的属性文件中。

1

单独属性文件中的更改不反映更改。我已经找到了解决办法

您需要包括含有类似命名LOGBackIncludedFile.xml

<property name="LOG_LEVEL" value="OFF"/> 

和logback.xml包含这个文件

<configuration scan="true" scanPeriod="10 seconds"> 

    <include file="D:/LOGBackIncludedFile.xml" /> 

    <root> 
     <level value="${LOG_LEVEL}" /> 
     <appender-ref ref="app" />  
    </root>  
</configuration> 

特性单独的XML文件,一旦重新启动服务器然后向后反映财产价值的动态变化。