日记文件之出错管理

日志文件之出错管理

此文是针对UNIX意况高端编制程序的失误管理程序的编写制定批注的,系统基于ubuntu16.04
在编辑出错管理程序前,大家须要领会一些日记文件有关的学问。日志文件基本上是为未有决定终端的医护进度打算的,每一种守护进度的失误记录都记录在相应的日志文件上。比方cron对应的日记文件是/var/log/cron.log,mail对应的日志文件是/var/log/mail.log等。详细的日志文件的文化依然在别的的篇幅表达,这里只要精晓大家为我们自身编排的料理进度编写出错管理程序其实就是调用函数将出错音信重定向到/var/log/里面包车型客车一个文书中。从前笔者们大概输出在调整台或自身制造的文件中。这里只是换了个格局而已。
为何不出口到调整台呢?
关照进程那么多,假若都输出到调节台你能想象你的调整台形成什么样了啊?並且也不便利未来翻看
为什么不出口到大家和好的公文?
借令你每写一个守护进度就成立二个文书记录出错,那么多文件你记得住吗?假若以往要查看怎么做?
福衢寿车机制:
syslog机制担当发送、记录系统基本及工具所发生的消息,由syslog()调用、syslogd守护进程和安顿文件/etc/rsyslog.conf组成。当系统基本及工具发出音信时,通过调用syslog(),把音信送往syslogd,syslogd再依照/etc/rsyslog.conf中的配置须求,将那些音讯分级作如下管理:
记录到系统日志中
输出到系统调控台上
转载给钦点的客商
透过互联网转载给别的主机上的syslogd
rsyslog.conf文件中有个$IncludeConfig字段,它的意味正是把该字段后边的手提富含进来,一般是把/etc/rsysconfig.d/目录下以.conf结尾的文件都包括进来了,你读书一下以此目录下的文本的原委对那上头会大有益处。
API:

#include
void openlog(const char*ident,int option,int facility)
void syslog(int priority,const char*format,...)
void closelog(void)
int setlogmask(int maskpri)

openlog:
意思就是本身张开什么类型的日志文件,
第八个参数随意一个字符串哪怕null也行,一般大家都设为程序名,因为这么些字符串会加到笔者将发送给日志文件的消息中,所以设为程序名方便大家辨认那则音讯是哪些程序发出的,
其次个参数有LOG_CONS,LOG_NDELAY,LOG_NOWAIT,LOG_ODELAY,LOG_PERROR,LOG_PID,具体意思小编就不写了,自身查看。
其八个参数的目标正是规定我们日志文件的花色,此前自身说过有cron,mail等。syslogd守护进度会基于日志类型到布署文件中寻觅次品种应写入的文件,若找到相称项,则将随后大家发送的新闻写入此文件中。它的参数有LOG_AUTH,LOG_AUTHPRIV,LOG_CRON,LOG_DAEMON,LOG_FTP,LOG_KERN,LOG_LOCAL0,…LOG_LOCAL7,LOG_LPR,LOG_MAIL,LOG_NEWS,LOG_SYSLOG,LOG_USER,LOG_UUCP。
openlog能够不调用,因为只要您调用,那么当您调用syslog时系统会自动调用openlog,此时priority参数必需是facility和level的组合。ident棉被服装置为null。
syslog:
调用此函数则将相应信息写到日志文件中,尽管在此之前未调用openlog则priority参数是priority和level的重组(或运算),若是调用了就是独自的值,可取参数是LOG_EMERG,LOG_ALERT,LOG_CRIT,LOG_ERR,LOG_WARNING,LOG_NOTICE,LOG_INFO,LOG_DEBUG。优先级从高到低。format和printf函数的format同样,里面包车型地铁占位符对应第三个参数。那就是就要发送的消息。
closelog:
此函数也是能够不调用的,它的效果与利益是停业曾与syslogd守护进度通讯的描述符,从前我们说过那是透过UNIX域套接字实现的,那是亟需一个监听描述符的,在您学过unix域套接字后那几个概念就通晓了,此处不商量,只要知道此函数调不调用都不在乎就行了。
setlogmask:
此函数的参数取值范围和openlog函数的facility的取值范围同样,四个档案的次序可进展或运算,凡是步向到此参数中的类型,都不可用syslog将音信发送到此类型对应的日记文件中。比如

#include
#include
int main(void)
{
setlogmask(LOG_MAIL);
syslog(LOG_MAIL | LOG_ERR,"hello,%s","world");
return 0;
}

字符串”hello,world”永久不会被发送到mail.log中,因为调用setlogmask把它屏蔽掉了。

末段,再提一个syslog的变体:

#include
#include

void vsyslog(int priority,const char*format,va_list arg)

va_list的用法参照他事他说加以考察只要学一下stdarg.h头文件就能了,那么些头文件之中内容十分少。

此文是针对性UNIX遭逢高等编制程序的失误管理程序的编辑讲授的,系统基于ubuntu16.04
在编写出错管理程序前,大家供给掌握…

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注