UNIX 系统有一个非常灵活和强大的日志系统,它让你能够记录几乎任何你能想象的东西,然后你可以操作日志来获取你需要的信息。
许多版本的 UNIX 提供了一个名为 syslog 的通用日志工具,有信息需要记录的单独程序要将信息发送到 syslog。
Unix syslog 是一个主机可配置的,统一的系统日志工具。该系统采用集中式的系统日志进程,其运行程序 /etc/syslogd
或者 /etc/syslog
。
系统记录器的操作是相当简单的。程序发送日志条目到 syslogd,其将会在配置文件 /etc/syslogd.conf
或 /etc/syslog
中查找,当找到一个匹配后,将日志消息写入到期望的日志文件中。
现有你应该了解的四种基本日志术语:
术语 | 描述 |
---|---|
Facility | 此标识符用来描述提交的日志信息的应用程序或进程。例如邮件,内核和 FTP。 |
Priority | 一个显示消息重要性的指示器。syslog 作为准则定义了消息的级别,从调试信息到关键事件。 |
Selector | 一个或更多的 facility 和 level 的结合体 。当一个输入事件匹配一个 selector 时,一个 action 会被执行。 |
Action | 传入的消息匹配 selector 时会发生的事情。Action 可以将消息写入日志文件,将消息回传到控制台或其他设备,将消息写入到一个登录用户,或将消息发送到另一个日志服务器。 |
下面是 selector 可用的 facility。不是所有的 facility 都存在于所有版本的 UNIX。
Facility | 描述 |
---|---|
auth | 需要用户名和密码的相关活动(getty,su,login) |
authpriv | 类似于 auth 的认证,但是记录的文件只能被授权的用户读取。 |
console | 用于捕获信息,这些信息一般会传向系统控制台。 |
cron | 与 cron 系统有关的计划任务信息。 |
daemon | 所捕获的所有系统守护进程信息。 |
ftp | ftp 守护进程相关的信息。 |
kern | 内核信息。 |
local0.local7 | 用户自定义使用的本地信息。 |
lpr | 与打印服务系统有关的信息。 |
与邮件系统相关的信息。 | |
mark | 用于生产日志文件中时间戳的伪事件。 |
news | 与网络新闻传输协议( nntp )有关的信息。 |
ntp | 与网络时间协议有关的信息。 |
user | 普通用户进程产生的信息。 |
uucp | UUCP 子系统生成的信息。 |
syslog 的优先级( Priority )如下表:
Priority | 描述 |
---|---|
emerg | 紧急情况,如即将发生的系统崩溃,通常会广播到所有用户。 |
alert | 需要立即修改的情况,如系统数据库的损坏。 |
crit | 关键的情况,如一个硬件的错误。 |
err | 普通错误。 |
warning | 警告 |
notice | 不是一个错误的情况,但是可能需要用特定方式的处理一下。 |
info | 报告性的消息。 |
debug | 用于调试程序的消息。 |
none | 没有重要级别,通常用于指定非日志的消息。 |
facility 和 level 的组合能够让你辨别记录了什么和这些日志信息去哪儿了。
每个程序尽职尽责地向系统记录器发送消息,记录器基于 selector 定义的 level 决定跟踪什么和舍弃什么信息。
当你指定了一个 level,系统会记录这一 level 及更高 level 的一切信息。
文件 /etc/syslog.conf 用于配置记录消息的位置。一个典型的 syslog.conf 文件看起来应该像这样:
*.err;kern.debug;auth.notice /dev/console
daemon,auth.notice /var/log/messages
lpr.info /var/log/lpr.log
mail.* /var/log/mail.log
ftp.* /var/log/ftp.log
auth.* @prep.ai.mit.edu
auth.* root,amrood
netinfo.err /var/log/netinfo.log
install.* /var/log/install.log
*.emerg *
*.alert |program_name
mark.* /dev/console
文件中的每一行包含两部分:
下面是上述配置的注意事项:
action 部分指定了下面五个 action 中的其中一个:
/var/log/lpr.log
或者 /dev/console
。UNIX 提供了 logger 命令,这是处理系统日志记录的一个非常有用的命令。logger 命令发送日志消息到 syslogd 守护进程,从而驱使系统记录日志。
这意味着我们可以随时用命令行检查 syslogd 守护进程及其配置。logger 命令提供了一种在命令行上添加一行条目到系统日志文件中的方法。
该命令的格式是:
logger [-i] [-f file] [-p priority] [-t tag] [message]...
下面是具体的参数细节:
选项 | 描述 |
---|---|
-f filename | 使用文件 filename 的内容作为消息来记录。 |
-i | 日志的每一行都记录进程的 id。 |
-p priority | 指定输入消息的优先级 priority(指定的 selector),优先级 priority 可以是数字或者指定为 facility.level 对的格式。默认参数是 user.notice。 |
-t tag | 用指定 tag 标记记录到日志中的每一行。 |
message | 字符串参数,它的内容以特定顺序连接在一起,由空格分开。 |
日志文件有快速增长的特点,并消耗大量的磁盘空间。大多数 UNIX 发行版系统使用了工具(如 newsyslog 或 logrotate)启用日志轮换功能。
这些工具由 cron 守护进程在一个频繁的时间间隔里调用。你可以在 newsyslog 或 logrotate 的手册页中获取更多的细节内容。
所有的系统应用程序创建自己的日志文件在 /var/log
和它的子目录里。下面这里有几个重要的应用,其相应的日志目录:
应用 | 目录 |
---|---|
httpd | /var/log/httpd |
samba | /var/log/samba |
cron | /var/log/ |
/var/log/ | |
mysql | /var/log/ |