rotationlogs-管道记录程序以旋转 Apache 日志
rotatelogs
是一个简单程序,可与 Apache 的管道日志文件功能一起使用。它支持基于时间间隔或日志的最大大小的轮换。
Synopsis
rotatelogs [ -l ] [ -L linkname ] [ -p program ] [ -f ] [ -D ] [ -t ] [ -v ] [ -e ] [ -c ] [ -n number-of-files ] logfile rotationtime|filesize(B|K|M|G) [ offset ]
Options
-
-l
- 导致使用本地时间而不是 GMT 作为间隔或基于大小的旋转的
strftime(3)
格式的基础。
- 导致使用本地时间而不是 GMT 作为间隔或基于大小的旋转的
-
-L
链接名- 导致从当前日志文件到指定链接名称的硬链接。可以使用
tail -F linkname
之类的命令来连续观察日志,以观察旋转情况。
- 导致从当前日志文件到指定链接名称的硬链接。可以使用
如果链接名不是绝对路径,则它是相对于rotatelogs
'工作目录的,该目录是服务器运行rotatelogs
时的ServerRoot。
-
-p
程式- 如果指定了
rotatelogs
,它将在每次打开新的日志文件时执行指定的程序。新打开文件的文件名将作为第一个参数传递给程序。如果在轮换之后执行,则旧日志文件将作为第二个参数传递。rotatelogs
在 continue 操作之前不会 await 指定的程序终止,并且不会记录终止时返回的任何错误代码。生成的程序使用与 rotatelogs 相同的 stdin,stdout 和 stderr,并且还继承了环境。
- 如果指定了
-
-f
- 导致在
rotatelogs
启动后立即打开日志文件,而不是 await 读取第一个日志文件条目(对于非繁忙站点,在启动服务器与启动第一个请求之间可能会有相当大的延迟.已处理,这意味着关联的日志文件在此之前“不存在”,这会导致某些自动日志记录工具产生问题)
- 导致在
-
-D
- 如果日志文件尚不存在,则创建路径的父目录。这允许在路径中使用
strftime(3)
格式,而不仅仅是文件名。
- 如果日志文件尚不存在,则创建路径的父目录。这允许在路径中使用
-
-t
- 导致日志文件被截断而不是被旋转。当通过 tail 之类的命令实时处理日志时,并且不需要归档数据时,此功能很有用。没有在文件名中添加后缀,但是将使用包含'%'字符的格式字符串。
-
-v
- 在 STDERR 上产生详细的输出。输出包含配置解析的结果以及所有文件打开和关闭操作。
-
-e
- 回声登录到标准输出。当需要通过链中的其他工具实时进一步处理日志时,此功能很有用。
-
-c
- 为每个间隔创建日志文件,即使为空。
-
-n number-of-files
- 使用没有时间戳记的文件名的循环列表。使用-n 3,打开的一系列日志文件将是“ logfile”,“ logfile.1”,“ logfile.2”,然后覆盖“ logfile”。在 2.4.5 及更高版本中可用。
-
logfile
- 日志文件的路径和基本名称。如果日志文件包含任何'%'字符,则将其视为
strftime(3)
的格式字符串。否则,后缀.nnnnnnnnnn 会自动添加,并且是时间(以秒为单位)(除非使用-t 选项)。两种格式都从当前周期的开始计算开始时间。例如,如果指定了旋转时间 86400,则从strftime(3)
格式创建的小时,分钟和秒字段都将为零,这是指当前 24 小时周期的开始(午夜)。
- 日志文件的路径和基本名称。如果日志文件包含任何'%'字符,则将其视为
使用strftime(3)
文件名格式时,请确保日志文件格式具有足够的粒度,以便每次旋转日志时都产生不同的文件名。否则,轮换将覆盖同一文件,而不是启动一个新文件。例如,如果日志文件是/var/log/errorlog.%Y-%m-%d
,日志旋转为 5 兆字节,但同一天两次达到 5 兆字节,则将生成相同的日志文件名,并且日志旋转将 continue 写入同一文件。
如果日志文件不是绝对路径,则它相对于rotatelogs
的工作目录,当rotatelogs
由服务器运行时,该目录为ServerRoot。
-
rotationtime
- 日志文件轮换之间的时间(以秒为单位)。旋转发生在此间隔的开始。例如,如果轮换时间为 3600,则日志文件将在每小时开始时轮换;如果轮转时间为 86400,则日志文件将在每晚的午夜旋转。 (如果在间隔时间内未记录任何数据,则不会创建任何文件.)
-
filesize(B|K|M|G)
- 最大文件大小,后面紧跟字母
B
(字节),K
(千字节),M
(兆字节)或G
(千兆字节)之一。
- 最大文件大小,后面紧跟字母
指定时间和大小后,必须在时间之后给出大小。只要达到时间或大小限制,旋转就会发生。
-
offset
- 从 UTC 偏移的分钟数。如果省略,则假定为零,并使用 UTC。例如,要使用 UTC -5 时区中的本地时间,请为此参数指定值
-300
。在大多数情况下,应使用-l
而不是指定偏移量。
- 从 UTC 偏移的分钟数。如果省略,则假定为零,并使用 UTC。例如,要使用 UTC -5 时区中的本地时间,请为此参数指定值
Examples
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 MB 时,此配置都会对其进行轮换。
ErrorLog "|bin/rotatelogs /var/log/errorlog.%Y-%m-%d-%H_%M_%S 5M"
每当错误日志文件的大小达到 5 MB 时,此配置都会对其进行轮换,并且日志文件名的后缀将以errorlog.YYYY-mm-dd-HH_MM_SS
的形式创建。
CustomLog "|bin/rotatelogs -t /var/log/logfile 86400" common
这将创建文件/ var/log/logfile,在启动时将其截断,然后每天将其截断一次。在这种情况下,预计将有单独的进程(例如 tail)将实时处理文件。
Portability
所有strftime(3)
实现都应支持以下日志文件格式的字符串替换,有关库特定的扩展,请参见strftime(3)
手册页。
%A |
工作日全名(本地化) |
%a |
3-字符的工作日名称(本地化) |
%B |
完整的月份名称(本地化) |
%b |
3-字符月份名称(本地化) |
%c |
日期和时间(本地化) |
%d |
月份的 2 位数字 |
%H |
2 位数小时(24 小时制) |
%I |
2 位数字小时(12 小时制) |
%j |
一年中的 3 位数字 |
%M |
2-digit minute |
%m |
2-digit month |
%p |
12 小时制的上午/下午(本地化) |
%S |
2-digit second |
%U |
一年中的 2 位(星期几的第一天) |
%W |
一年中的 2 位(星期一的第一天) |
%w |
1 位数字的工作日(星期日的第一天) |
%X |
time (localized) |
%x |
date (localized) |
%Y |
4-digit year |
%y |
2-digit year |
%Z |
时区名称 |
%% |
literal `%' |