Apache HTTP Server Version 2.4
rotatelogs
is a simple program for use in
conjunction with Apache's piped logfile feature. It supports
rotation based on a time interval or maximum size of the log.
rotatelogs
[ -l ]
[ -L linkname ]
[ -p program ]
[ -f ]
[ -t ]
[ -v ]
[ -e ]
[ -c ]
[ -n number-of-files ]
logfile
rotationtime|filesize(B|K|M|G)
[ offset ]
-l
strftime(3)
formatting with size-based
rotation.-L
linknameCauses a hard link to be made from the current logfile
to the specified link name. This can be used to watch
the log continuously across rotations using a command like
tail -F linkname
.
If the linkname is not an absolute
path, it is relative to rotatelogs
' working directory,
which is the ServerRoot
when
rotatelogs
is run by the server.
-p
programIf given, rotatelogs
will execute the specified
program every time a new log file is opened. The filename of the
newly opened file is passed as the first argument to the program. If
executing after a rotation, the old log file is passed as the second
argument.
rotatelogs
does not wait for the specified
program to terminate before continuing to operate, and will not log
any error code returned on termination.
The spawned program uses the same stdin, stdout, and stderr as rotatelogs itself, and also inherits the environment.
When two parameters are provided, under some conditions the parameters will have the same value. For example, if rotation is triggerd but the portions of the time and date incorporated into the log filename do not change across the rotation.
-f
rotatelogs
starts, instead of waiting for the
first logfile entry to be read (for non-busy sites, there may be
a substantial delay between when the server is started
and when the first request is handled, meaning that the
associated logfile does not "exist" until then, which
causes problems from some automated logging tools)-t
-R
-v
-e
-c
-n number-of-files
-t
is also provided. Every subsequent rotation will
always begin with truncation of the target file. For size based rotation without -t
and existing log files in place,
this option may result in unintuitive behavior such as initial log entries being sent to "logfile.1", and entries in "logfile.1" not being preserved
even if later "logfile.n" have not yet been used.
-T
logfile
The path plus basename of the logfile. If logfile
includes any '%' characters, it is treated as a format string for
strftime(3)
. Otherwise, the suffix
.nnnnnnnnnn is automatically added and is the time in
seconds (unless the -t option is used). Both formats compute the
start time from the beginning of the current period. For example,
if a rotation time of 86400 is specified, the hour, minute, and
second fields created from the strftime(3)
format will
all be zero, referring to the beginning of the current 24-hour
period (midnight).
When using strftime(3)
filename formatting,
be sure the log file format has enough granularity to produce
a different file name each time the logs are rotated. Otherwise
rotation will overwrite the same file instead of starting a new
one. For example, if logfile was
/var/log/errorlog.%Y-%m-%d
with log rotation at 5
megabytes, but 5 megabytes was reached twice in the same day, the
same log file name would be produced and log rotation would keep
writing to the same file.
If the logfile is not an absolute
path, it is relative to rotatelogs
' working directory,
which is the ServerRoot
when
rotatelogs
is run by the server.
rotationtime
filesize(B|K|M|G)
B
(Bytes), K
(KBytes), M
(MBytes)
or G
(GBytes).
When time and size are specified, the size must be given after the time. Rotation will occur whenever either time or size limits are reached.
offset
-300
for this argument.
In most cases, -l
should be used instead of specifying
an offset.
CustomLog "|bin/rotatelogs /var/log/logfile 86400" common
This creates the files /var/log/logfile.nnnn where nnnn is the system time at which the log nominally starts (this time will always be a multiple of the rotation time, so you can synchronize cron scripts with it). At the end of each rotation time (here after 24 hours) a new log is started.
CustomLog "|bin/rotatelogs -l /var/log/logfile.%Y.%m.%d 86400" common
This creates the files /var/log/logfile.yyyy.mm.dd where yyyy is the year, mm is the month, and dd is the day of the month. Logging will switch to a new file every day at midnight, local time.
CustomLog "|bin/rotatelogs -l /var/log/logfile.%Y.%m 86400" common
This creates the files /var/log/logfile.yyyy.mm where
yyyy is the year and mm is the month. Every day at midnight, rotation
will occur, including running programs specified with -p
.
Despite rotation ocurring, the filename will only change on the first
rotation of the month. Rotation on other days will continue to output file
and append to it.
CustomLog "|bin/rotatelogs /var/log/logfile 5M" common
This configuration will rotate the logfile whenever it reaches a size of 5 megabytes.
ErrorLog "|bin/rotatelogs /var/log/errorlog.%Y-%m-%d-%H_%M_%S 5M"
This configuration will rotate the error logfile whenever it
reaches a size of 5 megabytes, and the suffix to the logfile name
will be created of the form
errorlog.YYYY-mm-dd-HH_MM_SS
.
CustomLog "|bin/rotatelogs -t /var/log/logfile 86400" common
This creates the file /var/log/logfile, truncating the file at startup and then truncating the file once per day. It is expected in this scenario that a separate process (such as tail) would process the file in real time.
CustomLog "|bin/rotatelogs -R /var/log/logfile.%d 86400" common
If the server is started (or restarted) on the first of the month, this
appends to /var/log/logfile.01
. When a log entry is written on the
second of the month, /var/log/logfile.02
is truncated and new entries
will be added to the top. This example keeps approximately 1 months worth of
logs without external maintenance.
The following logfile format string substitutions should be
supported by all strftime(3)
implementations, see
the strftime(3)
man page for library-specific
extensions.
%A | full weekday name (localized) |
%a | 3-character weekday name (localized) |
%B | full month name (localized) |
%b | 3-character month name (localized) |
%c | date and time (localized) |
%d | 2-digit day of month |
%H | 2-digit hour (24 hour clock) |
%I | 2-digit hour (12 hour clock) |
%j | 3-digit day of year |
%M | 2-digit minute |
%m | 2-digit month |
%p | am/pm of 12 hour clock (localized) |
%S | 2-digit second |
%U | 2-digit week of year (Sunday first day of week) |
%W | 2-digit week of year (Monday first day of week) |
%w | 1-digit weekday (Sunday first day of week) |
%X | time (localized) |
%x | date (localized) |
%Y | 4-digit year |
%y | 2-digit year |
%Z | time zone name |
%% | literal `%' |