apache虚拟主机日志分割的核心是为每个虚拟主机单独配置errorlog和customlog,使用cronolog或rotatelogs按时间或大小切分;推荐cronolog,因其可自动创建目录、更稳定且不易丢日志。
apache 虚拟主机的日志分割,核心是为每个虚拟主机单独指定日志路径,并通过外部轮转工具(如 cronolog 或 rotatelogs)实现按时间或大小自动切分。不建议共用主服务器的全局日志,否则无法隔离分析、排查困难。
每个虚拟主机独立配置日志路径
在 <virtualhost></virtualhost> 块内直接设置 ErrorLog 和 CustomLog,而不是依赖主配置中的默认值。例如:
ErrorLog "|/usr/local/sbin/cronolog /var/log/apache2/www.example.com-error_%Y%m%d.log"CustomLog "|/usr/local/sbin/cronolog /var/log/apache2/www.example.com-access_%Y%m%d.log" combined
注意:路径中包含域名和日期格式(%Y%m%d),便于识别和归档;目录需存在或由工具自动创建(cronolog 支持,rotatelogs 不支持)。
推荐使用 cronolog 实现按天/按小时切分
cronolog 更稳定,不易丢日志,且能自动创建缺失的目录层级:
- 按天切分(生产常用):
CustomLog "|/usr/local/sbin/cronolog /var/log/apache2/example.com/access_%Y%m%d.log" combined - 按小时切分(高流量站点):
CustomLog "|/usr/local/sbin/cronolog /var/log/apache2/example.com/%Y%m%d/access_%H.log" combined
安装后确认命令路径(通常为 /usr/local/sbin/cronolog),权限需保证 Apache 子进程(如 apache 或 www-data 用户)可执行该二进制文件。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
避免常见错误
多个虚拟主机共用同一日志文件名会导致写入冲突;日志路径若含不存在的父目录,rotatelogs 会失败而 cronolog 可自动创建 —— 所以务必检查实际路径是否可写,或统一改用 cronolog。
如果使用基于 IP 的虚拟主机,建议日志路径中嵌入 IP 地址(如 192.168.1.10-access_%Y%m%d.log),增强可追溯性。
补充:配合 logrotate 做二级归档(可选)
即使已用 cronolog 按天切分,仍可为旧日志启用系统级压缩与清理。例如在 /etc/logrotate.d/apache-vhosts 中添加:
/var/log/apache2/*.log {dailymissingokrotate 90compressdelaycompresssharedscriptsendscript
这样既保留近期可读的原始日志,又对历史日志自动压缩归档,节省磁盘空间。










