Selenium项目中Log4J日志文件添加时间戳失败求助
Log4J日志文件名添加时间戳失效的解决办法
你当前使用的是Log4J 1.x的RollingFileAppender,这个Appender仅支持按文件大小滚动日志,不支持在File参数中直接使用%d时间戳模式,这就是你配置后时间戳未生效的核心原因;另外FileNamePattern是Log4J 2.x的配置参数,在Log4J 1.x中完全不适用,所以这个配置也无效。
针对你的需求,提供两种可行方案:
方案一:使用DailyRollingFileAppender(按日期滚动日志)
如果需要按日期生成独立日志文件(比如每天一个app_logs_2023-05-15.log),直接替换为DailyRollingFileAppender即可,它原生支持日期格式的文件名滚动。修改后的日志配置如下:
# Direct log messages to a log file log4j.appender.file=org.apache.log4j.DailyRollingFileAppender log4j.appender.file.File=logs/app_logs.log # 指定日期滚动的文件名格式,生成的归档文件会自动添加时间戳 log4j.appender.file.DatePattern='_'yyyy-MM-dd'.log' log4j.appender.file.MaxBackupIndex=10 log4j.appender.file.layout.ConversionPattern=\[%3p\] %d \[%t\] %c %x - %m%n # Direct log messages to stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=\[%-p\] %d \[%t\] %c %x - %m%n
配置说明:
DatePattern='_'yyyy-MM-dd'.log':每天会将当天的日志归档为app_logs_2023-05-15.log,当前日志仍写入app_logs.logMaxBackupIndex:控制保留的归档日志文件数量
方案二:保留RollingFileAppender,动态设置启动时间戳文件名
如果需要保留按文件大小滚动的逻辑,同时让文件名带上项目启动时的时间戳(比如app_logs_2023-05-15_14-30.log),需通过Java代码动态配置Log4J:
- 先在log4j配置中预留文件路径占位:
log4j.appender.file.File=logs/app_logs.log
- 在项目初始化代码中(比如Selenium测试的前置方法里),生成带时间戳的文件名并替换Log4J配置:
import org.apache.log4j.FileAppender; import org.apache.log4j.Logger; import java.text.SimpleDateFormat; import java.util.Date; public class LogConfig { public static void initLogFileName() { Logger rootLogger = Logger.getRootLogger(); FileAppender fileAppender = (FileAppender) rootLogger.getAppender("file"); if (fileAppender != null) { String originalPath = fileAppender.getFile(); String timestamp = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); // 替换文件名,生成带时间戳的路径 String newPath = originalPath.replace(".log", "_" + timestamp + ".log"); fileAppender.setFile(newPath); fileAppender.activateOptions(); } } }
调用这个方法后,日志文件名将变为app_logs_2023-05-15.log,后续按文件大小滚动时,备份文件也会基于这个文件名生成。
内容的提问来源于stack exchange,提问作者Amarjeet Singh
相关产品推荐
相关产品推荐

