Apache 虚拟主机日志 自动清理 + 自动切割 + 自动压缩 完整配置

分两种环境:Linux(logrotate 官方方案,推荐)Windows 计划任务自动删旧日志

实现效果:按天生成日志、自动压缩、自动删除 N 天前旧日志,每个虚拟主机日志独立。


一、Linux 环境(最标准、生产必用)

1. 先给虚拟主机配置按天切割日志

在每个站点 <VirtualHost> 里写:
apache
<VirtualHost *:80>
    ServerName site1.com
    DocumentRoot /var/www/site1

    # 按天生成日志,带年月日
    ErrorLog "|/usr/sbin/rotatelogs /var/log/httpd/site1-error-%Y%m%d.log 86400 480"
    CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/site1-access-%Y%m%d.log 86400 480" combined
</VirtualHost>
86400 = 按天切割。

2. 配置 logrotate 自动清理 + 压缩

新建配置文件:
bash
运行
vim /etc/logrotate.d/apache_vhost
写入下面配置(直接复制可用):
conf
# 匹配所有站点日志
/var/log/httpd/site1-*.log /var/log/httpd/site2-*.log {
    daily
    rotate 15
    compress
    delaycompress
    missingok
    notifempty
    create 644 apache apache
    postrotate
        systemctl reload httpd > /dev/null 2>&1
    endscript
}

参数解释(重点)

  • daily:每天轮转
  • rotate 15只保留最近 15 天日志,超过自动删除
  • compress:旧日志自动 gzip 压缩
  • delaycompress:隔一天再压缩,避免占用
  • missingok:日志不存在也不报错
  • notifempty:空日志不轮转
  • postrotate:轮转后平滑重启 Apache,不中断业务

3. 测试并生效

bash
运行
# 模拟测试
logrotate -d /etc/logrotate.d/apache_vhost

# 手动强制执行
logrotate -f /etc/logrotate.d/apache_vhost
系统每天会自动执行,自动切割、压缩、清理过期日志

二、Windows XAMPP 环境自动清理日志

1. 第一步:虚拟主机按天切割日志

apache
<VirtualHost *:80>
    ServerName site1.com
    DocumentRoot "D:/xampp/htdocs/site1"

    ErrorLog "|D:/xampp/apache/bin/rotatelogs.exe D:/xampp/apache/logs/site1-error-%Y%m%d.log 86400"
    CustomLog "|D:/xampp/apache/bin/rotatelogs.exe D:/xampp/apache/logs/site1-access-%Y%m%d.log 86400" combined
</VirtualHost>

2. 写自动清理批处理 .bat

新建 ClearApacheLog.bat
bat
@echo off
rem 设置日志目录
set logDir=D:\xampp\apache\logs

rem 删除 7 天前 .log 日志
forfiles /p %logDir% /s /m *.log /d -7 /c "cmd /c del /f @path"

rem 删除 7 天前 .gz 压缩日志(如果有)
forfiles /p %logDir% /s /m *.gz /d -7 /c "cmd /c del /f @path"
  • /d -7 代表保留最近 7 天,改成 15 就是保留 15 天。

3. 设置 Windows 计划任务

  1. 搜索「任务计划程序」
  2. 创建基本任务:每天凌晨 2:00 执行
  3. 启动程序:选择你写的 ClearApacheLog.bat
  4. 完成 → 每天自动清理旧日志

三、核心总结

  1. Linux:用 rotatelogs 按天切割 + logrotate 自动压缩、自动删 N 天前日志,稳定无人工干预。
  2. Windows:rotatelogs 按天命名 + 批处理 forfiles + 计划任务,定时删除过期日志。
  3. 每个虚拟主机单独日志文件,互不影响,清理规则统一管控。
上一篇 华为CE交换机-配置VRRP多网关负载分担
下一篇 MongoDB(26)什么是复合索引?