Apache HTTP Server 版本 2.4
rotatelogs
是一个简单的程序,用于与 Apache 的管道日志文件功能结合使用。它支持基于时间间隔或日志最大大小的轮转。
rotatelogs [ -l ] [ -L linkname ] [ -p program ] [ -f ] [ -D ] [ -t ] [ -v ] [ -e ] [ -c ] [ -n number-of-files ] logfile rotationtime|filesize(B|K|M|G) [ offset ]
-l
strftime(3)
格式化。-L
linkname导致从当前日志文件到指定链接名称创建一个硬链接。这可用于使用类似 tail -F linkname
的命令连续监视跨轮转的日志。
如果链接名称不是绝对路径,则它相对于 rotatelogs
的工作目录,当 rotatelogs
由服务器运行时,该目录是 ServerRoot
。
-p
programrotatelogs
将在每次打开新的日志文件时执行指定的程序。新打开文件的名称作为第一个参数传递给程序。如果在轮转后执行,则旧日志文件作为第二个参数传递。rotatelogs
不会等待指定的程序终止才能继续操作,也不会记录终止时返回的任何错误代码。生成的程序使用与 rotatelogs 本身相同的 stdin、stdout 和 stderr,并且还继承环境。-f
rotatelogs
启动后,而不是等待读取第一个日志文件条目(对于非繁忙站点,服务器启动到处理第一个请求之间可能存在相当大的延迟,这意味着关联的日志文件直到那时才“存在”,这会导致某些自动化日志工具出现问题)。-D
strftime(3)
格式化,而不仅仅是文件名。-t
-T
-v
-e
-c
-n number-of-files
-t
时,文件才会被截断。每次后续轮转都将始终以截断目标文件开始。对于没有 -t
和现有日志文件存在的基于大小的轮转,此选项可能会导致不直观的行为,例如初始日志条目被发送到“logfile.1”,并且“logfile.1”中的条目不会被保留,即使后面的“logfile.n”尚未被使用。logfile
日志文件的路径加基本名称。如果 logfile 包含任何 '%' 字符,则它被视为 strftime(3)
的格式字符串。否则,后缀 .nnnnnnnnnn 会自动添加,并且是秒数(除非使用 -t 选项)。两种格式都从当前时期的开始计算开始时间。例如,如果指定了 86400 的轮转时间,则从 strftime(3)
格式创建的小时、分钟和秒字段将全部为零,指的是当前 24 小时周期(午夜)的开始。
使用 strftime(3)
文件名格式化时,请确保日志文件格式具有足够的粒度,以便每次轮转日志时生成不同的文件名。否则,轮转将覆盖同一个文件,而不是开始一个新文件。例如,如果 logfile 是 /var/log/errorlog.%Y-%m-%d
,日志轮转为 5 兆字节,但同一天内两次达到 5 兆字节,则会生成相同的日志文件名,日志轮转将继续写入同一个文件。
如果日志文件不是绝对路径,则它相对于 rotatelogs
的工作目录,当 rotatelogs
由服务器运行时,该目录是 ServerRoot
。
rotationtime
filesize(B|K|M|G)
B
(字节)、K
(千字节)、M
(兆字节)或 G
(吉字节)。当指定时间和大小时,大小必须在时间之后给出。轮转将在达到时间或大小限制时发生。
offset
-300
的值。在大多数情况下,应使用 -l
而不是指定偏移量。CustomLog "|bin/rotatelogs /var/log/logfile 86400" common
这将创建文件 /var/log/logfile.nnnn,其中 nnnn 是日志名义上开始时的系统时间(此时间将始终是轮转时间的倍数,因此您可以将 cron 脚本与之同步)。在每个轮转时间结束时(此处为 24 小时后),将启动一个新的日志。
CustomLog "|bin/rotatelogs -l /var/log/logfile.%Y.%m.%d 86400" common
这将创建文件 /var/log/logfile.yyyy.mm.dd,其中 yyyy 是年份,mm 是月份,dd 是月份中的日期。日志将在每天午夜(本地时间)切换到一个新文件。
CustomLog "|bin/rotatelogs /var/log/logfile 5M" common
此配置将在日志文件达到 5 兆字节大小时轮转日志文件。
ErrorLog "|bin/rotatelogs /var/log/errorlog.%Y-%m-%d-%H_%M_%S 5M"
此配置将在错误日志文件达到 5 兆字节大小时轮转错误日志文件,并且日志文件名的后缀将以 errorlog.YYYY-mm-dd-HH_MM_SS
的形式创建。
CustomLog "|bin/rotatelogs -t /var/log/logfile 86400" common
这将创建文件 /var/log/logfile
,在启动时截断文件,然后每天截断一次文件。在这种情况下,预计一个单独的进程(例如 tail)将实时处理文件。
CustomLog "|bin/rotatelogs -T /var/log/logfile.%d 86400" common
如果服务器在月初启动(或重新启动),这将附加到 /var/log/logfile.01
。当在月初的第二天写入日志条目时,/var/log/logfile.02
将被截断,并且新条目将被添加到顶部。此示例保留大约 1 个月的日志,无需外部维护。
以下日志文件格式字符串替换应由所有 strftime(3)
实现支持,有关库特定扩展,请参阅 strftime(3)
手册页。
%A | 完整星期名称(本地化) |
%a | 3 个字符的星期名称(本地化) |
%B | 完整月份名称(本地化) |
%b | 3 个字符的月份名称(本地化) |
%c | 日期和时间(本地化) |
%d | 两位数的月份日期 |
%H | 两位数的小时(24 小时制) |
%I | 两位数的小时(12 小时制) |
%j | 三位数的年内日期 |
%M | 两位数的分钟 |
%m | 两位数的月份 |
%p | 12 小时制的上午/下午(本地化) |
%S | 两位数的秒 |
%U | 两位数的年内星期数(星期日为一周的第一天) |
%W | 两位数的年内星期数(星期一为一周的第一天) |
%w | 一位数的星期几(星期日为一周的第一天) |
%X | 时间(本地化) |
%x | 日期(本地化) |
%Y | 四位数的年份 |
%y | 两位数的年份 |
%Z | 时区名称 |
%% | 字面量 `%' |