9.5.1. Principle and Mechanism
Starting with Debian Bookworm, the rsyslog package is no longer installed by default, which in the past provided the default logging functionality. Instead, the log is provided by systemd
's journal, which can be accessed by the journalctl(5) command.
There are situations, where it is necessary or desired to install rsyslog, though, e.g. to send all log messages to a central server. After installation, the rsyslogd
daemon is responsible for collecting service messages coming from applications and the kernel, then dispatching them into log files (usually stored in the /var/log/
directory). It obeys the /etc/rsyslog.conf
configuration file.
Each log message is associated with an application subsystem (called “facility” in the documentation):
auth
and authpriv
: for authentication;
cron
: comes from task scheduling services, cron
and atd
;
daemon
: affects a daemon without any special classification (DNS, NTP, etc.);
ftp
: concerns the FTP server;
kern
: message coming from the kernel;
lpr
: comes from the printing subsystem;
mail
: comes from the e-mail subsystem;
news
: Usenet subsystem message (especially from an NNTP — Network News Transfer Protocol — server that manages newsgroups);
syslog
: messages from the syslogd
server, itself;
user
: user messages (generic);
uucp
: messages from the UUCP server (Unix to Unix Copy Program, an old protocol notably used to distribute e-mail messages);
local0
to local7
: reserved for local use.
Each message is also associated with a priority level. Here is the list in decreasing order:
emerg
: “Help!” There is an emergency, the system is probably unusable.
alert
: hurry up, any delay can be dangerous, action must be taken immediately;
crit
: conditions are critical;
err
: error;
warn
: warning (potential error);
notice
: conditions are normal, but the message is important;
info
: informative message;
debug
: debugging message.
9.5.2. The Configuration File
The syntax of the /etc/rsyslog.conf
file is detailed in the rsyslog.conf(5) manual page, but there is also HTML documentation available in the rsyslog-doc package (/usr/share/doc/rsyslog-doc/html/index.html
). The overall principle is to write “selector” and “action” pairs. The selector defines all relevant messages, and the action describes how to deal with them.
9.5.2.1. Syntax of the Selector
The selector is a semicolon-separated list of subsystem.priority
pairs (example: auth.notice;mail.info
). An asterisk may represent all subsystems or all priorities (examples: *.alert
or mail.*
). Several subsystems can be grouped, by separating them with a comma (example: auth,mail.info
). The priority indicated also covers messages of equal or higher priority; thus auth.alert
indicates the auth
subsystem messages of alert
or emerg
priority. Prefixed with an exclamation point (!), it indicates the opposite, in other words the strictly lower priorities; auth.!notice
, thus, indicates messages issued from auth
, with info
or debug
priority. Prefixed with an equal sign (=), it corresponds to precisely and only the priority indicated (auth.=notice
only concerns messages from auth
with notice
priority).
Each element in the list on the selector overrides previous elements. It is thus possible to restrict a set or to exclude certain elements from it. For example, kern.info;kern.!err
means messages from the kernel with priority between info
and warn
. The none
priority indicates the empty set (no priorities), and may serve to exclude a subsystem from a set of messages. Thus, *.crit;kern.none
indicates all the messages of priority equal to or higher than crit
not coming from the kernel.
9.5.2.2. Syntax of Actions
The various possible actions are:
add the message to a file (example: /var/log/messages
);
send the message to a remote syslog
server (example: @log.falcot.com
);
send the message to an existing named pipe (example: |/dev/xconsole
);
send the message to one or more users, if they are logged in (example: root,rhertzog
);
send the message to all logged in users (example: *
);
write the message in a text console (example: /dev/tty8
).