Spring中SLF4J多个绑定冲突问题

在Maven管理的Spring工程中,由于核心库(core-data)引入了logback,导致原本的log4j配置失效,出现SLF4J绑定冲突。解决方案包括:1)暴力删除多余lib;2)在pom.xml中通过exclusion排除冲突的SLF4J包;3)让库的开发者处理。良好的编程规范对此问题至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

Maven管理的纯Spring工程中,原本是使用log4j打log的,结果依赖的库(core-data项目)中又另外引用了logback文件(logback与原来的log4j只能二选一),导致配置失效

以下是多个lib冲突

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/app/top-media-frag/lib/logback-classic-1.0.13.
     jar!/org/slf4j/impl/StaticLoggerBinder.class]   
SLF4J: Found binding in [jar:file:/opt/app/top-media-frag/lib/slf4j-log4j12-1.7.5.jar
     !/org/slf4j/impl/StaticLoggerBinder.class]

解决方法

方法一(暴力法)

将项目部署后删除多余的lib文件
方便点使用存成shell文件,部署脚本自动调用

rm -f -v logback*

方法二(和 谐法)

在pom.xml文件中exclusion排除冲突的包,避免core-data对主项目的影响
如下排除了关于SLF4J的包,具体在pom.xml文件中查看再排除
(Dependency Hierarchy中查看)

<dependency>
            <groupId>com.nickwongfree.mp</groupId>
            <artifactId>core-data</artifactId>
            <version>1.1</version>
            <!--排除三个冲突-->
            <exclusions>
                <exclusion>
                    <groupId>ch.qos.logback</groupId>
                    <artifactId>logback-classic</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>ch.qos.logback</groupId>
                    <artifactId>logback-core</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

方法三(推锅法)

问题的根源是依赖的库(core-data项目)本身不规范,不应该包含具体的SLF4J的库,让原开发人员处理即可

另:Spring-MVC有更简洁方式

题外话

编程规范呀,特别是当项目规模大起来之后,
不遵守的规范严重影响了效率

参考

[1] slf4j日志的使用
[2] stackoverflow上回答
[3] 为什么要使用SLF4J而不是Log4J

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值