第三章第一节 日志
Linux系统日志
Linux现在提供守护进程rsyslogd来处理系统日志。rsyslogd守护进程既能接收用户进程输出的日志,也能接收内核日志。
用户进程通过调用syslog函数生成系统日志;syslog函数将日志输出到一个UNIX本地域socket类型(AF_UNIX)的文件/dev/log;rsyslogd则监听/dev/log文件以获取用户进程的日志输出。
内核日志由printk等函数打印至内核的环状缓存(ring buffer)中;环状缓存中的内容直接映射到/proc/kmsg文件中;rsyslogd通过读取/proc/kmsg文件获得内核日志。
rsyslogd在接收到用户进程或内核输入的日志后,会将他们输出至某些特定的日志文件;默认情况下,调试信息保存在/var/log/debug,普通信息保存在/var/log/messages,内核消息则保存在/var/log/kernel.log;
Linux系统的日志体系如下图。
rsyslogd的配置文件
rsyslogd的主配置文件为/etc/rsyslog.conf,其中主要可以设置的项包括:内核日志输入路径、是否接收UDP日志及其监听端口、日志文件的权限、包含哪些子配置文件(如/etc/rsyslog.d/*.conf);而rsyslogd的子配置文件则指定各类日志的目标存储文件。
syslog函数
应用程序可使用syslog函数与rsyslogd守护进程通信。
1 | /* |
openlog函数可进一步改变syslog的默认输出方式,进一步结构化日志内容。
1 | /* |
日志的过滤
在程序开发过程中,可能需要输出很多调试信息;而程序发布后,我们需要将这些调试信息关闭;这通过设置日志掩码来实现:使日志级别大于日志掩码的日志信息被系统忽略。setlogmask函数用于设置syslog的日志掩码。
1 | /* |
关闭日志功能
使用closelog函数关闭日志功能。
1 | /* |