3.3 msg.c:告警处理

来源:互联网 发布:手机文件加密软件2016 编辑:程序博客网 时间:2024/05/16 06:02

msg.c用来实现postfix中的警告信息显示。警告信息根据其严重程度分为info、warn、error、panic、fatal等级别。分别用msg_info、msg_warn、msg_error、msg_panic、msg_fatal函数实现(又分别调用了vmsg_info等函数)。严重的告警级别会终止程序。

/util/msg.cvoid    vmsg_info(const char *fmt, va_list ap){    msg_vprintf(MSG_INFO, fmt, ap);}void    vmsg_warn(const char *fmt, va_list ap){    msg_vprintf(MSG_WARN, fmt, ap);}void    vmsg_error(const char *fmt, va_list ap){    msg_vprintf(MSG_ERROR, fmt, ap);    if (++msg_error_count >= msg_error_bound)msg_fatal("too many errors - program terminated");}NORETURN vmsg_panic(const char *fmt, va_list ap){    if (msg_exiting++ == 0) {msg_vprintf(MSG_PANIC, fmt, ap);    }    sleep(1);    abort();/* Die! */    /* In case we're running as a signal handler. */    _exit(1);/* DIE!! */}NORETURN vmsg_fatal(const char *fmt, va_list ap){    if (msg_exiting++ == 0) {msg_vprintf(MSG_FATAL, fmt, ap);if (msg_cleanup_fn)    msg_cleanup_fn();    }    sleep(1);    /* In case we're running as a signal handler. */    _exit(1);}


可见对于msg_info和msg_warn,仅仅打印出提示或警告信息。对于msg_error,如果出错信息过多超过限制,则执行msg_fatal。对于msg_panic和msg_fatal,不仅仅要打印出错信息,还要退出程序。msg_fatal可以挂接一个执行清理工作的回调函数。     

0 0
原创粉丝点击