Linux 日志自动分割神器 —— logrotate
创始人
2025-05-28 10:13:03
0

前言

我们在Linux服务器上部署服务时,会生成很多日志,如果请求量大的话,日志文件会变得很大,不方便我们定位问题。Linux为我们提供了日志分隔的服务,可用于java、node.js、nginx等服务器的日志分隔及定期清理。

logrotate

  • logrotate 是一个 linux 系统日志的管理工具。可以对单个日志文件或者某个目录下的文件按时间 / 大小进行切割,压缩操作;指定日志保存数量;还可以在切割之后运行自定义命令。
  • logrotate是基于linux定时任务crontab运行的,主流 Linux 发行版上都默认安装有 logrotate 包,如果你的 linux 系统中找不到 logrotate, 可以使用 apt-get 或 yum 命令来安装。

我们可以通过查看logroate的文件来看下其原理

[root@xpqcsyx27128xx8gen ~]# cat /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0[root@xpqcsyx27128xx8gen ~]# cat /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {monthlycreate 0664 root utmpminsize 1Mrotate 1
}/var/log/btmp {missingokmonthlycreate 0600 root utmprotate 1
}

cron.xxx是定时执行的任务,有每天执行的,也有每小时执行等。这里以每天执行的文件来看,其主要的内容就是以/etc/logrotate.conf配置文件来执行logroate,所以/etc/logrotate.conf里就是日志分隔的配置,而其中又include了/etc/logroate.d,所以我们可以将日志分隔的配置放到/etc/logroate.d中。

配置

/etc/logroate.d中默认存放了一些日志的分隔配置,用于系统一些日志的分隔。当我们需要对自己启动的服务进行日志管理时,就需要创建配置文件,然后按照规则来配置日志分隔,下面以自己创建的nginx日志分隔为例,为大家介绍logroate的配置参数:

[root@xpqcsyx27128xx8gen ~]# cd /etc/logrotate.d/
[root@xpqcsyx27128xx8gen logrotate.d]# ls
aide  bootlog  chrony  nginx  syslog  wpa_supplicant  yum
[root@xpqcsyx27128xx8gen logrotate.d]# cat nginx
/app/generalmpl/openresty/nginx/logs/*.log {
daily
rotate 7
missingok
dateext
compress
notifempty
sharedscripts
postrotate[ -e /app/generalmpl/openresty/nginx/logs/nginx.pid ] && kill -USR1 `cat /app/generalmpl/openresty/nginx/logs/nginx.pid`
endscript
}

/app/generalmpl/openresty/nginx/logs/*.log代表日志路径,可用*来模糊匹配。

配置项说明
daily
weekly
monthly
yearly
切割周期,多久切割一次。
daily : 切割周期为 每天
weekly : 切割周期为 每周
monthly: 切割周期为 每月
yearly: 切割周期为 每年
size 10k当日志文件到达指定的大小时才转储。
默认单位是 bytes。bytes (缺省) 及 KB (sizek) 或 MB (sizem)。
如: size 10k、 size 10M
rotate 5日志文件保留备份的个数。默认是 0
如:0 指没有备份;5 指保留最近的5个备份,其余的全部删除。
maxage count保留多少天的日志文件。
如:5 指保留最近的5天的日志文件,其余的全部删除。
missingok在日志轮循期间,错误将被忽略。
例如 “文件无法找到” 之类的错误。
copytruncate
nocopytruncate
copytruncate: 用于还在打开中的日志文件,把当前日志备份并截断。 把正在输出的日志拷 (copy) 一份出来,再清空 (trucate) 原来的日志。
nocopytruncate: 备份日志文件,但是不截断 。
nocompress
compress
nocompress: 不压缩(默认)
compress: 通过 gzip 压缩转储以后的日志。如 XXX.gz
delaycompress
nodelaycompress
delaycompress: 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩。
nodelaycompress: 覆盖 delaycompress 选项,转储同时压缩。
prerotate
endscript
在所有其它指令完成 执行这两个关键字之间的脚本。这两个关键字必须单独成行
postrotate
endscript
在所有其它指令完成 执行这两个关键字之间的脚本。这两个关键字必须单独成行
sharedscripts共享脚本,整个日志组运行一次脚本 。
比如 nginx 涉及到多个日志文件,一般使用 * 号 通配符:/var/log/nginx/*.log { ... }
sharedscripts 的作用是在 所有的日志文件 都轮转完毕后 统一执行一次脚本
如果没有 sharedscripts ,那么 每个日志文件 轮转完毕后 都会执行一次脚本
errors address转储时的错误信息发送到指定的 Email 地址。
mail address
nomail
mail address : 把转储的日志文件发送到指定的 E-mail 地址
nomail : (默认)转储时不发送日志文件
ifempty
notifempty
ifempty :if empty ,即使是空文件也转储(默认)。
notifempty :not if empty ,如果是空文件的话,不转储。
olddir directory
noolddir
olddir directory :储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统。
noolddir : 转储后的日志文件和当前日志文件放在同一个目录下。
dateext在日志名称后面,添加日期后缀。默认是当前日期。默认是 -%Y%m%d 的后缀。
可用 dateformat 选项扩展配置。
如:nginx_access.log --> nginx_access.log-20210120
注意: 格式化日期中不要出现 分号(:) ,因为文件名称是不能含有分号的。
dateformat对 dateext 的拓展,必须配合 dateext 使用
在V3.9.0 之前,只支持 %Y、%m、%d、 %s 参数。
在V3.9.0 及之后,支持 %H 参数。
如: dateformat -%Y-%m-%d
结果:nginx_access.log --> nginx_access.log-2021-01-20
注意: 文件名称中禁止出现分号(:) ,因为文件名称是不能含有分号的。
dateyesterday与 dateext 配合使用,日期提前一天。
比如,当前日期是2023-03-15,提前一天就是 2021-03-14
extensiondateextdateformat 配合使用,指定文件的后缀。
如:extension .log
结果:nginx_access.log --> nginx_access-2023-03-15.log

参考:
https://blog.csdn.net/xiaojin21cen/article/details/122309230
https://zhuanlan.zhihu.com/p/90507023

相关内容

热门资讯

容芯致远获天使轮融资 2026年5月8日,北京容芯致远科技有限公司(简称“容芯致远”)宣布完成天使轮融资。本轮融资由万利达...
试管期间能运动吗?避开这些坑,... 做试管的姐妹都纠结:不动怕气血差、影响卵泡,动了又怕伤子宫、毁着床,到底该怎么办?其实试管不用“躺平...
原创 今... 2026年5月6日,国内金价算是彻底“凉”了一下,你看那AU9999现货黄金,直接跌到了1013元一...
美国5月消费者信心再创历史新低... 财联社5月8日讯(编辑 牛占林)随着中东战争持续推高能源价格,美国消费者信心本月继续下滑,并再度刷新...
“压高盛一头”!江西一精神病院... 蓝鲸新闻5月8日讯(记者 徐甘甘)5月8日,盛通股份(002599.SZ)一季报引发资本市场热议——...
2026年企业短视频能力升级:... 本篇将回答的核心问题 2026年企业短视频营销面临哪些关键挑战,有效应对策略是什么? 服务机构的能力...
江西一精神病院炒股炒成上市公司... 红星资本局5月8日消息,近日,上市公司盛通股份(002599.SZ)发布一季报,披露了前十大股东名单...
企业IP打造指南:小公司低成本... 小公司做企业IP,不是为了装门面,而是让客户在没见到你之前,就能通过内容知道你是谁、你解决什么问题、...
官方:赵心童入选世界斯诺克名人... 北京时间5月8日消息,世界斯诺克巡回赛(WST)今日正式公布了2025/26赛季年终奖项及名人堂更新...
小灰熊AI学员王锋:希望能跟上... 35了,老程序员了。 从进入互联网行业到现在,其实已经做了很多年移动端开发。最早那几年,安卓行业发展...
原创 2... 2026年全国两会把稳定房地产市场列为重点工作,政府工作报告明确提出因城施策控增量、去库存、优供给。...
一年翻倍,六年未归——徽商银行... 文:向善财经 今年的港股市场,与A股市场出现了明显的分化。 A股这边,科技板块在AI浪潮中热闹非凡;...
古井贡酒2025:在行业深度调... 以“稳”为底、以“新”为翼。 文/每日财报 杜康 在行业库存高企、价格倒挂的背景下,当多数酒企在为...
好上好8408万收购鼎瑞芯加码... 5月7日晚,好上好(001298.SZ)抛出一份收购公告,拟以8408万元现金收购深圳市鼎瑞芯科技有...
全面大撤离!李嘉诚英国“套现”... 突发,李嘉诚又卖了。 这次,套现了455亿。 金额不少,但更值得关注的是透露着不同寻常的信号。 因为...
油气价格上涨加剧法国一季度贸易... 据新华社,法国海关7日发布的数据显示,受中东局势推高国际油气价格影响,法国今年第一季度贸易逆差扩大至...
昆仑芯启动科创板IPO上市辅导... 5月8日,据证监会官网显示,昆仑芯(北京)科技股份有限公司于2026年5月7日正式启动科创板上市辅导...
贵州茅台酒股份有限公司关于回购... 来源:上海证券报 证券代码:600519 证券简称:贵州茅台 公告编号:临2026-016 贵州茅...
百度昆仑芯启动科创板上市辅导,... 5月8日,证监会官网显示,昆仑芯(北京)科技股份有限公司 (下称“昆仑芯”)于2026年5月7日正式...
滕州信华的承压时刻:罚单、失信... 2026年4月末,滕州信华美元债单日跌近2%,关联方被列“老赖”。半年前,这家AA+城投曾因非市场化...