我使用slf4j 1.7.2和logback 1.0.7。我希望能够为我的Java应用程序提供命令行参数,该参数设置记录到stdout的消息级别。例如,-logLevel trace
应该导致记录所有消息,但-logLevel warning
仅出现警告和错误。日志应来自应用程序中的所有记录器(=根记录器)。
目前我ConsoleAppender
System.out
TresholdFilter
,info
通过warning
确保只有error
diagnostics.txt
和{{1}}消息打印到stdout。根记录器引用它。我不知道如何以编程方式更改此appender的过滤级别,我需要将记录的级别基于命令行参数。
虽然应该影响记录到stdout的级别,但我仍然希望根记录器记录所有级别,因为它们被发送到其他appender,例如{{1}}文件应该始终具有所有级别。
干杯!
康拉德
答案 0 :(得分:2)
Logback的配置文件允许使用变量。您可以定义System属性(JVM的-D参数),并在配置文件中使用该值。语法是:
${VARIABLE_NAME}
你应该能够定义一个变量,比如-DSYSOUT_LOG_LEVEL = ERROR 然后,在logback.xml文件中,您可以使用$ {SYSOUT_LOG_LEVEL},而不是为过滤器设置特定级别,例如
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>${SYSOUT_LOG_LEVEL}</level>
</filter>