logfile:指定日志记录路径。可以加上一些修饰符,例如时间类的a.log_%Y.%m.%d将在a.log后追加年、月、日的后缀,如果没有给定任何后缀修饰,则自动加上".nnnnnnnn",表示创建时的时间点换算成距离1970-01-01 00:00:00的总秒数,也就是"date +%s",每次轮替时也会加上该后缀。如果使用相对路径,则相对于ServerRoot。
-n:使用数字作为后缀,且表示轮替的循环列表,例如"-n 3"表示一直在log.1、log.2、log.3这三个文件中记录,不会再创建任何新的日志文件。
rotationtime:指定轮替的时间间隔。将初始化为对应时间格式的起始值。例如,设置为3600时,将表示在每个小时的开头进行轮替,尽管当前时间点进入下一个小时可能只有5分钟,在5分钟之后也会进行一次轮替。
filesize:以大小方式轮替日志。
-l:使用本地时间计算时间间隔。默认使用的是UTC时间。
-f:强制立即打开日志文件。因为有些时候在启动httpd时,可能一小段时间内没有任何请求到达,因为没有日志需要记录,所以暂时不会创建日志文件。使用该选项可立即创建文件。
-t:截断日志而不再是轮替日志。这种情况下,不会再添加任何文件后缀。
-v:详细记录轮替或截断时的信息。
-e:将日志也输出到标准错误输出中。当日志还需要被其他工具处理时,该选项有用。
-c:每个时间间隔到了都创建新文件,尽管没有日志到达。而默认的情况下,在轮替时间间隔到达时,如果没有日志到达,将暂时不会创建日志,而是等待第一个请求到达后才创建。
关于更多的时间类修饰符,见下文。
注意,如果出现了轮替时文件名重复的情况,例如按照5M大小进行轮替,但文件名的格式为"a.log_%Y.%m.%d",如果同一天内出现了多次轮替,由于文件名相同,则会覆盖旧文件进行记录。
另外,rotatelogs只能对日志文件名本身使用时间类修饰符,无法将其设置在目录上,否则启动httpd时会因为无法打开日志而报错。
示例:以下使用了日志管道"|",表示记录的日志传递给后面的程序(此处为rotatelogs)进行处理。
每天轮替一次$ServerRoot/logs/mylog.nnnnnnnn,其中nnnnnnnn是当前时间换算成秒的数值。且在启动时不立即创建日志文件,轮替时也不立即创建新日志文件。
CustomLog "|/usr/local/apache/bin/rotatelogs logs/mylog 86400" common按照文件大小轮替。
CustomLog "|bin/rotatelogs /var/log/logfile 5M" common轮替错误日志,达到5M时就轮替。
ErrorLog "|bin/rotatelogs /var/log/errorlog.%Y-%m-%d-%H_%M_%S 5M"截断日志而非轮替日志。
CustomLog "|bin/rotatelogs -t /var/log/logfile 86400" common以下是日期类的修饰符。下面的cronolog工具也采用这同一套修饰符。
% %字符 n 换行 t 水平制表符 时间类: H 小时(00..23) I 小时(01..12) p 该locale下的AM或PM标识 M 分钟(00..59) S 秒 (00..61, which allows for leap seconds) X 该locale下时间表示符(e.g.: "15:12:47") Z 时区。若时区不能确定,则无意义 日期类: a 该locale下的工作日简名(e.g.: Sun..Sat) A 该locale下的工作日全名(e.g.: Sunday .. Satur-ay) b 该locale下的月份简称(e.g.: Jan .. Dec) B 该locale下的月份全称(e.g.: January .. December) c 该locale下的日期和时间(e.g.: "Sun Dec 15 14:12:47 GMT 1996") d 当月中的天数 (01 .. 31) j 当年中的天数 (001 .. 366) m 月数 (01 .. 12) U 当年中的星期数,以周日作为一周开始,其中第一周为首个含星期天的星期(00..53) W 当年中的星期数,以星期一作为一周的开始,其中第一周为首个含星期天的星期(00..53) w 工作日数(0 .. 6, 0表示星期天) x 该locale下的日期表示(e.g. "13/04/97") y 两位数的年份(00 .. 99) Y 四位数的年份(1970 .. 2038) 1.4 日志轮替:cronolog工具