转自:
fedora使用的syslogd叫做rsyslogd,配置文件为/etc/rsyslog.conf,在该文件中指定了syslog记录日志的信息来源、信息类型以及保存位置。下面是fedora11下此文件内容的一个实例。
- # Log all kernel messages to the console.
- # Logging much else clutters up the screen.
- # kern.* /dev/console
- # Log anything (except mail) of level info or higher.
- # Don't log private authentication messages!
- # 把除邮件、授权和定时任务以外的其他info级别的信息
记录到/var/log/messages日志文件中 - * .info;mail.none;authpriv.none;cron.none /var/log/messages
- # The authpriv file has restricted access.
- # 把所有授权信息记录到/var/log/secure日志文件中
- authpriv.* /var/log/secure
- # Log all the mail messages in one place.
- # 把所有级别的邮件信息记录到/var/log/maillog日志文件中
- mail.* -/var/log/maillog
- # Log cron stuff
- # 把所有级别的定时任务信息记录到/var/log/cron日志文件中
- cron.* /var/log/cron
- # Everybody gets emergency messages
- # 把emerg级别的信息发送给所有登录用户
- * .emerg *
- # Save news errors of level crit and higher in a special file.
- uucp,news.crit /var/log/spooler
- # Save boot messages also to boot.log
- # 把所有的系统启动信息记录到/var/log/boot.log日志文件中
- local7.* /var/log/boot.log
该文件以井号"#"为注释符,其中每一行的语法格式为:
- [消息来源.消息级别] [动作]
其中,[消息来源.消息级别]和[动作]之间以Tab键进行分隔,同一行syslog配置中允许出现多个[消息来源.消息级别],但必须要使用分号";"进行分隔,例如:
- mail.*; cron.* /var/log/test.log
其中消息来源表示发出消息的子系统,如表12.3列出了syslog中的所有消息来源。
表12.3 syslog消息来源及说明
消 息 来 源 |
说 明 |
消 息 来 源 |
说 明 |
authpriv |
安全/授权信息 |
|
邮件子系统 |
cron |
定时任务 |
news |
网络新闻子系统 |
daemon |
守护进程 |
syslog |
syslogd内部产生的信息 |
ftp |
ftp守护进程 |
user |
一般用户级别信息 |
kern |
内核信息 |
uucp |
UUCP子系统 |
lpr |
打印机子系统 |
local0-local7 |
本地用户 |
优先级代表消息的紧急程度,如表12.4所示按级别由高到低列出了syslog的所有消息级别及说明。
表12.4 syslog消息级别及说明
消 息 级 别 |
说 明 |
消 息 级 别 |
说 明 |
emerg |
最紧急的消息 |
warning |
警告消息 |
alert |
紧急消息 |
notice |
普通但重要的消息 |
crit |
重要消息 |
info |
通知性消息 |
err |
出错消息 |
debug |
调试级的消息——消息量最多 |
Syslog消息级别是向上匹配的,也就是说如果指定了一个消息级别,那么指定级别及比该指定级别更高级的消息都会被包括进去。例如,warning表示所有大于或者等于warning级别的消息都会被处理,包括emerg、alert、crit、err和warning。如果指定的是debug级别,那么所有级别的消息都会被处理。消息级别越低,消息的数量就越多。如果只想匹配某个确定级别的消息,而不希望包括更高级别的消息,可以使用等号"="进行指定。例如希望处理cron的notice级别的消息:
- cron.=notice /var/log/test.log
除此之外,syslog还支持两个特殊的消息级别关键字:"*"和none。其中"*"表示匹配所有来源或级别的消息;none表示忽略所有消息。
[动作]是用于指定消息的处理方式。Syslog支持把消息保存到日志文件中、发送给指定的用户、显示在终端上或者通过网络发送到另外一台syslog服务器上进行处理。如表12.5中列出了Syslog中所有可用的动作及其说明。
表12.5 syslog动作说明
动 作 |
说 明 |
文件名 |
将消息保存到指定的文件中 |
@主机名或IP地址 |
转发消息到另外一台syslog服务器上进行处理 |
* |
把消息发送到所有用户的终端上 |
/dev/console |
把消息发送到本地主机的终端上 |
| 程序 |
通过管道把消息重定向到指定的程序 |
用户名列表 |
把消息发送给指定的用户, 用户名以逗号“,”进行分隔 |
syslog函数的作用是“send messages to the system logger“.syslog函数发送的信息会被rsyslogd按照其配置问题件(/etc/rsyslogd.conf)进行解析,从而发送到不同的log文件中。
例子1:
- #include <stdio.h>
- #include <syslog.h>
- void main()
- {
- syslog(LOG_INFO, "test-%m\n");
- }
记录到/var/log/messages日志文件中”,所以我们会在/var/log/messages的末尾看到如下记录:
Feb 1 10:51:00 localhost 1test: test-Success
例子2:
- #include <stdio.h>
- #include <syslog.h>
- void main()
- {
- syslog(LOG_EMERG, "emrg-%m\n");
- }
root用户:
[root@localhost syslog]# ./1test
Message from syslogd@localhost at Feb 1 11:10:17 ...
1test: emrg-Success
普通用户jinxin:
[jinxin@localhost ~]$
Message from syslogd@localhost at Feb 1 11:10:17 ...
1test: emrg-Success
例子3:
- #include <stdio.h>
- #include <syslog.h>
- void main()
- {
- syslog(LOG_INFO|LOG_AUTHPRIV, "authpriv-%m\n");
- }
/var/log/secure的末尾看到如下记录:
Feb 1 11:15:01 localhost 1test: authpriv-Success