应用工具三:应用 rsyslogd 记录系统消息

  传统上,UNIX 程序会发送日志消息到标准错误。如果需要更的日志,则会把输出重定向到一个文件。为了克服上述方法的局限性,4.3BSD 引进了目前 Linux 使用的系统日志守护进程(rsyslogd; www.rsyslog.com)。这个守护进程负责监听日志消息,并把它们存储在 /var/log 目录中。除了提供日志记录功能,rsyslogd 还允许一台机器作为日志库服务于网络,并允许其它程序来处理特定的日志消息。

  /etc/rsyslog.conf 文件存储 rsyslogd 的配置信息。这个文件中的每一行都包含一个或多个由空格分隔的选择器(selector)和一个动作(action)。选择器定义消息的来源和类型,动作(action)则指定 rsyslogd 如何处理消息。rsyslog.conf 示例行如下(# 开始一个注释):
# Log all kernel messages to the console. 
kern.* /dev/console 
# Log all the mail messages in one place. 
mail.* /var/log/maillog 
# Log cron stuff 
cron.* /var/log/cron 
# Everybody gets emergency messages 
*.emerg * 
# Save boot messages also to boot.log 
local7.* /var/log/boot.log

  选择器

  选择器分为设施和优先级两部分,并由句点分隔。设施表示消息的来源。例如 kern 消息来自内核,mail 消息来自邮件子系统。

图 3 是 rsyslogd 使用的设施名称列表以及生成这些消息的系统:

  优先级表示消息的严重程度。图 4 为优先级的名字列表及其所表示的条件,按优先级顺序升序列出:

  一个选择器由单个设施和优先级组成,如 kern.info 会导致相应的动作应用到来自该设施具有该优先级或更高优先级(更迫切)的每条消息。使用 .= 指定单个优先级事项 ; 例如,kern.=info 表示把该动作应用到具有 info 优先级的内核消息。一个惊叹号指定一个不匹配的优先级。因此 kern.!info 将匹配比 info 优先级低的内核消息,kern.!=info 匹配非 info 优先级的内核消息。

  一个由分号分隔且包含多个选择器的行,只要有匹配的选择器执行该动作,该行每个选择器都会约束该匹配,后续选择器通常会收紧该约束。例如,mail.info;mail.!err 选择器匹配具有 debug、info、notice 或 warning 优先级的邮件子系统消息。

  可以用星号替换该选择器的每部分以匹配任何内容。该选择器每部分的 none 关键字表示不可能匹配。*.crit;kern.none 选择器会匹配所有关键或更高优先级的消息,来自内核的消息除外。