我使用 slf4j 1.7.2 和 logback 1.0.7。我希望能够向我的 Java 应用程序提供一个命令行参数,用于设置记录到 stdout 的消息级别。例如,-logLevel trace
应记录所有消息,但 -logLevel warning
仅记录警告和错误。日志应来自应用程序中的所有记录器(= 根记录器)。
目前,我有一个用于 System.out
的 ConsoleAppender
,它通过 TresholdFilter
确保只有 info
> warning
和 error
消息打印到标准输出。根记录器引用它。我不知道如何以编程方式更改此附加程序的过滤级别,我需要将记录的级别基于命令行参数。
虽然记录到标准输出的级别应该受到影响,但我仍然希望根记录器记录所有级别,因为它们被发送到其他附加程序,例如diagnostics.txt
文件应始终包含所有级别。
干杯!
康拉德
最佳答案
Logback的配置文件允许使用变量。您可以定义系统属性(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>
关于java - 如何根据cmd行参数将不同级别的日志输出到stdout?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15008078/