温馨提示×

ubuntu apache日志如何轮转

小樊
44
2026-09-09 14:05:54
栏目: 智能运维

在 Ubuntu 上,Apache 的日志轮转通常是通过 logrotate 来管理的。下面分几种情况说明。


一、Ubuntu 默认是怎么轮转 Apache 日志的

Ubuntu 安装 Apache(apache2)后,会自动安装并配置 logrotate

  • 配置文件位置:

    /etc/logrotate.d/apache2
    
  • Apache 日志默认目录:

    /var/log/apache2/
    

默认情况下,Ubuntu 会:

  • 每天检查
  • 按大小或时间轮转
  • 保留一定数量的历史日志
  • 轮转后让 Apache 重新打开日志文件(通过 reload

二、查看 Apache 的 logrotate 配置

cat /etc/logrotate.d/apache2

常见内容示例(简化):

/var/log/apache2/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        if invoke-rc.d apache2 status > /dev/null 2>&1; then
            invoke-rc.d apache2 reload > /dev/null 2>&1
        fi
    endscript
}

含义:

  • daily:每天轮转
  • rotate 14:保留 14 个旧日志
  • compress:压缩旧日志
  • delaycompress:延迟压缩(方便 Apache 继续写)
  • postrotate:轮转后 reload Apache

三、手动测试 Apache 日志轮转

1. 测试配置是否有错误

logrotate -d /etc/logrotate.d/apache2

-d 是 debug,不会真正轮转)

2. 强制立即轮转

logrotate -f /etc/logrotate.d/apache2

四、常见问题与修改方式

1️⃣ 想改成“按大小轮转”

例如超过 100M 才轮转:

/var/log/apache2/*.log {
    size 100M
    rotate 10
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        systemctl reload apache2 > /dev/null 2>&1 || true
    endscript
}

2️⃣ 日志轮转后 Apache 还在写旧文件?

原因:Apache 没 reload
解决:确保 postrotate 里有:

systemctl reload apache2

或使用:

apachectl graceful

五、使用 Apache 自带日志轮转(不推荐)

Apache 本身有 rotatelogs,但:

  • 配置复杂
  • 不如 logrotate 统一
  • Ubuntu 官方推荐用 logrotate

示例(不推荐但可用):

CustomLog "|/usr/bin/rotatelogs /var/log/apache2/access_log 86400" combined

六、检查是否生效

ls -lh /var/log/apache2/

看到类似:

access.log
access.log.1
access.log.2.gz

说明轮转正常。


如果你愿意,我可以:

  • 帮你写一份生产环境推荐的 Apache 日志轮转配置
  • 或针对 access / error 分开策略
  • Docker / 云服务器场景

直接告诉我你的使用场景即可。

0