三种方式:unix域套接字、udp端口514以及特殊的设备/dev/klog
大多数出现调用syslog向/dev/log这个套接字发送日记消息。
Device:发送syslog的设备
Relay:转发syslog的设备(Relay可能只是转发部分接收到的syslog消息,它同时表现为Relay和Collector)
Collector:接收syslog的设备
syslog消息的udp报文不能超过1024字节。
完整的syslog日志中包含日记的程序模块(Facility)、严重性(Severity | Level)、时间、主机名或ip、进程名、进程id和正文
完整的syslog消息由3部分组成,分别是PRI、HEADER和MSG(<30>Oct 9 22:33:20 hlfedora auditd[1787]: The audit daemon is exiting.),PRI:<30>。HEADER:Oct9...hlfedora。
PRI部分是由程序模块(Facility)<<3 | 严重性(Severity)组成:换句话说 Facility可以有32种,Severity可以有8种。
Numerical Facility
Code
0 kernel messages
1 user-level messages
2 mail system
3 system daemons
4 security/authorization messages (note 1)
5 messages generated internally by syslogd
6 line printer subsystem
7 network news subsystem
8 UUCP subsystem
9 clock daemon (note 2)
10 security/authorization messages (note 1)
11 FTP daemon
12 NTP subsystem
13 log audit (note 1)
14 log alert (note 1)
15 clock daemon (note 2)
16 local use 0 (local0)
17 local use 1 (local1)
18 local use 2 (local2)
19 local use 3 (local3)
20 local use 4 (local4)
21 local use 5 (local5)
22 local use 6 (local6)
23 local use 7 (local7)
Numerical Severity
Code
0 Emergency: system is unusable
1 Alert: action must be taken immediately
2 Critical: critical conditions
3 Error: error conditions
4 Warning: warning conditions
5 Notice: normal but significant condition
6 Informational: informational messages
7 Debug: debug-level messages
HEADER部分包括两个字段:时间和主机名
MSG部分分为两个部分:TAG和Content;TAG包含程序名称和进程PID,TAG后面用一个冒号隔开Content部分
RFC3195:用tcp代替udp,进行可靠的syslog消息
facility参数 |
syslog.conf中对应的facility取值 |
LOG_KERN |
kern |
LOG_USER |
user |
LOG_MAIL |
|
LOG_DAEMON |
daemon |
LOG_AUTH |
auth |
LOG_SYSLOG |
syslog |
LOG_LPR |
lpr |
LOG_NEWS |
news |
LOG_UUCP |
uucp |
LOG_CRON |
cron |
LOG_AUTHPRIV |
authpriv |
LOG_FTP |
ftp |
LOG_LOCAL0~LOG_LOCAL7 |
local0~local7 |
priority参数 |
syslog.conf中对应的level取值 |
LOG_EMERG |
emerg |
LOG_ALERT |
alert |
LOG_CRIT |
crit |
LOG_ERR |
err |
LOG_WARNING |
warning |
LOG_NOTICE |
notice |
LOG_INFO |
info |
LOG_DEBUG |
debug
|
基本语法格式
类型.级别[;类型.级别] 动作
news.=crit /var/log/news.crit
‘=’特殊符号,如果存在说明只有本Severity的消息才进行处理,如果不存在则处理本Severity及其以下级别的消息
‘;'表示&&、'!'表示取反、’*'表示所有
动作:表示信息发送的目的地
可以是日记文件(绝对路径),如果文件名前面加上减号表示不将日志信息同步刷新到磁盘上(使用写入缓存),这样可以提高日志写入性能,但是增加了系统崩溃后丢失日志的风险
可以是远程主机(@host,host可以是ip或域名,默认在/etc/hosts文件下loghost这个别名已经指定给本机)
可以是指定用户(user1,user2),如果指定用户已登入,那么他们将收到消息
客户端有两种方式开发:
完全基于协议从底层开发,也就是直接写unix域套接字或者向UDP514发送定制消息
基于库函数供上层应用使用
logrotate:日志文件会随着日志的增加而不断增大,从而带来效率的问题和空间使用问题,在常年运行的服务器上面,通常会有logrotate程序定期进行日志文件的轮替和删除工作。