如何知道系统日志的函数是否成功调用



使用 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;   
}

根据手册,

openlog(( 的选项参数是以下任何一项的 OR:

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

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

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

最新更新