log4j2配置后仅控制台输出正常、日志文件为空如何解决?
问题原因
- 自定义日志器的包路径不匹配:你配置的
logger.file.name = guru.springframework.blog.log4j2properties是示例教程里的测试包名,只有该包下的类输出的日志才会被转发到文件输出源LOGFILE,如果你的业务代码不在这个包路径下,对应日志不会进入文件写入流程。 - 根日志器未绑定文件输出源:全局生效的
rootLogger仅配置了控制台输出源STDOUT,没有关联文件输出源,所有日志默认只会输出到控制台。
解决方法
方案一:所有日志同时输出到控制台和文件
修改根日志器配置,增加文件输出源的绑定即可:
# 原rootLogger配置替换为以下内容 rootLogger.level = debug rootLogger.appenderRefs = stdout, file rootLogger.appenderRef.stdout.ref = STDOUT rootLogger.appenderRef.file.ref = LOGFILE
不需要单独为特定包做日志规则的情况下,可以直接删除以下冗余的自定义日志器配置:
loggers=file logger.file.name=guru.springframework.blog.log4j2properties logger.file.level = debug logger.file.appenderRefs = file logger.file.appenderRef.file.ref = LOGFILE
方案二:仅指定包的日志输出到文件
如果你只需要特定业务包的日志写入文件,将自定义日志器的包名替换为你的业务代码所在包即可,示例:
# 替换为你自己的业务包路径 logger.file.name=com.yourcompany.business
补充排查点
如果修改配置后问题仍存在,检查日志存放目录的权限:确认程序对配置的logs目录有读写权限,目录不存在的话需要先手动创建或配置log4j2自动创建目录。
内容的提问来源于stack exchange,提问作者Jack BeNimble
相关产品推荐
相关产品推荐

