使用Log4J未生成日志文件?附项目配置代码求排查
排查Log4J未生成日志文件的问题
我来帮你梳理下问题所在,核心原因是Log4j 2的API和Log4j 1.x的配置文件不兼容,具体拆解如下:
1. 配置文件命名与格式不匹配
你代码里用的是Log4j 2的原生API(org.apache.logging.log4j.LogManager),但你的配置文件是log4j.properties——这是Log4j 1.x的配置文件命名规则和语法,Log4j 2默认不会识别并加载这个文件。
Log4j 2要求配置文件命名为log4j2.properties(也支持log4j2.xml/log4j2.yaml),并且配置语法和1.x完全不同,这是导致日志文件不生成的直接原因。
2. 修正配置文件
把你的log4j.properties重命名为log4j2.properties,然后替换成Log4j 2的语法,对应你原来的需求(控制台输出WARN及以上日志、按天滚动生成INFO及以上日志文件),配置如下:
status = warn name = PropertiesConfig # 根日志级别与关联Appender rootLogger.level = INFO rootLogger.appenderRefs = stdout, file rootLogger.appenderRef.stdout.ref = STDOUT rootLogger.appenderRef.file.ref = FILE # 控制台输出Appender配置 appender.stdout.type = Console appender.stdout.name = STDOUT appender.stdout.layout.type = PatternLayout appender.stdout.layout.pattern = %d{ISO8601} %5p [%t] %c{1}:%L - %m%n # 控制台只输出WARN及以上日志 appender.stdout.filter.threshold.type = ThresholdFilter appender.stdout.filter.threshold.level = WARN # 按天滚动的文件Appender配置 appender.file.type = RollingFile appender.file.name = FILE appender.file.fileName = some_log_message.log # 滚动文件的命名格式 appender.file.filePattern = some_log_message.log.%d{yyyy-MM-dd} appender.file.layout.type = PatternLayout appender.file.layout.pattern = %d{ISO8601} %5p [%t] %c{1}:%L - %m%n # 文件记录INFO及以上日志 appender.file.filter.threshold.type = ThresholdFilter appender.file.filter.threshold.level = INFO # 按天滚动的触发策略 appender.file.policies.type = Policies appender.file.policies.time.type = TimeBasedTriggeringPolicy appender.file.policies.time.interval = 1 appender.file.policies.time.modulate = true
注意:Log4j 2已经废弃了1.x中的
DailyRollingFileAppender,改用RollingFileAppender配合TimeBasedTriggeringPolicy实现按天滚动的功能。
3. 依赖与配置位置检查
- 你的pom.xml依赖是正确的:
log4j-api和log4j-core是Log4j 2的核心依赖,log4j-1.2-api是用来兼容Log4j 1.x API的适配层,你代码里直接用的是Log4j 2的API,这个依赖可以保留或移除,不影响当前功能。 - 配置文件放在
src/main/resources目录下是正确的,Log4j 2会自动扫描这个位置的配置文件。
修改完成后,重新运行SystemFiler的main方法,应该就能在项目根目录下生成some_log_message.log文件,里面会包含你循环打印的10条INFO级日志。
内容的提问来源于stack exchange,提问作者sjain
相关产品推荐
相关产品推荐

