syslog是Linux中设置系统日记的一种工具。主要有三个函数openlog,syslog,closelog。
需要的库
#include <syslog.h>
void openlog(const char* ident, int options, int facility);
注意openlog是可选的,如不调用openlog,则在第一次调用syslog,自动调用openlog。
同时openlog被调用时,不设定的情况下,不立即创建套接字,而是在openlog被调用时才创建。
ident 是由syslog冠于每个日志消息之前的字符串
options 由一个或多个逻辑或构成
facility 用于标识消息发送消息发送进程类型
option的参数
LOG_CONS 若无法发送到syslogd守护进程则登记到控制台
LOG_NDELAY 不延迟打开,立即建立套接字
LOG_PERROR 既发送到syslogd守护进程,并登记到标准错误输入
LOG_PID 随每个日志登记进程ID
facility的参数
LOG_LOCAL(0~7) 本地使用
LOG_FTP FTP守护进程
LOG_DAEMON 系统守护进程
void syslog(int priority, const char* format,.....);
syslog用于把日志消息给系统程序syslogd去记录
priority是level和faility组合的。
message类似printf的格式串。
level的参数
LOG_EMERG 0 系统不可用
LOG_ALERT 1 必须立即采取行动
LOG_CRIT 2 临界条件
LOG_ERR 3 出错条件
LOG_WARNING 4 警告条件
LOG_NOTICE 5 正常且重要的条件(默认)
LOG_INFO 6 通告消息
LOG_DEBUG 7 调试级消息
void closelog();
可选的,用于关闭正在使用的写系统日志的描述符
#include<syslog.h>
int main()
{
int log_test;
/*打开日志*/
openlog("log_test ", LOG_PID|LOG_CONS, LOG_USER);
/*写日志*/
syslog(LOG_INFO, "this is my writen PID information, pid=%d", getpid());
/*关闭日志*/
closelog();
return 0;
}
gcc logtest.c -o logtest
./logtest
vim /var/log/messages
按大写G跳到未行
Jun 1 03:39:12 localhost log_test [2928]: this is my writen PID information, pid=2928