Linux日志轮转策略主要通过logrotate
工具实现,其核心策略涵盖轮转触发条件、保留规则、压缩优化、特殊场景处理等多个维度,以下是具体分类及说明:
根据固定时间间隔自动轮转日志,是最常见的基础策略:
/var/log/syslog
),通常配合weekly
/monthly
使用,优先级低于size
(若同时配置size
,达到大小立即触发)。/var/log/dpkg.log
),系统多在周一执行。/var/log/wtmp
用户登录日志),通常在每月第一天执行。当日志文件达到指定阈值时立即轮转,适用于日志增长较快的场景(如应用日志):
size 100K
(100KB)、size 10M
(10MB)、size 5G
(5GB)等格式,单位可组合(如size 100k
或size 100M
)。例如,Nginx日志配置size 50M
表示当日志文件超过50MB时轮转。控制旧日志的保留数量或时长,避免磁盘空间耗尽:
N
个轮转日志(如rotate 7
保留7天日志),超出部分自动删除(默认保留4个,可通过/etc/logrotate.conf
全局设置)。N
天的旧日志(如maxage 30
删除30天前的日志),可与rotate
配合使用(如保留最近7天日志+删除30天前的旧日志)。减少旧日志占用的磁盘空间,提升存储效率:
gzip
默认压缩旧日志(如app.log.1.gz
),压缩后文件大小约为原文件的1/3~1/10。app.log.1
)不下压缩,待下次轮转时再压缩(如app.log.2.gz
),避免影响实时写入。olddir /var/log/archive
),便于集中管理。应对无法重启服务、空日志、文件丢失等特殊情况:
app.log.1
),然后清空原文件(app.log
)。适用于无法重启的服务(如Nginx、MySQL),但可能存在少量日志丢失风险(复制与清空之间的时间差)。notifempty
)。notifempty
相反),适用于需要保留空日志的场景(如监控日志完整性)。在轮转前后执行自定义操作,确保服务正常运行:
endscript
结束。例如,MySQL轮转前需刷新日志:/usr/local/mysql/bin/mysqladmin -uroot -p'password' flush-logs
。endscript
结束。例如,Nginx轮转后需通知其重新打开日志文件:/usr/sbin/nginx -s reopen
。postrotate
脚本(如批量重启多个服务),避免重复执行(默认每个日志轮转后都执行一次)。自定义轮转后的日志文件名,便于归档和查找:
app.log-20250508.gz
),替代默认的数字递增(app.log.1
),更直观。dateext
使用,自定义日期格式(如dateformat -%Y-%m-%d
生成app.log-2025-05-08.gz
,dateformat -%s
生成时间戳)。以上策略可根据实际需求组合使用(如daily
+rotate 7
+compress
+dateext
),通过/etc/logrotate.d/
目录下的配置文件(如nginx
、mysql
)针对特定服务定制,实现日志的自动化管理。