You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Logback切换至Log4j后部分日志信息缺失的问题咨询

日志框架切换问题:Logback转Log4j后日志缺失及事务日志不生效

操作背景

为满足业务需求,将日志框架从Logback切换为Log4j,已完成以下配置:

1. 修改pom.xml排除Logback并引入Log4j依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j</artifactId>
</dependency>   

2. 添加log4j.properties配置文件

log4j.rootLogger=INFO,Console

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p - %m%n

出现的问题

1. 核心启动日志缺失

切换后,日志丢失了应用启动、Spring容器初始化等关键信息:

  • Logback时期的完整日志:
2022-11-15 18:43:05.819  INFO 13700 --- [           main] en.main.com.Application                   : Starting Application using Java 11.0.14 on '' with PID 13700
2022-11-15 18:43:06.710  INFO 13700 --- [           main] o.s.cloud.context.scope.GenericScope      : BeanFactory id=eb6a152f-721c-3012-b9ce-880d2bbbe06c
2022-11-15 18:43:06.967  INFO 13700 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer   : Tomcat initialized with port(s): 8081 (http)
2022-11-15 18:43:06.974  INFO 13700 --- [           main] o.apache.catalina.core.StandardService    : Starting service [Tomcat]
2022-11-15 18:43:06.974  INFO 13700 --- [           main] org.apache.catalina.core.StandardEngine   : Starting Servlet engine: [Apache Tomcat/9.0.53]
2022-11-15 18:43:07.158  INFO 13700 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/main]    : Initializing Spring embedded WebApplicationContext
2022-11-15 18:43:07.159  INFO 13700 --- [           main] w.s.c.ServletWebServerApplicationContext  : Root WebApplicationContext: initialization completed in 1298 ms
2022-11-15 18:43:07.898  INFO 13700 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer   : Tomcat started on port(s): 8081 (http) with context path '/main'
2022-11-15 18:43:07.985  INFO 13700 --- [           main] en.main.com.Application                   : Started Application in 2.648 seconds (JVM running for 3.726)
  • 切换为Log4j后的日志:
2022-11-15 18:38:00,817 INFO  - Initializing ProtocolHandler ["http-nio-8081"]
2022-11-15 18:38:00,818 INFO  - Starting service [Tomcat]
2022-11-15 18:38:00,818 INFO  - Starting Servlet engine: [Apache Tomcat/9.0.53]
2022-11-15 18:38:01,057 INFO  - Initializing Spring embedded WebApplicationContext
2022-11-15 18:38:02,890 INFO  - Starting ProtocolHandler ["http-nio-8081"]
2022-11-15 18:38:03,001 INFO  - HikariPool-1 - Starting...
2022-11-15 18:38:03,318 INFO  - HikariPool-1 - Start completed.
2022-11-15 18:38:03,340 INFO  - HikariPool-2 - Starting...
2022-11-15 18:38:03,397 INFO  - HikariPool-2 - Start completed.

2. 事务日志配置未生效

尝试添加以下配置开启事务相关DEBUG日志,但无任何输出:

log4j.logger.org.springframework.jdbc.datasource.DataSourceTransactionManager=DEBUG

原因分析

  1. 依赖版本不兼容:spring-boot-starter-log4j是针对Log4j 1.x的依赖,而Spring Boot 2.x及以上版本对Log4j 1.x的适配性极差,Log4j 1.x已停止维护,无法正确捕获Spring核心组件的日志输出。
  2. 日志配置缺失:当前log4j.properties仅配置了根日志级别,未单独为Spring框架、应用主类等组件指定日志级别,导致这些组件的日志被过滤。
  3. 事务日志不生效:一方面是Log4j 1.x的适配问题导致日志框架未正确加载配置;另一方面,若事务未实际触发也不会输出日志,但核心原因还是依赖和配置的问题。

解决办法

1. 替换为Log4j2依赖(推荐方案)

Spring Boot官方推荐使用Log4j2作为日志框架,替换pom.xml中的依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

2. 调整日志配置

若坚持使用Log4j 1.x

修改log4j.properties,添加Spring组件和应用类的日志级别配置:

log4j.rootLogger=INFO,Console

# 开启Spring核心组件的INFO级别日志
log4j.logger.org.springframework=INFO
# 替换为你的应用主类所在包
log4j.logger.en.main.com=INFO

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
# 补充PID、线程、类名信息,和Logback格式对齐
log4j.appender.console.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %X{PID} --- [%t] %c{1} : %m%n

# 开启事务管理器的DEBUG日志
log4j.logger.org.springframework.jdbc.datasource.DataSourceTransactionManager=DEBUG

若改用Log4j2(推荐)

创建log4j2.properties配置文件:

status = warn
name = PropertiesConfig

appenders = console

appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
# 日志格式和Logback保持一致
appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %pid --- [%t] %c{1} : %m%n

# 配置Spring框架日志
logger.spring.name = org.springframework
logger.spring.level = INFO
logger.spring.additivity = false
logger.spring.appenderRefs = STDOUT
logger.spring.appenderRef.stdout.ref = STDOUT

# 配置应用主类日志
logger.app.name = en.main.com
logger.app.level = INFO
logger.app.additivity = false
logger.app.appenderRefs = STDOUT
logger.app.appenderRef.stdout.ref = STDOUT

# 配置事务管理器DEBUG日志
logger.tx.name = org.springframework.jdbc.datasource.DataSourceTransactionManager
logger.tx.level = DEBUG
logger.tx.additivity = false
logger.tx.appenderRefs = STDOUT
logger.tx.appenderRef.stdout.ref = STDOUT

rootLogger.level = INFO
rootLogger.appenderRefs = STDOUT
rootLogger.appenderRef.stdout.ref = STDOUT

3. 验证效果

  • 重启应用,检查是否输出完整的Spring启动、容器初始化日志
  • 触发一次事务操作(比如数据库增删改),查看是否有DEBUG级别的事务日志输出

内容的提问来源于stack exchange,提问作者Ivan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 17:55:30