介绍
syslog是Unix系统的日志系统。可以将日志记录在本地系统中。
一个完整的syslong日志包含如下信息:程序模块 | 严重性 | 时间 | 主机名 | 进程名 | 进程ID | 正文。
syslong相关函数
1. openlog()函数。调用openlog()函数时可选的。如果不调用openlog()函数,则在第一次调用syslong()函数时打开日志连接。
#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守护进程通信的描述符。
#include <syslog.h>
void closelog(void);
syslog实例
#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文件中看到相关的打印信息。