Chinaunix首页 | 论坛 | 博客
  • 博客访问: 23211
  • 博文数量: 10
  • 博客积分: 400
  • 博客等级: 下士
  • 技术积分: 120
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-27 09:17
文章分类

全部博文(10)

文章存档

2009年(10)

我的朋友

分类: LINUX

2009-09-01 23:26:05

1. what

    syslog是UNIX系统提供的一种日志记录方法(RFC3164)。syslog本身是一种服务器,程序中通过syslog函数记录的信息都会被发送到该服务器,服务器根据配置决定此信息是否记录,以及记录到磁盘文件、远程syslog服务器还是远程邮件服务器等。syslog使得系统内所有的应用程序都能以统一的方式记录日志,为系统日志的统一审计提供了方便。

2. sysklogd

    linux提供了sysklogd的syslog服务器的实现,可以记录本机日志,也可以接收和转发外部日志。sysklogd包括2个程序:syslogd & klogd。
 
 2.1 syslogd
 
    syslogd通过域socket(AF_UNIX)可以直接接收应用程序和远程的日志,syslog()函数记录的日志都会被发送到此域socket,socket文件为/dev/log。
 
 2.2 klogd
 
    klogd用于接收内核日志,然后发送到syslogd。

3. syslog()

    syslog函数的头文件及原型如下:

#include <syslog.h>
void syslog(int priority, char *format, ...);

 
    syslog.h位于uclibc/include/sys/目录下;
    syslog()位于uclibc/libc/misc/syslog/syslog.c中。
 
 3.1 priority
 
    syslog()的参数priority是facility与level的组合,后续参数与printf同。
    facility参数用来指定何种程序在记录log信息,默认为LOG_USER。

/* facility codes */
#define    LOG_KERN     (0<<3)    /* kernel messages */
#define    LOG_USER     (1<<3)    /* random user-level messages */
#define    LOG_MAIL     (2<<3)    /* mail system */
#define    LOG_DAEMON   (3<<3)    /* system daemons */
#define    LOG_AUTH     (4<<3)    /* security/authorization messages */
#define    LOG_SYSLOG   (5<<3)    /* messages generated internally by syslogd */
#define    LOG_LPR      (6<<3)    /* line printer subsystem */
#define    LOG_NEWS     (7<<3)    /* network news subsystem */
#define    LOG_UUCP     (8<<3)    /* UUCP subsystem */
#define    LOG_CRON     (9<<3)    /* clock daemon */
#define    LOG_AUTHPRIV (10<<3)   /* security/authorization messages (private) */
#define    LOG_FTP      (11<<3)   /* ftp daemon */

 
   level参数用于指定信息的重要性,共分8个等级:
 

#define    LOG_EMERG    0    /* system is unusable */
#define    LOG_ALERT    1    /* action must be taken immediately */
#define    LOG_CRIT     2    /* critical conditions */
#define    LOG_ERR      3    /* error conditions */
#define    LOG_WARNING  4    /* warning conditions */
#define    LOG_NOTICE   5    /* normal but significant condition */
#define    LOG_INFO     6    /* informational */
#define    LOG_DEBUG    7    /* debug-level messages */

 

4. /etc/syslog.conf

    /etc/syslog.conf为syslog服务器的配置文件,用于指定服务器需要记录哪些类型和级别的log以及将这些log记录到何处。
 
 4.1 配置格式
    配置文件为文本文件,每行配置分两个字段,第一字段是说明要记录哪类日志,第二字段是说明日志存放位置,可以是本地文件,也可以是远程服务器。
    第一字段:"facility.priority",可以同时定义多个,中间用逗号","或分号";"分隔。
        facility为上述facility后半部的小写(eg. kern, user, mail etc.),也可以用"*"表示所有facility类型;
        priority为上述priority后半部的小写(eg. err, info),也可以用"*"表示所有priority类型,比此级别高的日志都会被记录,用none表示不记录,若不记录某级别的日志,在该级别前加"!"。
    第二字段:若为本地文件,即为本地文件名;若为远程服务器,格式为"@address",其中@表示进行远程记录,日志服务器的端口为UDP 514,address可以是IP地址,也可以是域名。第二字段前面加"-"表示不立即写入log文件。
 
 4.2 配置实例
    (1) kern.*  @1.2.3.4
        将所有级别的内核日志发送到远程syslog服务器。
    (2) *.* /var/log/messages
        将所有类型所有级别的日志记录到/var/log/messages文件中。
    (3) *.info;mail.none;auth.!err   -/var/log/messages
        将所有info级别以上的信息记录到/var/log/messages文件中,但不包括mail信息,以及facility=auth,priority>=err的信息,并且记录的信息不立即写入该文件中。
 

5. log format

    月 日 时:分:秒 主机名 标志 日志内容
 
    通常,syslog()函数发送给syslog服务器的日志信息前都加上了类型与级别信息,并用<>括起来,syslogd又会将这些信息进行重新格式化为上述形式。
 
 
 

6. Reference

[1] syslog的编程和配置.
[3] 如何将Linux主机设置成syslog服务器.http://blog.csdn.net/flagonxia/archive/2009/05/01/4142546.aspx

 

 

阅读(657) | 评论(0) | 转发(0) |
0

上一篇:SIP跟踪

下一篇:syslogd in Busybox

给主人留下些什么吧!~~