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

Java 通过系统属性更改单个类的记录器级别,java,log4j,slf4j,logback,Java,Log4j,Slf4j,Logback,有没有办法使用启动器中的系统属性更改类的日志记录级别?我希望能够根据我使用的类轻松快速地更改类的调试级别。能够在启动时使用类似于-Dcom.example.package.myclass.logger.level=TRACE的东西来实现这一点 或 -Dcom.slf4j.trace=com.example.package.myclass 这将非常有用 我正在使用slf4j/logback,但我也对在log4j中实现它感兴趣 我知道如何通过编程更改级别,但我不想更改代码,只想更改启动器 如果相关的

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

这将非常有用

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

我知道如何通过编程更改级别,但我不想更改代码,只想更改启动器

如果相关的话,我使用的是一个配置文件
logbacktest.xml


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

来自logback文档的一些想法:

Logback classic可以扫描其配置文件和 配置文件更改时自动重新配置自身

因此,它比您描述的更方便。

[update]

我重读了你的问题,我想我们可以更进一步

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

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

重新配置扫描的目标是不同的:它是为了让您可以更改正在运行的应用程序的级别。这不是我想要的,我想在启动之前更改级别,但不接触配置文件,因为如果我在测试时修改它,这些更改将使eclipse希望提交文件,直到您可以在源代码存储库中使用
java-Dlogback.configurationFile=/path/to/config.xml chapters.configuration.MyApp1
并将此配置文件标记为
已忽略
。这与您想要的类似。好的,我明白您的观点:创建一个我不提交的工作日志配置。这并不理想,但这可能是我唯一的机会,你也可以考虑自己实现它。在一些静态init块中,您可以扫描这样的属性,并实用地设置日志记录级别。这非常有效,谢谢!一个问题是条件配置需要两个额外的dependenciesTrue。这总是一件事:)
java -Dlogback.configurationFile=/path/to/config.xml chapters.configuration.MyApp1
  <if condition='isDefined("com.slf4j.trace")'>
    <then>
      <logger name="${com.slf4j.trace}" level="TRACE"/>
    </then>
  </if>
-Dcom.slf4j.trace=com.example.package.MyClass