【问题标题】:Change logger level for single class through system property通过系统属性更改单个类的记录器级别
【发布时间】:2012-11-15 00:43:32
【问题描述】:

有没有办法使用启动器中的系统属性来更改类的日志记录级别?我希望能够根据我正在处理的类轻松快速地更改类的调试级别。能够在发布时使用 -Dcom.example.package.myclass.logger.level=TRACE
之类的东西来做到这一点 或
-Dcom.slf4j.trace=com.example.package.myclass

会很有用的。

我正在使用 slf4j/logback,但我也对在 log4j 中实现它的方法感兴趣

我知道如何以编程方式更改关卡,但我不想更改代码,只需更改启动器

如果相关,我正在使用配置文件logback-test.xml

如果不可能,是否还有其他技巧可以做到这一点而无需更改代码或不必污染干净的 xml 文件?

【问题讨论】:

    标签: java log4j slf4j logback


    【解决方案1】:

    [更新]

    我重新阅读了您的问题,我认为我们可以更进一步。

    将以下内容添加到您的 logback.xml:

      <if condition='isDefined("com.slf4j.trace")'>
        <then>
          <logger name="${com.slf4j.trace}" level="TRACE"/>
        </then>
      </if>
    

    on the Logback Setup page 所述,将 Codehaus Janino 和 Apache commons-compiler jar 添加到您的类路径中。

    现在您使用

    启动您的应用
    -Dcom.slf4j.trace=com.example.package.MyClass
    

    【讨论】:

    • 这很好用,谢谢!一个问题是条件配置需要两个额外的依赖项
    • 是的。它总是一些东西:)
    【解决方案2】:

    来自 logback 文档的一些想法:

    Logback-classic 可以扫描其配置文件中的更改并 配置文件改变时自动重新配置。

    <configuration scan="true" scanPeriod="30 seconds" > 
      ...
    </configuration>
    

    另外,您可以将默认配置文件的位置指定为系统属性:

    java -Dlogback.configurationFile=/path/to/config.xml chapters.configuration.MyApp1
    

    所以它比你描述的更方便。

    【讨论】:

    • 重新配置扫描的目标不同:它是为了让您可以更改正在运行的应用程序的级别。这不是我想要的,我想在启动之前更改级别但不触及配置文件,因为如果我在测试时修改它,这些更改将使 eclipse 想要提交文件
    • 您仍然可以在源代码存储库中使用java -Dlogback.configurationFile=/path/to/config.xml chapters.configuration.MyApp1 并将此配置文件标记为ignored。这与您想要的相似。
    • 好的,我明白你的意思:创建一个我不提交的工作日志配置。这并不理想,但可能是我唯一的机会
    • 你也可以考虑自己实现。在一些静态初始化块中,您可以扫描此类属性并务实地设置日志记录级别。
    猜你喜欢
    • 2019-02-12
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多