如何知道syslog函数是否成功调用?

时间:2018-01-16 02:15:43

标签: linux syslog rsyslog

在linux命令行中使用命令man 3 syslog,我们可以看到函数介绍如下:

void openlog(const char *ident, int option, int facility);
void syslog(int priority, const char *format, ...);
void closelog(void);

我们可以发现这些函数的返回值是' void',所以 如何知道函数是否像" syslog(...)"被称为成功? 如果你在centos上停止rsyslog服务,你也可以运行以下程序而不会出错:

#include <syslog.h>   

int main(int argc, char *argv[])   
{   
    openlog("testsyslog", LOG_CONS | LOG_PID, LOG_LOCAL3);   
    syslog(LOG_USER | LOG_INFO, "syslog test message generated in program %s(=======from test!) \n", argv[0]);   
    closelog();   
    return 0;   
}

2 个答案:

答案 0 :(得分:2)

根据手册,

  

openlog()的option参数是以下任何一个的OR:

     

LOG_CONS如果出现错误,则直接写入系统控制台   发送到系统记录器。     ...

因此,如果您指定LOG_CONS并且输出来自控制台,则意味着该消息无法记录在syslog中。

答案 1 :(得分:1)

您不知道这些syslog函数调用是否成功。原因是syslog调用仅向syslogd(或rsyslogd兼容的syslogd)发送单个网络数据包,该数据包既是Unix域套接字又是一个UDP套接字服务器。 syslogd守护程序没有响应。因此,如果出现诸如丢包之类的故障,您将不知道。我相信这是设计使日志机制尽可能简单,以避免不必要的日志开销。