一、原理
用 Apache 自带
rotatelogs.exe,不按时间、按文件大小切割:
单个日志到指定大小,自动新建一个日志文件,再配合 Windows 计划任务自动删老旧大日志。
二、rotatelogs 按大小语法
plaintext
rotatelogs.exe 日志路径 大小(字节)
换算:
- 10MB = 10485760 字节
- 20MB = 20971520 字节
- 50MB = 52428800 字节
三、虚拟主机配置:按大小切割日志
编辑
httpd-vhosts.conf示例:单个日志到 10MB 自动切割
apache
<VirtualHost *:80>
ServerName test.com
DocumentRoot "D:/xampp/htdocs/test"
# 错误日志:超过10MB自动切分
ErrorLog "|D:/xampp/apache/bin/rotatelogs.exe D:/xampp/apache/logs/test-error-%Y%m%d%H%M.log 10485760"
# 访问日志:超过10MB自动切分
CustomLog "|D:/xampp/apache/bin/rotatelogs.exe D:/xampp/apache/logs/test-access-%Y%m%d%H%M.log 10485760" combined
</VirtualHost>
- 日志名带时分秒
%Y%m%d%H%M,防止同大小覆盖 - 日志一到 10MB 自动新建一个,不会撑爆硬盘
改完配置 重启 Apache。
四、批处理:自动删除 N 天前切割出来的旧日志
新建
ClearApacheLog_Size.batbat
@echo off
chcp 65001
set LogDir=D:\xampp\apache\logs
:: 删除30天前所有 .log 日志
forfiles /p %LogDir% /m *.log /d -30 /c "cmd /c del /f /q @path"
/d -30保留最近 30 天,更早的自动清理- 改成
-15就是保留 15 天
五、设置 Windows 计划任务
- 打开 任务计划程序
- 创建基本任务
- 名称:Apache 日志按大小自动清理
- 触发器:每天 凌晨 2:00
- 操作:启动程序 → 选中上面的
.bat - 属性勾选:
- 不管用户是否登录都运行
- 以管理员身份运行
六、常用大小直接套用
直接替换数字即可:
- 10MB:
10485760 - 20MB:
20971520 - 50MB:
52428800
七、整体效果
- 日志写到指定大小就自动分割,不会单个日志几十 GB
- 按日期时间命名,不会覆盖
- 计划任务每天自动删除老旧日志,无需手动维护