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
相关产品推荐
相关产品推荐

