【问题标题】:How to output logs of different levels to stdout based on a cmd line parameter?如何根据命令行参数将不同级别的日志输出到stdout?
【发布时间】:2013-02-07 02:53:26
【问题描述】:

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

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

虽然记录到标准输出的级别应该受到影响,但我仍然希望根记录器记录所有级别,因为它们被发送到其他附加程序,例如diagnostics.txt 文件应该一直都有所有级别。

干杯!
康拉德

【问题讨论】:

    标签: java logging slf4j logback


    【解决方案1】:

    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>
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多