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

Spring Boot中log4j2.properties配置问题:无法记录INFO级日志

解决Log4j2无法记录INFO/DEBUG等日志到文件的问题

嗨,我来帮你一步步排查并解决这个日志配置问题!你的核心问题在于Log4j2的Logger配置存在覆盖、Root Logger未启用,以及和Spring Boot配置冲突这几个关键点,下面详细说:

核心问题拆解

  • 重复定义Logger导致配置失效:你在log4j2.properties里两次设置了logger.rolling.name,第二次的org.hibernate.SQL直接覆盖了第一次的业务包配置,导致你的业务代码(比如控制器)的日志完全没被关联到文件Appender。
  • Root Logger未正确配置:Root Logger是所有未被特定Logger匹配的日志的默认处理入口,你注释掉了相关配置,导致控制器的测试日志(不属于Hibernate包)没有被任何Appender处理。
  • Spring Boot配置与Log4j2冲突:你在application.properties里设置的logging.level.*=INFO会干扰Log4j2的原生配置,应该优先使用Log4j2自身的配置来控制日志级别。

修改后的完整配置方案

1. 简化application.properties

只保留指定Log4j2配置文件的条目,去掉冗余的日志配置:

logging.config=classpath:log4j2.properties

2. 修正log4j2.properties配置

我帮你重新梳理了Logger和Appender的关联,确保所有级别的日志都能正确写入文件和控制台:

# Log4j2自身的日志级别(设为error避免自身日志干扰业务日志)
status = error
name = PropertiesConfig

# 定义日志文件路径变量,方便统一修改
property.filename = logs/test.log

# --- 控制台Appender配置 ---
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# --- 滚动文件Appender配置 ---
appender.rolling.type = RollingFile
appender.rolling.name = RollingFile
appender.rolling.fileName = ${filename}
appender.rolling.filePattern = logs/test1-%d{MM-dd-yy-HH-mm-ss}-%i.log.gz
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d %-5p %-17c{2} (%30F:%L) %3x - %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 2
appender.rolling.policies.time.modulate = true
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size=10MB
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.max = 5

# --- 业务包Logger配置(替换为你的实际业务包路径)---
logger.business.name = com.thp.clinic.allergiesConditions
logger.business.level = info
logger.business.additivity = false
logger.business.appenderRef.rolling.ref = RollingFile
logger.business.appenderRef.console.ref = STDOUT

# --- Hibernate SQL日志配置 ---
logger.hibernate.name = org.hibernate.SQL
logger.hibernate.level = debug
logger.hibernate.additivity = false
logger.hibernate.appenderRef.rolling.ref = RollingFile
logger.hibernate.appenderRef.console.ref = STDOUT

# --- Root Logger配置(处理所有未被特定Logger匹配的日志)---
rootLogger.level = debug
rootLogger.appenderRefs = rolling, stdout
rootLogger.appenderRef.rolling.ref = RollingFile
rootLogger.appenderRef.stdout.ref = STDOUT

关键修改说明

  1. 拆分Logger定义:用logger.business和logger.hibernate分别配置业务包和Hibernate的日志,避免之前的覆盖问题。
  2. 启用Root Logger:设置rootLogger.level = debug,确保控制器的测试日志这类未被特定Logger匹配的日志,会被Root Logger捕获并写入文件和控制台。
  3. 关闭日志重复输出:每个Logger的additivity = false,避免同一条日志被当前Logger和Root Logger重复处理。
  4. 统一路径变量:用${filename}引用日志文件路径,后续修改更方便。

验证方法

  1. 删除旧的logs目录,重启Spring Boot应用。
  2. 调用测试API,检查logs/test.log:你会看到控制器的DEBUG/INFO/WARN/ERROR/FATAL日志,以及Hibernate的DEBUG日志都被正确记录。
  3. 控制台也会同步显示所有级别的日志,如果需要控制台只显示特定级别,可以给控制台Appender添加级别过滤器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:56:41