Log4j2控制台日志正常输出但日志文件为空的解决方法咨询
问题排查与解决
你的log4j2.properties配置存在几个关键问题,导致日志文件为空,按以下步骤修正即可:
1. 删除冗余的log4j 1.x语法配置
配置里的这一行是log4j 1.x的写法,log4j2完全不兼容,直接删除:
log4j.appender.file.File=C:\\SpaceProject\\DataDrivernFrameWork\\src\\test\\resources\\logs\\appLog.log
2. 调整Logger的输出绑定
当前配置仅给com.vcentry.lab.base包下的Logger绑定了文件输出APPENDER,如果代码里的日志是通过root Logger或其他包的Logger打印的,日志不会写入文件。你可以二选一修正:
方案一:让root Logger同时输出到控制台和文件
修改rootLogger的配置,把文件APPENDER加入输出列表:
rootLogger.level = debug rootLogger.appenderRefs = stdout, file rootLogger.appenderRef.stdout.ref = STDOUT rootLogger.appenderRef.file.ref = LOGFILE
这样所有debug及以上级别的日志都会同时输出到控制台和文件。
方案二:确保代码使用指定包的Logger
如果只想让com.vcentry.lab.base包下的日志写入文件,要保证代码中获取Logger的方式正确:
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class YourClass { // 确保当前类在com.vcentry.lab.base包下 private static final Logger logger = LogManager.getLogger(YourClass.class); }
3. 验证文件路径与权限
确认C:\\SpaceProject\\DataDrivernFrameWork\\src\\test\\resources\\logs\\目录存在,且程序有读写权限。如果目录不存在,可手动创建,或者在文件APPENDER配置中添加自动创建目录的参数:
appender.file.createOnDemand = true
修正后的完整配置示例
property.filename = logs appenders = console, file appender.console.type = Console appender.console.name = STDOUT appender.console.layout.type = PatternLayout appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n appender.file.type = File appender.file.name = LOGFILE appender.file.fileName=C:\\SpaceProject\\DataDrivernFrameWork\\src\\test\\resources\\logs\\appLog.log appender.file.layout.type=PatternLayout appender.file.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n appender.file.createOnDemand = true loggers=file logger.file.name=com.vcentry.lab.base logger.file.level = debug logger.file.appenderRefs = file logger.file.appenderRef.file.ref = LOGFILE rootLogger.level = debug rootLogger.appenderRefs = stdout, file rootLogger.appenderRef.stdout.ref = STDOUT rootLogger.appenderRef.file.ref = LOGFILE
内容的提问来源于stack exchange,提问作者codemonster
相关产品推荐
相关产品推荐

