有没有办法强制slf4j使用指定的日志提供程序(在我的情况下是logback)?就像他们文档中所说:
当类路径上存在多个绑定时,
SLF4J API旨在一次只绑定一个底层日志框架。如果类路径上存在多个绑定,则SLF4J将发出警告,列出这些绑定的位置。
当类路径上有多个绑定可用时,请选择一个并仅选择要使用的一个绑定,并删除其他绑定。例如,如果您在类路径上同时拥有slf4j-simple-1.6.6.jar和slf4j-nop-1.6.6.jar,并且您希望使用nop(>no-operation)绑定,则从类路径中删除slf4j-simple-1.6.6.jar。如果无法删除多余的绑定,则SLF4J仍将绑定到一个日志框架/实现。从版本1.6.6开始,SLF4J将命名它实际绑定的框架/实现类。
注意,SLF4J发出的警告仅仅是一个警告。
在我的情况下,我在类路径中有log4j.jar,slf4j-log4j12.jar,log4j-over-slf4j.jar和所有logback jar文件。我知道同时拥有slf4j-log4j12.jar和log4j-over-slf4j.jar是错误的,但我的项目非常大,不总是容易找到和排除maven依赖。在这种情况下,slf4j甚至没有打印任何警告,因为我们只使用logback配置。我花了一天时间才理解这个jar混乱。
我想要的就是通过JVM参数强制slf4j使用logback,以便它可以打印警告,并且我可以在将来排除jar文件。