G. Pape
runit
svlogd - runit’s service logging daemon
svlogd [-tv] [-r c] [-R
xyz] [-l n] [-b n] logs
logs consists of one or more arguments,
each specifying a directory.
svlogd continuously reads log data from its
standard input, optionally filters log messages, and writes the data to
one or more automatically rotated logs.
Recent log files can automatically
be processed by an arbitrary processor program when they are rotated, and
svlogd can be told to alert selected log messages to standard error.
svlogd
runs until it sees end-of-file on standard input or is sent a TERM signal,
see below.
A log directory log contains some number of old
log files, and the current log file current. Old log files have a file name
starting with @ followed by a precise timestamp (see tai64n(8)), indicating
when current was rotated and renamed to this file.
A log directory additionally
contains the lock file lock, maybe state and newstate, and optionally the
file config. svlogd creates necessary files if they don’t exist.
If svlogd
has trouble opening a log directory, it prints a warning, and ignores this
log directory. If svlogd is unable to open all log directories given at
the command line, it exits with an error. This can happen on start-up or
after receiving a HUP signal.
svlogd appends selected log
messages to the current log file. If current has size bytes or more size
(or there is a new-line within the last len of size bytes) current is rotated:
svlogd closes current, changes permission of current to 0755, renames current
to @timestamp.s, and starts with a new empty current. If svlogd sees num
or more old log files in dir, it removes the oldest.
If svlogd
is told to process recent log files, it saves current to @timestamp.u, feeds
@timestamp.u through ‘‘sh -c "processor"’’ and writes the output to @timestamp.t.
If the processor finishes successfully, @timestamp.u is deleted and @timestamp.t
is renamed to @timestamp.s, otherwise @timestamp.t is deleted and the processor
is started again. svlogd also saves any output that the processor writes
to file descriptor 5, and make that output available on file descriptor
4 when it runs processor on the next log file rotation.
A processor is run
in the background. If svlogd sees a previously started processor still running
when trying to start a new one for the same log, it blocks until the currently
running processor has finished successfully. Only the HUP signal works in
that situation. Note that this may block any program feeding its log data
to svlogd.
On startup, and after receiving a HUP signal, svlogd checks
for each log if the configuration file log/config exists, and if so, reads
the file line by line and adjusts configuration for log as follows:
If
the line is empty, less than two characters long, or starts with a ‘‘#’’, it
is ignored. A line of the form
- ssize
- sets the maximum file size of current
when svlogd should rotate the current log file to size bytes. Default is
1000000. If size is zero, svlogd doesn’t rotate log files. You should set
size to at least (2 * len).
- nnum
- sets the maximum number of old log files
svlogd should maintain to num. If svlogd sees more that num old log files
in log after log file rotation, it deletes the oldest one. Default is 10.
- !processor
- tells svlogd to feed each recent log file through processor
(see above) on log file rotation. By default log files are not processed.
If a line starts with a -, +, e, or E, svlogd matches the first len characters
of each log message against pattern and acts accordingly:
- -pattern
- the log
message is deselected.
- +pattern
- the log message is selected
- epattern
- log
messages matching pattern are printed to standard error.
- Epattern
- log messages
not matching pattern are printed to standard error.
Initially each line
is selected. Deselected log messages are discarded from log.
svlogd
matches a log message against the string pattern as follows:
pattern is
applied to the log message one character by one, starting with the first.
A character not a star (‘‘*’’) and not a plus (‘‘+’’) matches itself. A plus matches
the next character in pattern in the log message one or more times. A star
before the end of pattern matches any string in the log message that does
not include the next character in pattern. A star at the end of pattern
matches any string.
- -t
- timestamp. Prefix each selected line with a
precise timestamp (see tai64n(8)) when writing to log or to standard error.
- -r c
- replace. c must be a single character. Replace non-printable characters
in log messages with c. Characters are replaced before pattern matching
is applied.
- -R xyz
- replace charset. Additionally to non-printable characters,
replace all characters found in xyz with c (default ‘‘_’’).
- -l len
- line length.
Pattern matching applies to the first len characters of a log message only.
Default is 1000.
- -b buflen
- buffer size. Set the size of the buffer svlogd
uses when reading from standard input and writing to logs to buflen. Default
is 1024. buflen must be greater than len.
- -v
- verbose. Print verbose messages
to standard error.
If svlogd is sent a HUP signal, it closes and
reopens all logs, and updates their configuration according to log/config.
If svlogd has trouble opening a log directory, it prints a warning, and
discards this log directory. If svlogd is unable to open all log directories
given at the command line, it exits with an error.
If svlogd is sent a TERM
signal, or if it sees end-of-file on standard input, it stops reading standard
input, processes the data in the buffer, waits for all processor subprocesses
to finish if any, and exits 0 as soon as possible.
If svlogd is sent an
ALRM signal, it forces log file rotation for all logs with a non empty
current log file.
runsv(8), runsvstat(8), runsvctrl(8), runsvdir(8),
runsvchdir(8), runit(8), runit-init(8), multilog(8)
http://smarden.org/runit/
Gerrit Pape <pape@smarden.org>
Table of Contents