springboot+mybatis+druid+logback启动时出现一个error:load filter error, filter not found : logback,但不影响程序启动。
经过查看druid源码,发现是druid过滤器配置错误造成的,druid支持的过滤器类型在duid-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.log4j2=com.alibaba.druid.filter.logging.Log4j2Filter
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
我的配置文件内filter没有配置slf4j,而是配置了logback,没有这个过滤器造成的,将它改为slf4j,问题解决啦。
配置如下:
或者使用config的配置:
@Bean
@ConditionalOnProperty(name = "spring.datasource.druid.type", havingValue = "com.alibaba.druid.pool.DruidDataSource",
matchIfMissing = true)
@Primary //在同样的DataSource中,首先使用被标注的DataSource
public DataSource dataSource(){
log.info("------------注册DruidDatasource-----------");
DruidDataSource datasource = (DruidDataSource) druidSingleDatasourceProperties.initializeDataSourceBuilder().build();
// datasource.setUseGlobalDataSourceStat(useGlobalDataSourceStat);
log.info("------------注册Druid过滤器-----------");
datasource.setProxyFilters(Arrays.asList(statFilter(),logFilter(), wallFilter()));
log.info("------------注册Druid过滤器结束-----------");
log.info("------------注册DruidDatasource结束-----------");
return datasource;
}
@Bean
public Slf4jLogFilter logFilter(){
Slf4jLogFilter filter = new Slf4jLogFilter();
// filter.setResultSetLogEnabled(false);
// filter.setConnectionLogEnabled(false);
// filter.setStatementParameterClearLogEnable(false);
// filter.setStatementCreateAfterLogEnabled(false);
// filter.setStatementCloseAfterLogEnabled(false);
// filter.setStatementParameterSetLogEnabled(false);
// filter.setStatementPrepareAfterLogEnabled(false);
return filter;
}
@Bean
public WallFilter wallFilter() {
WallFilter wallFilter = new WallFilter();
wallFilter.setConfig(wallConfig());
return wallFilter;
}
@Bean
public WallConfig wallConfig() {
WallConfig config = new WallConfig();
config.setMultiStatementAllow(true);//允许一次执行多条语句
// config.setNoneBaseStatementAllow(true);//允许非基本语句的其他语句
return config;
}