无论如何强制 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
和所有 logback jar。我知道有和在一起是错误的,但是我的项目很大,找到和排除maven依赖并不总是那么简单。在这种情况下 slf4j 甚至没有打印任何警告,因为我们只使用 logback 配置。我花了一天的时间来理解这个罐子地狱。slf4j-log4j12.jar
log4j-over-slf4j.jar
slf4j-log4j12.jar
log4j-over-slf4j.jar
例如,我想要通过 JVM 参数强制 slf4j 使用 logback,这样它就可以打印警告,并且我可以在将来排除 jars。