java - 如何根据cmd行参数将不同级别的日志输出到stdout?

标签 java logging slf4j logback

我使用 slf4j 1.7.2 和 logback 1.0.7。我希望能够向我的 Java 应用程序提供一个命令行参数,用于设置记录到 stdout 的消息级别。例如,-logLevel trace 应记录所有消息,但 -logLevel warning 仅记录警告和错误。日志应来自应用程序中的所有记录器(= 根记录器)。

目前,我有一个用于 System.outConsoleAppender,它通过 TresholdFilter 确保只有 info > warningerror 消息打印到标准输出。根记录器引用它。我不知道如何以编程方式更改此附加程序的过滤级别,我需要将记录的级别基于命令行参数。

虽然记录到标准输出的级别应该受到影响,但我仍然希望根记录器记录所有级别,因为它们被发送到其他附加程序,例如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/

相关文章:

java - Spring Security 有时表现得很奇怪

java - 如何获取 Logger 的子级 (java.util.logger)

asp.net-mvc-3 - 将 Microsoft.VisualBasic.Logging.FileLogTraceListener 与 ASP.NET MVC 3 结合使用

java - Spring 启动应用程序。 Logger 不记录 DEBUG 消息

java - 使用 Java 从 Oracle 数据库读取特殊字符 ( æ ø å )

java - 拒绝用户 'root' 访问 @'localhost' - Spring Boot 和 MySQL 连接

java - 使用 GSON 反序列化通用类型

java - Log4j2 AsyncAppender性能测试

slf4j - Logback 的 Syslog Appender

java - 如果日志格式有多个空格,则 logger.info 的输出带有问号 (?)