Syslog已被许多日志函数采纳,它用在许多保护措施中——任何程序都可以通过syslog纪录事件。Syslog可以纪录系统事件,可以写到一个文件或设备中,或给用户发送一个信息。它能纪录本地事件或通过网络纪录另一个主机上的事件。Syslog设备依据两个重要的文件:/etc/syslogd(守护进程)和/etc/syslog.conf配置文件,习惯上,多数syslog信息被写到/var/adm或/var/log目录下的信息文件中(messages.*)。一个典型的syslog纪录包括生成程序的名字和一个文本信息。它还包括一个设备和一个优先级范围(但不在日之中出现)。linux中常见的日志系统有syslog和syslog-ng(新版的日志系统,有开源版和商业版的)
syslog服务:
 syslogd: 系统,非内核产生的信息
 klogd:内核,专门负责记录内核产生的日志信息
 kernel --> 物理终端(/dev/console) --> /var/log/dmesg
 # dmesg
 # cat /var/log/dmesg
 用dmesg查看日志和cat查看日志的格式大体相同,都能达到同样的目的
 
周期性日志滚动(日志切割)脚本/etc/cron.daily/logrodate
 messages messages.1 messages.2 messages.3
 /sbin/init
 /var/log/messages: 系统标准错误日志信息;非内核产生引导信息;各子系统产生的信息;
 /var/log/maillog: 邮件系统产生的日志信息;
 /var/log/secure:

一、 配置syslog守护进程

syslog是Linux系统默认的日志守护进程。默认的syslog配置文件是/etc/syslog.conf文件。syslog守护进程是可配置的,它允许人们为每一种类型的系统信息精确地指定一个存放地点。现在,我们先看看syslog.conf文件的配置行格式(这个文件里的每一个配置行都是同样的格式),然后再看一个完整的syslog配置文件。syslog配置行的格式如下所示:

mail.*/var/log/mail

这一行由两个部分组成。第一个部分是一个或多个“选择条件”;上例中的选择条件是“mail”。选择条件后面跟一些空格字符,然后是一个“操作动作”;上例中的操作动作是:/var/log/mail

1选择条件

选择条件本身分为两个字段,之间用一个小数点(.)分隔。前一字段是一项服务,后一字段是一个优先级。选择条件其实是对消息类型的一种分类,这种分类便于人们把不同类型的消息发送到不同的地方。在同一个syslog配置行上允许出现一个以上的选择条件,但必须用分号(;)把它们分隔开。上面给出的例子里只有一个选择条件“mail”。大家可以在我们后面给出的那个完整的syslog配置文件示例里看到同时有多个选择条件的配置行。表1列出了绝大多数Linux操作系统变体都可以识别的选择条件。
配置文件定义格式为: facility.priority        action
 facility,可以理解为日志的来源或设备目前常用的facility有以下几种:
    auth         # 认证相关的
    authpriv     # 权限,授权相关的
    cron         # 任务计划相关的
    daemon       # 守护进程相关的
    kern         # 内核相关的
    lpr          # 打印相关的
    mail         # 邮件相关的
    mark         # 标记相关的
    news         # 新闻相关的
    security    # 安全相关的,与auth 类似 
    syslog      # syslog自己的
    user        # 用户相关的
    uucp        # unix to unix cp 相关的
    local0 到 local7  # 用户自定义使用
    *           # *表示所有的facility

2 优先级

优先级是选择条件的第二个字段,它代表消息的紧急程度。对一个应用程序来说,它发出的哪些消息属于哪一种优先级是由当初编写它的程序员决定的,应用程序的使用者只能接受这样的安排——除非打算重新编译系统应用程序。表2按严重程度由低到高的顺序列出了所有可能的优先级。

不同的服务类型有不同的优先级,数值较大的优先级涵盖数值较小的优先级。如果某个选择条件只给出了一个优先级而没有使用任何优先级限定符,对应于这个优先级的消息以及所有更紧急的消息类型都将包括在内。比如说,如果某个选择条件里的优先级是“warning”,它实际上将把“warning”、“err”、“crit”、“alert”和“emerg”都包括在内。
priority(log level)日志的级别,一般有以下几种级别(从低到高)
    debug           # 程序或系统的调试信息
    info            # 一般信息
    notice          # 不影响正常功能,需要注意的消息
    warning/warn    # 可能影响系统功能,需要提醒用户的重要事件
    err/error       # 错误信息
    crit            # 比较严重的
    alert           # 必须马上处理的
    emerg/panic     # 会导致系统不可用的
    *               # 表示所有的日志级别
    none            # 跟* 相反,表示啥也没有

3优先级限定符

syslog允许人们使用三种限定符对优先级进行修饰:星号(*)、等号(=)和叹号(!)。熟悉规则表达式的读者应该对这三种限定符不会感到陌生。星号(*)的含义是“把本项服务生成的所有日志消息都发送到操作动作指定的地点”。就像它在规则表达式里的作用一样,星号代表“任何东西”。在前面给出的例子里,“mail.*”将把所有优先级的消息都发送到操作动作指定的/var/log/mail文件里。使用“*”限定符与使用“debug”优先级的效果完全一样,后者也将把所有类型的消息发送到指定地点。

等号(=)的含义是“只把本项服务生成的本优先级的日志消息都发送到操作动作指定的地点”。比如说,可以用“=”限定符只发送调试消息而不发送其他更紧急的消息(这将为应用程序减轻很多负担)。当你只需要发送特定优先级别的消息时,就要使用等号限定符。

就像它在编程时的用法一样,等号意味着等于且仅等于。叹号(!)的含义是“把本项服务生成的所有日志消息都发送到操作动作指定的地点,但本优先级的消息不包括在内”。比如说,这条syslog配置行将把除info优先级以外的所有消息发送到/var/log/mail文件里:
mail.*;mail.!info/var/log/mail

在这个例子里,“mail.*”将发送所有的消息,但“mail.!info”却把info优先级的消息排除在外。就像它在编程时的用法一样,叹号意味着“非”。

4 操作动作

日志信息可以分别记录到多个文件里,还可以发送到命名管道、其他程序甚至另一台机器。syslog配置文件并不复杂,既容易阅读又容易操作使用。这个文件里的注释都非常有用,应该好好读读它们
 action(动作)日志记录的位置
    系统上的绝对路径    # 普通文件 如: /var/log/xxx
    |                   # 管道  通过管道送给其他的命令处理
    终端              # 终端   如:/dev/console
    @HOST               # 远程主机 如: @10.0.0.1     
    用户              # 系统用户 如: root
    *                   # 登录到系统上的所有用户,一般emerg级别的日志是这样定义的

定义格式例子:
mail.info   /var/log/mail.log # 表示将mail相关的,级别为info及
                              # info以上级别的信息记录到/var/log/mail.log文件中
auth.=info  @10.0.0.1         # 表示将auth相关的,基本为info的信息记录到10.0.0.1主机上去
                              # 前提是10.0.0.1要能接收其他主机发来的日志信息
user.!=error                  # 表示记录user相关的,不包括error级别的信息
user.!error                   # 与user.error相反
*.info                        # 表示记录所有的日志信息的info级别
mail.*                        # 表示记录mail相关的所有级别的信息
*.*                           # 你懂的.
cron.info;mail.info           # 多个日志来源可以用";" 隔开
cron,mail.info                # 与cron.info;mail.info 是一个意思
mail.*;mail.!=info            # 表示记录mail相关的所有级别的信息,但是不包括info级别的