通过系统属性更改单个类的记录器级别

时间:2012-11-15 00:43:33

标签: java log4j slf4j logback

有没有办法在启动器中使用系统属性更改类的日志记录级别?我希望能够根据我正在处理的类来轻松快速地更改类的调试级别。能够在发布时使用类似-Dcom.example.package.myclass.logger.level=TRACE的方式执行此操作 或
-Dcom.slf4j.trace=com.example.package.myclass

会非常有用。

我正在使用slf4j / logback,但我也对在log4j中执行此操作的方式感兴趣

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

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

如果不可能,是否有其他技巧可以在不更改代码或不得不污染干净的xml文件的情况下执行此操作?

2 个答案:

答案 0 :(得分:3)

[更新]

我重新阅读了你的问题,我认为我们可以更接近。

将以下内容添加到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

答案 1 :(得分:0)

logback docs中的一些想法:

  

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

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

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

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

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