syslogd(8) - Linux man page

来源:互联网 发布:惠普暗影精灵2新机优化 编辑:程序博客网 时间:2024/05/21 15:49

有两个syslog函数,一个是内核中的(man 2 syslog,sys_syslog),一个是libc的函数(man 3 syslog)。

前者int syslog(int type, char *bufp, int len);用于操作内核printk的打印缓存。封装的libc函数为klogctl。
http://linux.die.net/man/2/syslog
syslog, klogctl - read and/or clear kernel message ring buffer; set console_loglevel
它可以读、写、清除、设置内核打印缓冲区。

后者syslog和openlog等结合使用,输出的log被syslogd所监听到。
void openlog(const char *ident, int option, int facility);
void syslog(int priority, const char *format, ...);
openlog可以设置具体的log类别,如LOG_LOCAL0 through LOG_LOCAL7、LOG_DAEMON、LOG_KERN等。
如果想向对应的log文件写log,则在syslog的第一个参数priority使用如(LOG_CRIT | LOG_LOCAL7)等方式,打印到LOG_LOCAL7对应的log文件。

Sysklogd分syslogd和klogd。

syslogd支持 both internet and unix domain sockets。

klogd通过/proc/kmsg,或者通过sys_syslog读内核消息。syslogd是通过klogd来读取系统内核信息。
In Linux there are two potential sources of kernel log information: the /proc file system and the syscall (sys_syslog) interface, although ultimately they are one and the same. Klogd is designed to choose whichever source of information is the most appropriate. It does this by first checking for the presence of a mounted /proc file system. If this is found the /proc/kmsg file is used as the source of kernel log information. If the proc file system is not mounted klogd uses a system call to obtain kernel messages. The command line switch (-s) can be used to force klogd to use the system call interface as its messaging source.

1> 所有系统信息是输出到ring buffer中去的.dmesg所显示的内容也是从ring buffer中读取的.(printk)
2> LINUX系统中/etc/init.d/sysklogd会启动2个守护进程:Klogd&&Syslogd。不一定的。
3> klogd是负责读取内核信息的,有2种方式:
sys_syslog
klogd对/proc/kmsg进行读取
4> Klogd的输出结果会传送给syslogd进行处理,syslogd会根据/etc/syslog.conf的配置把log信息输出到/var/log/下的不同文件中. 不清楚。



http://linux.die.net/man/8/syslogd

http://book.51cto.com/art/200912/168763.htm


syslogd [ -a socket ] [ -d ] [ -f config file ] [ -h ] [ -l hostlist ] [ -m interval ] [ -n ] [ -p socket ] [ -r ] [ -s domainlist ] [ -S ] [ -v ] [ -x ]



-f 读配置文件


配置文件中:

! 取反

*   任意


样例一、

# Sample syslog.conf

mail.*;mail.!=info

/usr/adm/mail

news.info;news.!crit

/usr/adm/news



样例二、

!*     ---------------???
local6.err                      %/var/log/publog 10485760 666    ------------- 文件大小 和 权限。
!|AUTH|FP_CP_TABLE|
*.debug                         %/var/log/debug_trace 20971520 666


12.2.2  syslog配置

syslog的配置文件为/etc/syslog.conf,在该文件中指定了syslog记录日志的信息来源、信息类型以及保存位置。下面是该文件内容的一个实例。

  1. # Log all kernel messages to the console.  
  2. # Logging much else clutters up the screen.  
  3. # kern.*                            /dev/console  
  4. # Log anything (except mail) of level info or higher.  
  5. # Don't log private authentication messages!  
  6. # 把除邮件、授权和定时任务以外的其他info级别的信息记录到/var/log/messages日志文件中  
  7. * .info;mail.none;authpriv.none;cron.none       /var/log/messages  
  8. # The authpriv file has restricted access.  
  9. # 把所有授权信息记录到/var/log/secure日志文件中  
  10. authpriv.*                      /var/log/secure  
  11. # Log all the mail messages in one place.  
  12. # 把所有级别的邮件信息记录到/var/log/maillog日志文件中  
  13. mail.*                          -/var/log/maillog  
  14. # Log cron stuff  
  15. # 把所有级别的定时任务信息记录到/var/log/cron日志文件中  
  16. cron.*                          /var/log/cron  
  17. # Everybody gets emergency messages  
  18. # 把emerg级别的信息发送给所有登录用户  
  19. * .emerg                            *  
  20. # Save news errors of level crit and higher in a special file.  
  21. uucp,news.crit                  /var/log/spooler  
  22. # Save boot messages also to boot.log  
  23. # 把所有的系统启动信息记录到/var/log/boot.log日志文件中  
  24. local7.*                        /var/log/boot.log 

该文件以井号"#"为注释符,其中每一行的语法格式为:

  1. [消息来源.消息级别] [动作] 

其中,[消息来源.消息级别]和[动作]之间以Tab键进行分隔,同一行syslog配置中允许出现多个[消息来源.消息级别],但必须要使用分号";"进行分隔,例如:

  1. mail.*; cron.*      /var/log/test.log 

其中消息来源表示发出消息的子系统,如表12.3列出了syslog中的所有消息来源。

表12.3  syslog消息来源及说明

   

    

   

    

authpriv

安全/授权信息

mail

邮件子系统

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级别的消息:

  1. cron.=notice        /var/log/test.log 

除此之外,syslog还支持两个特殊的消息级别关键字:"*"和none。其中"*"表示匹配所有来源或级别的消息;none表示忽略所有消息。

[动作]是用于指定消息的处理方式。Syslog支持把消息保存到日志文件中、发送给指定的用户、显示在终端上或者通过网络发送到另外一台syslog服务器上进行处理。如表12.5中列出了Syslog中所有可用的动作及其说明。

表12.5  syslog动作说明

动    作

说    明

文件名

将消息保存到指定的文件中

@主机名或IP地址

转发消息到另外一台syslog服务器上进行处理

*

把消息发送到所有用户的终端上

/dev/console

把消息发送到本地主机的终端上

| 程序

通过管道把消息重定向到指定的程序

用户名列表

把消息发送给指定的用户,

用户名以逗号“,”进行分隔


0 0
原创粉丝点击