一、核心原理
Apache 自带
rotatelogs.exe- 按时间大小切割:86400 秒 = 每天
- 按周:
604800秒 - 按月:
2592000秒
日志文件名用格式:
- 按月:
%Y%m→ 202604 - 按周:
%Y%m%d配合周周期切割
二、配置 1:按月切割日志(推荐)
编辑
httpd-vhosts.conf 虚拟主机apache
<VirtualHost *:80>
ServerName site1.com
DocumentRoot "D:/xampp/htdocs/site1"
# 按月切割日志 2592000秒 = 30天
ErrorLog "|D:/xampp/apache/bin/rotatelogs.exe D:/xampp/apache/logs/site1-error-%Y%m.log 2592000"
CustomLog "|D:/xampp/apache/bin/rotatelogs.exe D:/xampp/apache/logs/site1-access-%Y%m.log 2592000" combined
</VirtualHost>
生成日志效果:
site1-error-202604.log、site1-error-202605.log
三、配置 2:按周切割日志
apache
<VirtualHost *:80>
ServerName site2.com
DocumentRoot "D:/xampp/htdocs/site2"
# 按周切割 604800秒 = 7天
ErrorLog "|D:/xampp/apache/bin/rotatelogs.exe D:/xampp/apache/logs/site2-error-%Y%m%d.log 604800"
CustomLog "|D:/xampp/apache/bin/rotatelogs.exe D:/xampp/apache/logs/site2-access-%Y%m%d.log 604800" combined
</VirtualHost>
改完 重启 Apache 生效。
四、编写 按周 / 按月 自动清理批处理
新建
ClearApacheLog.bat1、按月保留:只保留最近 3 个月日志
bat
@echo off
chcp 65001
set LogDir=D:\xampp\apache\logs
:: 删除90天前日志(3个月)
forfiles /p %LogDir% /m *.log /d -90 /c "cmd /c del /f /q @path"
forfiles /p %LogDir% /m *.gz /d -90 /c "cmd /c del /f /q @path"
2、按周保留:只保留最近 4 周日志
bat
@echo off
chcp 65001
set LogDir=D:\xampp\apache\logs
:: 删除28天前日志(4周)
forfiles /p %LogDir% /m *.log /d -28 /c "cmd /c del /f /q @path"
forfiles /p %LogDir% /m *.gz /d -28 /c "cmd /c del /f /q @path"
参数说明:
/d -90保留最近 3 个月/d -28保留最近 4 周
五、设置 Windows 计划任务
- 打开 任务计划程序
- 创建基本任务
- 名称:Apache 日志按月自动清理
- 触发器:每天 凌晨 2:00 运行
- 操作:启动程序 → 选择你的
ClearApacheLog.bat - 属性里勾选:
- 不管用户是否登录都要运行
- 使用管理员权限运行
六、总结配置参数
表格
| 切割周期 | 秒数 | 日志命名格式 | 清理保留天数 |
|---|---|---|---|
| 按天 | 86400 | %Y%m%d | 7/15 天 |
| 按周 | 604800 | %Y%m%d | 28 天(4 周) |
| 按月 | 2592000 | %Y%m | 90 天(3 个月) |