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 ]
[ -D ]
[ -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
programrotatelogs
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.-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)-D
strftime(3)
formatting to be used in the path and not just the filename.-t
-T
-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.
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 /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 -T /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 `%' |