/var/log/*log {
# =============================================== 归档规则 ===============================================
# 每小时进行一次日志切割
# hourly
# 指定转储周期为每天
daily
# 指定转储周期为每周
# weekly
# 指定转储周期为每月
# monthly
# 当日志文件到达指定的大小时才转储,无周期概念(建议每几分钟执行一次日志切割命令)。Size可以指定 bytes (缺省) 以及 KB (sizek) 或者 MB (sizem)。如 size=5 或 size 5(>= 5 个字节就转储); size=100k 或 size 100k; size=100M 或 size 100M
# size参数跟滚动周期参数:hourly、daily、monthly、yearly完全是互斥的。即一旦设置了size参数,滚动周期参数就自动无效了,只要每次执行logrotate指令时,日志文件大小超过size,就会触发一次滚动,没有滚动周期一说了
# size 100M
# 设置maxsize后,如果被轮转的日志大小超过设置的size,即使还没到下一次轮转周期也会发生轮转
# 一般用于多次轮询;当执行logrorate指令时,只要日志的大小超过50M,即使时间没到下一个滚动周期内,也会发生滚动。那么同一天内00:00:00--23:59:59就会发生多次滚动。换句话说,如果demo.txt的大小一直没有达到maxsize,那么一个滚动周期就只会发生一次滚动,即当前滚动周期内第一次执行logrorate指令就会触发滚动。以后的小时内都不会发生滚动。maxsize可以使滚动提前发生,再下一个滚动周期到来之前发生多次滚动。即每满足maxsize就滚动一次,不满足则滚动1次,(每个滚动周期内,n次或1次)
# maxsize 50M
# 设置minsize后,如果被轮转的日志大小不满足设置的size,即便到了设置的轮转时间(例如:daily)也不会触发日志轮转
# 一个滚动周期内只会发生一次滚动,在当前滚动周期后面的时间里,即使日志大小再次超过100k,也不会再发生滚动,即minsize不能使滚动提前发生。如果日志的大小一直没有达到minsize,那么这个滚动周期内是不会触发滚动的。即满足minsize则滚动一次,不满足则滚动0次,(每个滚动周期内,1次或0次)。
# minsize 5M
# 保留多少个日志文件(轮转几次).默认保留四个.就是指定日志文件删除之前轮转的次数,0 指没有备份
rotate 30
# 自动删除掉超过maxage指定天数的切割后的归档文件,即最大保留15;相对于rotate按文件数,它是以天数为单位的
# maxage 15
# =============================================== 归档规则 ===============================================
# =============================================== 压缩规则 ===============================================
# 不做gzip压缩处理
# nocompress
# 是否通过gzip压缩转储以后的日志文件,如xxx.log-20131216.gz ;如果不需要压缩,注释掉就行
compress
# 自定义压缩的命令,默认压缩方式为 gzip
# compresscmd
# 自定义解压的命令,默认解压工具为 gunzip
# uncompresscmd
# 压缩时使用后缀,默认 gzip 压缩格式下后缀为 .gz
# compressext
# 压缩选项,默认使用 gzip;如果使用其他压缩选项,需要设置 compressoptions 与之匹配
# compressoptions
# 和compress 一起使用时,转储的日志文件到下一次转储时才压缩
delaycompress
# 覆盖 delaycompress 选项,转储同时压缩(默认配置)。
# nodelaycompress
# =============================================== 压缩规则 ===============================================
# =============================================== 压缩包日期格式 ===========================================
# 轮转日志时不使用后缀名为日期的格式
# nodateext
# 切割后的日志文件以当前日期为格式结尾,如xxx.log-20131216这样。如果注释掉,切割出来是按数字递增,即xxx.log-1这种格式
dateext
# 修改后缀格式,必须配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,只支持 %Y %m %d %s 这四个参数。dateformat -%Y%m%d%H.%s 效果 2024072214.1626933601
#dateformat .%s
# 切割日志时使用昨天的时间而不是今天的时间
# dateyesterday
# 日志文件在轮转后使用指定的 ext 扩展名。如果使用压缩,通常ext还会加上压缩文件的扩展名,通常是 .gz。例如,你有一个日志文件名为 mylog.foo,你可以通过 extension ext 将日志轮转为 mylog.1.foo.gz 而不是 mylog.foo.1.gz
# extension ext
# =============================================== 压缩包日期格式 ===========================================
# =============================================== 归档方式 ===============================================
# 轮转时复制完整的日志文件,常用来做当前日志文件的镜像备份。当指定 copy 选项时, create 选项会失效
# copy
# 轮换前将原日志文件复制一份,然后清空(trucate)原日志文件内容,变成一个空文件,保证应用程序不会因为日志文件被清空而出现异常。copytruncate模式的好处是原日志文件的inode号不会改变,这对于某些程序而言是非常重要的,比如一些运行在内存中的进程,它们需要通过inode号来读取日志文件。拷贝和清空之间有一个时间差,可能会丢失部分日志数据。当指定 copytruncate 选项时,create 选项会失效
copytruncate
# 轮转时不会复制原日志文件
# nocopy
# 轮转时复制原日志文件后不会清空原日志文件的内容
# nocopytruncate
# 先重命名原日志文件,然后创建和原日志文件同名的新日志文件,并指定新文件的属性,最后通过某些方式通知程序,重新打开日志文件。适用于将原日志文件保存在一个指定的位置中,比如归档或者分析等。需要注意的是,使用create模式轮换日志文件时,由于重命名操作会改变文件的inode号,某些程序可能会因此出现异常,需要通过某些方式通知程序重新打开日志文件。
# create 644 rootl root
# 轮转时不会创建新的日志文件
# nocreate
# 轮转时如果指定的目录不存在,则会创建,支持设置目录的权限、所有者和属组
# createolddir
# 轮转时指定的目录不存在时不会进行创建
# nocreateolddir
# =============================================== 归档方式 ================================================
# =============================================== 归档路径 ================================================
# 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
# olddir directory
# 转储后的日志文件和当前日志文件放在同一个目录下
noolddir
# =============================================== 归档路径 ================================================
# =============================================== 轮转规则 ================================================
# 即使日志文件为空文件也做轮转,这个是logrotate的缺省选项。
ifempty
# 当日志文件为空时,不进行轮转
# notifempty
# 如果日志文件无法找到,不报错继续滚动下一个日志
missingok
# 转储时的错误信息发送到指定的Email 地址
# errors address
# =============================================== 轮转规则 ================================================
# =============================================== 邮件规则 ================================================
# 把转储的日志文件发送到指定的E-mail 地址
# mail address
# 转储时不发送日志文件
nomail
# =============================================== 邮件规则 ================================================
# =============================================== 归档时执行的脚本 =========================================
# 轮转前会尝试读取 include 配置的文件或目录,如果配置的是目录,则目录下的所有文件都会被加载到轮转的配置中;但对于文件扩展名以 taboo 结尾的文件或配置路径为多个目录、管道等时,加载配置时会被忽略
# include file_or_directory
# 共享模式,当 prerotate 和 postrotate 语句执行时匹配到多个日志时,prerotate 和 postrotate 语句仅仅只会执行一次。作用是在所有日志都轮转后统一执行一次脚本。如果没有配置这个,正常模式下,轮转时匹配到的每个日志文件都会单独执行一次 prerotate 和 postrotate 语句。
# sharedscripts
# 轮转时匹配到多个日志文件时,每个日志文件都会执行一次 prerotate 和 postrotate 语句。(默认配置)
# nosharedscripts
# 日志轮转前会执行自定义的命令(脚本),这两个关键字必须单独成行。通常,轮转的日志的完整路径会作为传入的第一个参数
# prerotate
# endscript
# 日志轮转后会执行自定义的命令(脚本),例如重新启动 (kill -HUP) 某个服务,这两个关键字必须单独成行。通常,轮转的日志的完整路径会作为传入的第一个参数
# postrotate
# endscript
# 执行 prerotate/endscript 前且最少一个日志会被轮转时执行该语句,整个模式会作为第一个参数传递给该语句,当语句执行异常时,不会再向下执行
# firstaction/endscript
# 执行 postrotate/endscript 前且最少一个已经被轮转后执行该语句,整个模式会作为第一个参数传递给该语句,当语句执行异常时,仅仅展示错误信息
# lastaction/endscript
# 仅仅当删除轮转过的日志前执行该语句。即将被删除的日志名会作为参数被传递进该语句
# preremove/endscript
# =============================================== 归档时执行的脚本 =========================================
}