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

问题描述 投票:2回答:2

在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;   
}
linux syslog rsyslog
2个回答
2
投票

根据手册,

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

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

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


1
投票

您不知道这些syslog函数调用是否成功。原因是syslog调用只发送一个网络数据包到syslogd(或与rsyslogd兼容的syslogd),它既是Unix域套接字又是UDP套接字服务器。 syslogd守护进程没有回应。所以如果像丢包一样失败,你就不知道了。我相信这是为了使日志机制尽可能简单,以避免不必要的日志记录开销。

© www.soinside.com 2019 - 2024. All rights reserved.