从log4j迁移至log4j2后服务日志无法正常显示问题求助
排查与解决步骤
依赖冲突检查
- 完全移除项目中所有log4j 1.x版本的依赖,避免新旧日志框架类冲突
- 必须引入对应日志桥接包:
- 适配原有log4j 1.x调用:
log4j-1.2-api - 适配slf4j接口调用:
log4j-slf4j-impl - 适配hibernate使用的jboss日志:
jboss-logging-log4j2
- 适配原有log4j 1.x调用:
- 禁止同时引入其他日志实现依赖,包括
logback、slf4j-log4j12、log4j-to-slf4j等,否则会出现日志绑定优先级异常,仅输出部分框架日志
配置有效性校验
- 先将
<Configuration>的status属性修改为DEBUG,启动项目时会打印log4j2自身初始化日志,可直接定位配置加载失败、变量解析异常、Appender初始化错误等问题 - 确认配置中使用的变量
${log4j.level}、${log4j.root.level}、${soliam.fo.logdir}已正确注入,可先临时替换为固定值测试:比如将Root level设为INFO,日志路径改为本地绝对路径,排除变量解析失败导致日志级别过高、路径不存在的问题 - 你当前配置的
RollingFileAppender添加了ThresholdFilter级别为WARN,仅会输出WARN及以上级别的日志到文件,若需要输出INFO级别的业务日志,需将该过滤器级别调整为INFO或直接删除 - 临时跳过自定义Rewrite逻辑测试:将Root Logger的
AppenderRef改为直接指向CONSOLE,排除你自定义的LogInterceptor拦截过滤了非hibernate日志的可能 - 未配置
AppenderRef的Logger(比如org.springframework.flex.servlet.MessageBrokerHandlerAdapter)如果需要输出日志,需补充AppenderRef配置,或将additivity属性设为true继承Root的输出配置
配置加载校验
- 排查类路径下是否存在其他log4j2配置文件(比如依赖jar包中自带的log4j2.xml、log4j2-test.xml),优先级更高的配置文件会覆盖你自定义的配置,导致配置不生效
内容的提问来源于stack exchange,提问作者Sahli yasser
相关产品推荐
相关产品推荐

