所以我正在为我的java应用程序使用logback,现在客户端希望能够从GUI更改日志级别(并尽快传播)我知道有两种方法可以完成:
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文件。
答案 0 :(得分: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>
请注意,变量的范围应该是本地的,这将在配置重新扫描时刷新其值。
答案 1 :(得分:1)
单独属性文件中的更改不会反映更改。我找到了解决方案
您需要包含单独的xml文件,其中包含名为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>
并重新启动服务器一次,然后对属性值的动态更改将反映出来。
答案 2 :(得分:0)
更改单独的属性文件不会重新加载logback配置。您还需要更改logback.xml
文件修改日期以强制重新加载。这将在单独的属性文件中重新加载属性。
答案 3 :(得分:0)
您可以将日志级别作为环境变量传递 export LOG_LEVEL = INFO
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property scope="OS environment" />
...
<root level="${LOG_LEVEL}">
<appender-ref ref="json"/>
</root>
在logback.xml中