No appenders could be found for logger (com.alibaba.druid.filter.FilterManager).

SpringBoot项目整合Druid,要将日志框架从log4j换成logback,启动项目报错。可能是配置文件问题或使用多个日志记录框架。可去GitHub上找Druid配置,支持多种Filter。若启动失败,需解决slf4j绑定错误,报错可去掉log4j依赖。

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

背景:SpringBoot项目整合Druid,日志框架准备从log4j换到logback,项目启动过程中出现如下报错:

`log4j:WARN No appenders could be found for logger (com.alibaba.druid.pool.DruidDataSource).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.`

尽管说表面上没有影响项目运行,但是只要启动项目就会看到这红红的报错(其他原因后面再说)。

说是未发现logger,因为项目中配置了DruidFilterFilter需要配置logger,之前的log4j配置文件被我删掉了,我新建的日志配置文件:logback-spring.xml

可能发生这种情况的另一个原因是您在目标文件中使用多个日志记录框架。例如,如果在目标文件内容选项卡中使用slf4j,log4j和ch.qos.logback.slf4j的组合,则会发生这种情况。

之前Druid的配置是:

dataSourceA.filters=stat,wall,log4j

项目中配置了多数据源,以A,B,C区分,其他信息分别是:监控统计用的filter:stat日志用的filter:log4j防御sql注入的filter:wall

现在我把需要把日志框架换成logback,应该怎么配置呢log4j换成logback还是别的?去github上的Druid找一找,果然找到结果,Druid支持配置多种Filter,配置信息保存在druid-xxx.jar!/META-INF/druid-filter.properties下面,具体如下:

druid.filters.default=com.alibaba.druid.filter.stat.StatFilter
druid.filters.stat=com.alibaba.druid.filter.stat.StatFilter
druid.filters.mergeStat=com.alibaba.druid.filter.stat.MergeStatFilter
druid.filters.counter=com.alibaba.druid.filter.stat.StatFilter
druid.filters.encoding=com.alibaba.druid.filter.encoding.EncodingConvertFilter
druid.filters.log4j=com.alibaba.druid.filter.logging.Log4jFilter
druid.filters.slf4j=com.alibaba.druid.filter.logging.Slf4jLogFilter
druid.filters.commonlogging=com.alibaba.druid.filter.logging.CommonsLogFilter
druid.filters.commonLogging=com.alibaba.druid.filter.logging.CommonsLogFilter
druid.filters.wall=com.alibaba.druid.wall.WallFilter
druid.filters.config=com.alibaba.druid.filter.config.ConfigFilter

众所周知,logbackslf4j的实现类,按照规定格式,改成下面就可以了:

dataSourceA.filters=stat,wall,slf4j

然后启动,完成!

如果还是启动失败,看看自己是不是还包另外一个错,是不是还报了SLF4J: Class path contains multiple SLF4J bindings.这个错,说你存在多个SLF4J绑定,如果有的话请先把这个错误搞定,具体可以参考:slf4j绑定错误
注意: 如果还是报错请去掉log4j的依赖

补充:Druid的Filter属性类型是字符串,通过别名的方式配置扩展插件,上面都可以配置,格式可以写成这种:

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
  	... ...
  	<property name="filters" value="stat,log4j" />
  </bean>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值