<-
Apache > HTTP 服务器 > 文档 > 版本 2.4 > 程序

rotatelogs - 用于轮转 Apache 日志的管道日志程序

可用语言:  en  |  fr  |  ko  |  tr 

rotatelogs 是一个简单的程序,用于与 Apache 的管道日志文件功能结合使用。它支持基于时间间隔或日志最大大小的轮转。

Support Apache!

另请参阅

top

概要

rotatelogs [ -l ] [ -L linkname ] [ -p program ] [ -f ] [ -D ] [ -t ] [ -v ] [ -e ] [ -c ] [ -n number-of-files ] logfile rotationtime|filesize(B|K|M|G) [ offset ]

top

选项

-l
导致使用本地时间而不是 GMT 作为间隔的基准,或者在基于大小的轮转中使用 strftime(3) 格式化。
-L linkname

导致从当前日志文件到指定链接名称创建一个硬链接。这可用于使用类似 tail -F linkname 的命令连续监视跨轮转的日志。

如果链接名称不是绝对路径,则它相对于 rotatelogs 的工作目录,当 rotatelogs 由服务器运行时,该目录是 ServerRoot

-p program
如果给出,rotatelogs 将在每次打开新的日志文件时执行指定的程序。新打开文件的名称作为第一个参数传递给程序。如果在轮转后执行,则旧日志文件作为第二个参数传递。rotatelogs 不会等待指定的程序终止才能继续操作,也不会记录终止时返回的任何错误代码。生成的程序使用与 rotatelogs 本身相同的 stdin、stdout 和 stderr,并且还继承环境。
-f
导致日志文件立即打开,即 rotatelogs 启动后,而不是等待读取第一个日志文件条目(对于非繁忙站点,服务器启动到处理第一个请求之间可能存在相当大的延迟,这意味着关联的日志文件直到那时才“存在”,这会导致某些自动化日志工具出现问题)。
-D
如果日志文件将放置在其中的路径的父目录不存在,则创建它们。这允许在路径中使用 strftime(3) 格式化,而不仅仅是文件名。
-t
导致日志文件被截断而不是轮转。当日志被类似 tail 的命令实时处理,并且不需要存档数据时,这很有用。不会向文件名添加后缀,但是包含 '%' 字符的格式字符串将被尊重。
-T
导致除初始日志文件之外的所有文件在打开时被截断。当格式字符串包含某些会循环的东西时,例如月份中的日期,这很有用。在 2.4.56 及更高版本中可用。
-v
在 STDERR 上生成详细输出。输出包含配置解析的结果,以及所有文件打开和关闭操作。
-e
将日志回显到 stdout。当日志需要通过链中的另一个工具实时进一步处理时,这很有用。
-c
为每个间隔创建日志文件,即使为空。
-n number-of-files
使用没有时间戳的文件名的循环列表。此选项在启动和轮转期间覆盖日志文件。使用 -n 3,打开的日志文件系列将是“logfile”、“logfile.1”、“logfile.2”,然后覆盖“logfile”。
当此程序第一次打开“logfile”时,只有在也提供 -t 时,文件才会被截断。每次后续轮转都将始终以截断目标文件开始。对于没有 -t 和现有日志文件存在的基于大小的轮转,此选项可能会导致不直观的行为,例如初始日志条目被发送到“logfile.1”,并且“logfile.1”中的条目不会被保留,即使后面的“logfile.n”尚未被使用。
在 2.4.5 及更高版本中可用。
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
日志文件轮转之间的时间(以秒为单位)。轮转发生在该间隔的开始。例如,如果轮转时间为 3600,则日志文件将在每小时的开始轮转;如果轮转时间为 86400,则日志文件将在每晚午夜轮转。(如果在间隔期间没有记录数据,则不会创建文件。)
filesize(B|K|M|G)
最大文件大小,后面紧跟一个字母 B(字节)、K(千字节)、M(兆字节)或 G(吉字节)。

当指定时间和大小时,大小必须在时间之后给出。轮转将在达到时间或大小限制时发生。

offset
与 UTC 的分钟偏移量。如果省略,则假定为零,并使用 UTC。例如,要在 UTC -5 小时的时区使用本地时间,请为此参数指定 -300 的值。在大多数情况下,应使用 -l 而不是指定偏移量。
top

示例

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 个月的日志,无需外部维护。

top

可移植性

以下日志文件格式字符串替换应由所有 strftime(3) 实现支持,有关库特定扩展,请参阅 strftime(3) 手册页。

%A完整星期名称(本地化)
%a3 个字符的星期名称(本地化)
%B完整月份名称(本地化)
%b3 个字符的月份名称(本地化)
%c日期和时间(本地化)
%d两位数的月份日期
%H两位数的小时(24 小时制)
%I两位数的小时(12 小时制)
%j三位数的年内日期
%M两位数的分钟
%m两位数的月份
%p12 小时制的上午/下午(本地化)
%S两位数的秒
%U两位数的年内星期数(星期日为一周的第一天)
%W两位数的年内星期数(星期一为一周的第一天)
%w一位数的星期几(星期日为一周的第一天)
%X时间(本地化)
%x日期(本地化)
%Y四位数的年份
%y两位数的年份
%Z时区名称
%%字面量 `%'

可用语言:  en  |  fr  |  ko  |  tr 

top

评论

注意
这不是问答部分。此处放置的评论应指向有关改进文档或服务器的建议,如果它们被实施或被认为无效/主题无关,可能会被我们的版主删除。有关如何管理 Apache HTTP Server 的问题应发送到我们的 IRC 频道 #httpd(在 Libera.chat 上),或发送到我们的 邮件列表