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