Log4j.properties配置修改咨询:每日生成新日志并清理旧日志
针对log4j.properties的修改方案
核心配置修改(实现每日滚动+指定命名格式)
原配置使用的RollingFileAppender是按文件大小滚动日志,要实现每日生成新日志并按test.yyyy-MM-dd.log命名,需做以下调整:
- 替换Appender类型:将
RollingFileAppender改为DailyRollingFileAppender,这是log4j专门用于按日期滚动日志的实现 - 调整日志文件名与日期格式:
- 保留
log4j.appender.FILE.File=logs/test.log作为当前日志的文件名 - 修改
log4j.appender.FILE.DatePattern为'.'yyyy-MM-dd'.log',滚动后的旧日志会自动命名为test.yyyy-MM-dd.log
- 保留
- 移除冗余配置:
MaxFileSize和MaxBackupIndex是RollingFileAppender的专属参数,DailyRollingFileAppender不需要,直接删除
修改后的基础配置片段:
log4j.rootLogger=DEBUG, FILE # 替换为按日期滚动的Appender log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender # 设置当前日志文件名与滚动后的命名规则 log4j.appender.FILE.File=logs/test.log # 调整DatePattern以匹配目标命名格式 log4j.appender.FILE.DatePattern='.'yyyy-MM-dd'.log' log4j.appender.FILE.Append=true # 保留原布局配置 log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%C]: %m%n
实现自动删除7天前的旧日志
原生DailyRollingFileAppender没有内置自动删除旧日志的功能,可通过以下两种方式实现:
方案1:自定义扩展Appender
继承DailyRollingFileAppender,重写rollOver()方法,在滚动日志时添加删除过期文件的逻辑,核心代码示例:
import org.apache.log4j.DailyRollingFileAppender; import java.io.File; import java.util.Calendar; public class ExpiringDailyRollingFileAppender extends DailyRollingFileAppender { private int maxDays = 7; // 保留日志天数 public void setMaxDays(int maxDays) { this.maxDays = maxDays; } @Override public void rollOver() { super.rollOver(); // 删除过期日志 File logDir = new File(getFile()).getParentFile(); File[] files = logDir.listFiles((dir, name) -> name.matches("test\\.\\d{4}-\\d{2}-\\d{2}\\.log")); if (files == null) return; Calendar cal = Calendar.getInstance(); cal.add(Calendar.DAY_OF_MONTH, -maxDays); long cutoffTime = cal.getTimeInMillis(); for (File file : files) { if (file.lastModified() < cutoffTime) { file.delete(); } } } }
随后在配置文件中替换Appender为自定义类:
log4j.appender.FILE=com.yourpackage.ExpiringDailyRollingFileAppender log4j.appender.FILE.MaxDays=7
方案2:配合定时脚本(简单易用)
如果不想修改代码,可编写定时脚本定期扫描日志目录并删除7天前的文件:
Linux/macOS Shell脚本(加入crontab每日执行)
find /path/to/logs -name "test.*.log" -mtime +7 -delete
Windows批处理脚本(加入任务计划)
forfiles /p "C:\path\to\logs" /m test.*.log /d -7 /c "cmd /c del @path"
内容的提问来源于stack exchange,提问作者Nikita Shamrai
相关产品推荐
相关产品推荐

