温馨提示×

Ubuntu Apache日志如何分割

小樊
45
2026-08-31 10:58:43
栏目: 智能运维

在 Ubuntu 下 Apache 访问日志 / 错误日志 的分割(日志轮转)主要有 两种常见做法
使用 Ubuntu 自带的 logrotate(推荐)
使用 Apache 自带的 rotatelogs(按时间切割)

下面分别说明,并给出可直接用的配置示例


一、推荐方式:使用 logrotate(最常用)

Ubuntu 默认已经为 Apache 配置了 logrotate

1️⃣ 查看 Apache 的 logrotate 配置

cat /etc/logrotate.d/apache2

默认内容大致如下(不同版本略有差异):

/var/log/apache2/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 640 www-data adm
    sharedscripts
    postrotate
        systemctl reload apache2 > /dev/null 2>&1 || true
    endscript
}

2️⃣ 关键参数说明

参数 含义
daily 每天分割
rotate 14 保留 14 个历史日志
compress 启用 gzip 压缩
create 创建新日志文件
postrotate 分割后重新加载 Apache

3️⃣ 修改分割策略(可选)

例如:

  • 每周分割
  • 保留 30 个
  • 不压缩
/var/log/apache2/*.log {
    weekly
    rotate 30
    missingok
    notifempty
    nocreate
    sharedscripts
    postrotate
        systemctl reload apache2
    endscript
}

4️⃣ 手动测试 logrotate

sudo logrotate -vf /etc/logrotate.d/apache2

二、Apache 自带方式:rotatelogs(按时间切割)

适合 需要按小时、按天自动切割,但不用 logrotate 的场景。

1️⃣ 修改 Apache 配置

编辑站点配置或 apache2.conf

sudo nano /etc/apache2/sites-available/000-default.conf

2️⃣ 示例:按天分割访问日志

CustomLog "|/usr/bin/rotatelogs /var/log/apache2/access_%Y%m%d.log 86400" combined

按小时:

CustomLog "|/usr/bin/rotatelogs /var/log/apache2/access_%Y%m%d%H.log 3600" combined

错误日志:

ErrorLog "|/usr/bin/rotatelogs /var/log/apache2/error_%Y%m%d.log 86400"

3️⃣ 重启 Apache

sudo systemctl restart apache2

优点:实时切割
缺点:不如 logrotate 规范,日志文件需手动清理


三、推荐方案总结

场景 推荐方式
Ubuntu 默认服务器 ✅ logrotate
按小时切割 rotatelogs
自动化 + 压缩 + 自动清理 ✅ logrotate

四、常见问题

❓ logrotate 为什么没生效?

  • 检查 Apache 是否在运行
  • 是否修改了日志路径
  • 是否执行过 reload
sudo systemctl reload apache2

❓ 日志太大怎么办?

  • 缩短 rotation 周期(daily → hourly)
  • 增加 rotate 数量
  • 启用 compress

五、我的建议(生产环境)

Ubuntu + Apache = 直接用 logrotate
✅ 设置:

  • daily
  • rotate 30
  • compress
  • reload apache2

如果你愿意,可以把你当前的 Apache 日志路径 / 配置文件贴出来,我可以帮你写一份完全适合你服务器的 logrotate 配置

0