Apache 虚拟主机 日志按周、按月自动切割 + 自动清理(Windows XAMPP 版)

一、核心原理

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.logsite1-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.bat

1、按月保留:只保留最近 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 计划任务

  1. 打开 任务计划程序
  2. 创建基本任务
  3. 名称:Apache 日志按月自动清理
  4. 触发器:每天 凌晨 2:00 运行
  5. 操作:启动程序 → 选择你的 ClearApacheLog.bat
  6. 属性里勾选:
    • 不管用户是否登录都要运行
    • 使用管理员权限运行

六、总结配置参数

表格
切割周期 秒数 日志命名格式 清理保留天数
按天 86400 %Y%m%d 7/15 天
按周 604800 %Y%m%d 28 天(4 周)
按月 2592000 %Y%m 90 天(3 个月)
上一篇 家里用POE还是用非POE,哪个好?
下一篇 S9700虚拟化后eth-trunk接口流量无法负载分担