Linux日志系统API详解
1. API概述
1.1 openlog
- 函数声明如下:
void openlog(const char* ident, int option, int facility);
- 函数介绍
- 功能:
用来建立与系统日志的链接,获取对系统日志文件的操作权 - 参数:
ident
用来指定每条日志记录的前缀,通常设置为程序名称,如果为NULL,则使用程序名称作为前缀
option
指定openlog()
对syslog()
调用的标志,如果未指定则使用默认值
facility
用于指定产生消息的程序类型。从而根据配置文件的设定将来自不同程序类型的消息将以不同的方式处理 - 注意:
openlog()函数是可选的,若不使用此函数,它将由syslog()自动调用,此时ident将默认为NULL
- 功能:
- 参数之详细介绍
-
option
值是一个位掩码,可有以下值进行或运算进行组合使用项目 描述 LOG_CONS 如果在写入到系统log时出现错误,则直接写入系统控制台 LOG_NDELAY 立即打开连接(通常,在产生第一条消息时打开连接)。这会很有用,例如,如果后续调用 chroot()
会使日志工具内部使用的路径名无法访问。LOG_NOWAIT 不等待在写入消息时可能已创建的子进程。(GNU C 库不创建子进程,所以这个选项对 Linux 没有影响) LOG_ODELAY 连接的打开被延迟到 syslog() 被调用(这是默认值,无需指定) LOG_PERROR (不在 POSIX.1-2001 或 POSIX.1-2008 中)还将消息记录到 stderr LOG_PID 每条消息中包含调用者的 PID -
facility
项目 描述 LOG_AUTH 安全/授权消息 LOG_AUTHPRIV 安全/授权消息(私有) LOG_CRON 时钟守护进程(cron 和 at) LOG_DAEMON 没有单独设备值的系统守护进程 LOG_FTP ftp 守护进程 LOG_KERN 内核消息(不能从用户进程生成) LOG_LOCAL0 ~ LOG_LOCAL7 保留供本地使用 LOG_LPR 行打印子系统 LOG_MAIL 邮件子系统 LOG_NEWS USENET新闻子系统 LOG_SYSLOG 由 syslogd内部生成的消息 LOG_USER 通用用户级消息 LOG_UUCP UUCP(Unix-to-Unix Copy) subsystem
-
2.2 syslog and vsyslog
- 函数声明如下:
void syslog(int priority, const char* format, ...); void vsyslog(int priority, const char *format, va_list ap);
- syslog()函数介绍
- 功能:
syslog()生成一条日志信息,该消息将由syslogd守护进行分发 - 参数:
priority
参数是将facility
和level
组合在一起形成的。如果facility
没有设置则使用openlog()设置的值,若openlog()没有被调用,则使用默认值LOG_USER
- 功能:
- vsyslog()函数介绍
vsyslog()
执行与syslog()
相同的任务,不同之处在于它采用一组使用stdarg()
变量参数列表宏获得参数。
2.3 closelog
- 函数声明如下:
void closelog(void)
- 函数介绍
closelog()用于关闭系统日志文件的描述符。closelog()函数可用可不用
2.4 有关level设置的函数
-
函数声明如下:
int setlogmask(int mask);
-
函数介绍
- 功能:
进程有一个日志优先级掩码,用于确定哪些syslog()
的调用可以被记录。其他的调用将被忽略,初始掩码是为所有优先级启用日志记录。
setlogmask()
函数为调用进程设置此日志掩码,并返回前一个掩码。 如果掩码参数为 0,则不会修改当前日志掩码。 - 参数:
优先级掩码(即level
的值)
- 功能:
-
参数之详细介绍
level
值,下列按照消息的重要性降序排列项目 描述 LOG_EMERG 系统无法使用 LOG_ALERT 必须立即采取行动 LOG_CRIT 临界条件 LOG_ERR 错误条件 LOG_WARNING 警告条件 LOG_NOTICE 正常但重要的情况 LOG_INFO 信息性消息 LOG_DEBUG 调试级消息
2. /var/log 内容概要
2.1 /var/log内容概要
- /var/log/lastlog : 使用者最近登入系统的时间
- /var/log/wtmp : 使用者登录及退出系统的时间
- /var/log/secure : 登录系统信息
- /var/log/maillog : 记录mail相关信息
- /var/log/cron : 记录 crontab 的相关讯息定时器的信息
- /var/log/dmesg : 开机时的画面讯息
- /var/log/xferlog : ftp日志信息
- /var/log/messages : 大部分信息都记录在此
2.2 配置文件
- rsyslog.conf
主要用于rsyslogd
的一些环境配置 - 50-default.conf
具体的日志规则
3. 实例
#include <stdio.h>
#include <syslog.h>
int main(){
// 打开log文件, 第三个参数设置位0,以便在syslog()更灵活设置,避免反复设置
openlog("tetslog",LOG_CONS | LOG_PID, 0);
// 产生log信息
syslog(LOG_USER | LOG_DEBUG,"test log %s %d",__FILE__,__LINE__);
// 关闭
closelog();
return 0;
}
由于 openlog()
和 closelog()
均为可选函数,所以可精简至一行
#include <stdio.h>
#include <syslog.h>
int main(){
// 产生log信息
syslog(LOG_USER | LOG_DEBUG,"test log %s %d",__FILE__,__LINE__);
return 0;
}