cronolog一个经典的日志切割工具
cronolog 是一个用 C 写的小工具,用于按时间自动切割日志文件。它主要用于 Web 服务器(如 Apache、Nginx)或其他进程,将日志按时间组织成多个文件,方便管理和归档。
版本:1.6.2(你提供的版本)
用途:
- 按天、小时或自定义时间切割日志
- 文件名中包含时间戳
- 适用于需要精细化日志管理的系统
优势:
- 灵活的时间格式(%Y-%m-%d、%H 等)
- 无需定时任务即可自动切割
- 可输出到管道,结合 Web 服务器使用
使用场景
Apache、Nginx、Squid 这类服务端进程默认只能把日志写到一个文件,不会自动分割。
借助
cronolog,可以实现类似:- 每天生成一个新的访问日志
- 每小时切割一个错误日志
- 文件名中自动包含时间戳
安装方法
1 | # 解压 |
典型用法
1. 命令行测试
1 | echo "Hello cronolog" | /usr/local/sbin/cronolog /var/log/test_%Y-%m-%d.log |
执行后,会生成:
/var/log/test_2025-09-29.log
2.Apache
在 httpd.conf 中:
1 | CustomLog "|/usr/local/sbin/cronolog /var/log/httpd/access_%Y-%m-%d.log" combined |
这会让 access.log 每天生成一个:
access_2025-09-29.log
access_2025-09-30.log
...
3. Nginx
在 nginx.conf 中:
1 | http { |
%Y-%m-%d→ 按天切割- 可以使用
%H按小时切割 - 可以使用
%Y/%m/%d/%H/创建多级目录存放日志
4. 高级示例(按小时切割,生成目录)
1 | access_log "|/usr/local/sbin/cronolog /var/log/nginx/%Y/%m/%d/access_%H.log" main; |
效果:
/var/log/nginx/2025/09/29/access_13.log
/var/log/nginx/2025/09/29/access_14.log
...
注意事项
- 高并发环境下可能成为性能瓶颈 → 日志量大时建议用
logrotate或 Nginx 内置日志切割方案 cronolog进程挂掉会导致日志丢失- 管道方式可以让日志按时间格式自动管理,但无法自动压缩,需要额外脚本