log4j无法屏蔽HikariConfig等组件DEBUG冗余日志该如何解决
解决方案
配置不生效的核心原因大概率是日志框架实现冲突、配置覆盖范围不够、配置文件类型与使用的日志版本不匹配,可按以下步骤逐一调整:
步骤1:排查依赖冲突,统一日志框架
先检查项目依赖,确保没有多套日志实现同时存在:
- 移除未用到的日志实现包,比如
logback-classic、slf4j-simple这类包如果存在直接排除,避免和你用的log4j实现抢占优先级 - HikariCP默认使用slf4j日志门面,确保你项目里的桥接包和实际用的log4j版本对应:
- 用log4j 1.x的话必须加
slf4j-log4j12桥接包 - 用log4j 2.x的话必须加
log4j-slf4j-impl桥接包
- 用log4j 1.x的话必须加
步骤2:修正配置,避免多配置冲突
你目前同时提供了log4j2的xml格式配置和log4j 1.x的properties格式配置,两个配置只会有一个生效甚至全部失效,按你实际使用的日志版本保留唯一的配置文件即可:
如果你使用log4j 1.x
删除xml格式配置,调整properties配置如下,注意配置要覆盖第三方库的整个包,不要只配置单个类,同时log4j 1.x没有SEVERE级别,对应改成ERROR:
# Root logger改为INFO输出正常业务日志,不需要可保留OFF log4j.rootLogger=INFO, stdout, file log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.logger.nz.ac.massey.cs.sdc.log4jassignment.s06005586.MemoryAppender = ERROR, MEMORY_APPENDER log4j.additivity.nz.ac.massey.cs.sdc.log4jassignment.s06005586.MemoryAppender = false # 日志文件配置 log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=logs\\logging.log log4j.appender.file.MaxFileSize=10MB log4j.appender.file.MaxBackupIndex=10 log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n # 控制台输出配置 log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n # 第三方库日志级别配置,全包覆盖 log4j.logger.org.hibernate=OFF # 替换SEVERE为ERROR log4j.logger.org.openqa.selenium = ERROR # 覆盖Hikari全包,不要只配HikariConfig类 log4j.logger.com.zaxxer.hikari = OFF # 屏蔽Apache HTTP DEBUG日志 log4j.logger.org.apache.http = ERROR
如果你使用log4j 2.x
删除log4j 1.x格式的properties配置,调整xml配置,同样覆盖全包:
<!-- 先设置root日志级别为INFO --> <Root level="INFO"> <AppenderRef ref="Console"/> <AppenderRef ref="File"/> </Root> <Logger name="org.openqa.selenium" level="ERROR" additivity="false"> <AppenderRef ref="Console"/> <AppenderRef ref="File"/> </Logger> <Logger name="org.apache.http" level="ERROR" additivity="false"> <AppenderRef ref="Console"/> <AppenderRef ref="File"/> </Logger> <!-- 覆盖Hikari全包 --> <Logger name="com.zaxxer.hikari" level="info" additivity="false"> <AppenderRef ref="Console"/> <AppenderRef ref="File"/> </Logger> <logger name="org.hibernate" level="info" additivity="false"> <AppenderRef ref="Console"/> <AppenderRef ref="File"/> </logger>
步骤3:快速强制生效方案
如果不想调整依赖和配置,可直接在项目启动代码的最开头加入强制设置日志级别的代码,优先级高于配置文件:
// log4j 1.x版本用这段 org.apache.log4j.Logger.getLogger("com.zaxxer.hikari").setLevel(org.apache.log4j.Level.OFF); org.apache.log4j.Logger.getLogger("org.apache.http").setLevel(org.apache.log4j.Level.ERROR); org.apache.log4j.Logger.getLogger("org.openqa.selenium").setLevel(org.apache.log4j.Level.ERROR); // log4j 2.x版本用这段 org.apache.logging.log4j.core.config.Configurator.setLevel("com.zaxxer.hikari", org.apache.logging.log4j.Level.OFF); org.apache.logging.log4j.core.config.Configurator.setLevel("org.apache.http", org.apache.logging.log4j.Level.ERROR); org.apache.logging.log4j.core.config.Configurator.setLevel("org.openqa.selenium", org.apache.logging.log4j.Level.ERROR);
内容的提问来源于stack exchange,提问作者user8210794
相关产品推荐
相关产品推荐

