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)格式的基础。
  • -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而不是指定偏移量。

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工作日全名(本地化)
%a3-字符的工作日名称(本地化)
%B完整的月份名称(本地化)
%b3-字符月份名称(本地化)
%c日期和时间(本地化)
%d月份的 2 位数字
%H2 位数小时(24 小时制)
%I2 位数字小时(12 小时制)
%j一年中的 3 位数字
%M2-digit minute
%m2-digit month
%p12 小时制的上午/下午(本地化)
%S2-digit second
%U一年中的 2 位(星期几的第一天)
%W一年中的 2 位(星期一的第一天)
%w1 位数字的工作日(星期日的第一天)
%Xtime (localized)
%xdate (localized)
%Y4-digit year
%y2-digit year
%Z时区名称
%%literal `%'