You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 11:15:34