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

Spring Boot 1.5.9集成Log4j2:日志文件创建但无内容写入问题

Spring Boot 1.5.9 集成Log4j2日志文件无内容问题排查与解决

我来帮你搞定这个问题!你遇到的情况是日志文件能正常创建但没有内容,控制台日志却正常,核心问题大概率出在Logger的配置范围没覆盖到你的业务代码,咱们一步步拆解解决:

问题根源分析

先看你的log4j2.properties配置:

logger.appLogger.name = appLogger
logger.appLogger.level = debug
logger.appLogger.additivity = false
logger.appLogger.appenderRef.rolling.ref = appLoggerAppender
logger.appLogger.appenderRef.console.ref = consoleLoggerAppender

你定义的Logger名称是appLogger,但Spring Boot应用里的业务类(比如Controller、Service)默认会使用自身包名作为Logger的名称(比如com.yourcompany.controller.HomeController),这些Logger不会匹配到你定义的appLogger,所以日志只会走默认的Root Logger——而你没配置Root Logger的文件输出,自然只有控制台能看到日志。

解决方案

方案1:将Logger范围改为业务代码根包

把logger.appLogger.name改成你业务代码的根包路径,比如你的代码都在com.yourcompany.demo下,修改如下:

logger.appLogger.name = com.yourcompany.demo
logger.appLogger.level = debug
logger.appLogger.additivity = false
logger.appLogger.appenderRef.rolling.ref = appLoggerAppender
logger.appLogger.appenderRef.console.ref = consoleLoggerAppender

这样这个包下所有类的日志都会使用你配置的滚动文件和控制台输出。

方案2:配置Root Logger兜底

如果想让所有日志(包括框架日志)都输出到文件,直接配置Root Logger:
在log4j2.properties末尾添加:

# 配置Root Logger,覆盖所有未匹配到特定Logger的日志
rootLogger.level = info
rootLogger.appenderRef.console.ref = consoleLoggerAppender
rootLogger.appenderRef.rolling.ref = appLoggerAppender

这样不管是业务代码还是Spring框架的日志,都会同时输出到控制台和文件。

额外检查点

  • 目录权限:确认/logs/目录有读写权限(虽然文件能创建,但极端情况可能写入权限不足)
  • 日志级别匹配:你的Logger级别是debug,确保业务代码里的日志语句是logger.debug("xxx")及以上级别(比如info、error),如果用了logger.trace(),需要把级别改成trace才能输出
  • 配置文件加载:Spring Boot 1.5.x要求Log4j2配置文件放在src/main/resources下,或者在application.properties里指定路径:
    logging.config=classpath:log4j2.properties
    

你的原始配置参考

pom.xml配置

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</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>

原始log4j2.properties

status = trace
name= properties_configuration
# Give directory path where log files should get stored
property.basePath = /logs/
# ConsoleAppender will print logs on console
appender.console.type = Console
appender.console.name = consoleLoggerAppender
appender.console.target = SYSTEM_OUT
appender.console.layout.type = PatternLayout
# Specify the pattern of the logs
appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} %level [%t] [%c] [%M] [%l] - %msg%n
appender.appLogger.type = RollingFile
appender.appLogger.name = appLoggerAppender
appender.appLogger.fileName = ${basePath}/application_gui.log
appender.appLogger.filePattern = ${basePath}application_gui_%d{yyyyMMdd}.log.gz
appender.appLogger.layout.type = PatternLayout
appender.appLogger.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} %level [%t] [%c] [%M] [%l] - %msg%n
appender.appLogger.policies.type = Policies
appender.appLogger.policies.time.type = TimeBasedTriggeringPolicy
appender.appLogger.policies.time.interval = 2
appender.appLogger.policies.time.modulate = true
appender.appLogger.strategy.type = DefaultRolloverStrategy
# Classes in this package or sub packages will use ConsoleAppender and RollingFileAppender for logging
logger.appLogger.name = appLogger
logger.appLogger.level = debug
logger.appLogger.additivity = false
logger.appLogger.appenderRef.rolling.ref = appLoggerAppender
logger.appLogger.appenderRef.console.ref = consoleLoggerAppender

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:46:44