syslog是Unix系统的日志系统。能够将日志记录在本地系统中。数据库
一个完整的syslong日志包含以下信息:程序模块 | 严重性 | 时间 | 主机名 | 进程名 | 进程ID | 正文。网络
1. openlog()函数。调用openlog()函数时可选的。若是不调用openlog()函数,则在第一次调用syslong()函数时打开日志链接。ide
#include <syslog.h> /* * ident: 标记,ident表示的字符串将添加在每行日志的前面,用以标记日志. * * option: 调用syslong()函数时的控制标志,标志的含义以下: * LOG_CONS: 若是将日志发送给syslogd守护进程时发生错误,则将日志显示到终端。 * LOG_NDELAY: 当即打开与系统日志的链接。 * LOG_ODELAY: 相似于LOG_NDELAY,与系统日志的链接只有在调用syslog()函数时才创建。 * LOG_PERROR: 将信息写入日志文件的同时,将日志发送到错误输出。 * LOG_PID: 每条日志中都包含进程ID。 * * facility: 指定记录日志程序的类型。 * LOG_AUTH: 认证系统(login, su, getty等)。 * LOG_AUTHPRIV: 同 LOG_AUTH 但只登录到所选择的单个用户可读的文件中。 * LOG_CRON: cron守护进程。 * LOG_DAEMON: 其余系统守护进程。 * LOG_FTP: 文件传输协议:ftpd、tftpd. * LOG_KERN: 内核产生的消息. * LOG_LPR: 系统打印机缓冲池:lpr、lpd. * LOG_MAIL: 电子邮件系统. * LOG_NEWS: 网络新闻系统. * LOG_SYSLOG: 由syslogd(8)产生的内部消息 * LOG_USER: 随机用户进程产生的消息. * LOG_UUCP: UUCP 子系统 * LOG_LOCAL0 ~ LOG_LOCAL7: 本地使用保留 */ void openlog(const char *ident, int option, int facility);
2. syslog()函数。syslog()函数相似于write()函数,往系统日志文件中写日志。系统日志文件的存储位置通常在/var/log/目录下。syslog()函数把日志写在/var/log/syslog文件中。函数
#include <syslog.h> /* * priority: 表示日志级别。 * LOG_EMERG: 紧急状况. * LOG_ALERT: 应该被当即改正的问题,如系统数据库破坏. * LOG_CRIT: 重要状况,如硬盘错误. * LOG_ERR: 错误. * LOG_WARNING: 警告信息. * LOG_NOTICE: 不是错误状况,可是可能须要处理. * LOG_INFO: 情报错误. * LOG_DEBUG: 包含情报的信息,一般指在调试一个程序时使用. */ void syslog(int priority, const char *fmt, ...);
3. closelog()函数。关闭日志设备。closelog()函数调用也是可选的,它只是关闭被用于与syslog守护进程通讯的描述符。spa
#include <syslog.h> void closelog(void);
#include <stdio.h> #include <stdarg.h> #include <stdlib.h> #include <syslog.h> #define BUFSZ 4096 static void log_msg(const char *fmt, ...) { char buf[BUFSZ]; va_list ap; va_start(ap, fmt); vsnprintf(buf, BUFSZ - 1, fmt, ap); strcat(buf, "\n"); openlog("test", LOG_CONS | LOG_NDELAY | LOG_PERROR, LOG_USER); // 该行可选 syslog(LOG_INFO, "%s", buf); closelog(); // 该行可选 } int main(int argc, char *argv[]) { log_msg("Hellow World. This is a syslog test."); exit(0); }
运行该程序后,能够在/var/log/syslog文件中看到相关的打印信息。调试