apache日志分割依赖logrotate等外部工具或usr1信号,而非目录结构自动完成;核心是按时间或大小切分以避免单文件过大,推荐用logrotate配置daily轮转、30份保留、压缩及reload重载,并支持条件日志实现业务维度分离。

Apache 日志分割不是靠目录结构自动完成的,而是靠外部工具或信号机制实现的。核心目标是把大日志按时间或大小切分成多个文件,避免单个文件无限增长、占用磁盘、影响排查效率。
用 logrotate 实现自动分割(推荐长期使用)
logrotate 是 Linux 系统最常用、最稳定的日志轮转工具,能按天、按大小、按保留份数自动归档和压缩。
编辑配置文件:
Ubuntu/Debian:sudo nano /etc/logrotate.d/apache2
CentOS/RHEL:sudo nano /etc/logrotate.d/httpd-
基础配置示例:
/var/log/apache2/*.log { daily missingok rotate 30 compress delaycompress notifempty create 640 www-data adm sharedscripts postrotate systemctl reload apache2 > /dev/null endscript }-
daily:每天轮转一次(也可换为size +100M按大小触发) -
rotate 30:最多保留 30 份旧日志(如access.log.1,access.log.2.gz) -
compress:归档时自动 gzip 压缩 -
create 640 www-data adm:新建日志文件时设权限和属主属组 -
postrotate ... reload:轮转后重载 Apache,确保新日志写入当前文件
-
手动测试是否生效:
sudo logrotate -f /etc/logrotate.d/apache2
查看/var/log/apache2/是否生成了access.log.1或.gz文件。
用 Apache 自带信号手动分割(适合临时或调试)
Apache 支持 USR1 信号,通知工作进程关闭当前日志文件并重新打开新文件(即“reopen”)。
先确认主进程 PID:
sudo cat /var/run/apache2.pid(Ubuntu)或/var/run/httpd/httpd.pid(CentOS)发送信号:
sudo kill -USR1 $(cat /var/run/apache2.pid)
Apache Superset Dashboard and SQL Exploration Skill下载Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
效果:
当前access.log和error.log内容不会清空,但 Apache 会立即切换到新文件(原文件名不变,内容停止追加),相当于一次“软分割”。后续日志写入新 inode,原文件可安全归档或压缩。
配合日志格式做逻辑分割(按业务维度)
Apache 本身不支持按 URL、状态码等字段自动分文件,但可通过条件日志 + 多个 CustomLog 实现定向记录。
-
示例:把图片请求单独记到一个文件
SetEnvIf Request_URI "\.(jpg|jpeg|png|gif|webp)$" image-request CustomLog "/var/log/apache2/image_access.log" common env=image-request CustomLog "/var/log/apache2/access.log" common env=!image-request
-
注意:
- 需重启或重载 Apache 生效(
sudo systemctl reload apache2) - 各日志文件需单独配置 logrotate,或统一用通配符匹配(如
/var/log/apache2/*.log)
- 需重启或重载 Apache 生效(
清理归档日志,防止堆积
分割后旧日志仍占空间,建议定期清理:
删除 90 天前的压缩归档:
find /var/log/apache2/ -name "*.log.*.gz" -mtime +90 -delete
(先加-print确认匹配路径再执行删除)若用 logrotate,
rotate 30已控制数量;若手动管理,建议搭配 cron 定期清理。
不复杂但容易忽略










