在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;
}
答案 0 :(得分:2)
根据手册,
openlog()的option参数是以下任何一个的OR:
LOG_CONS如果出现错误,则直接写入系统控制台 发送到系统记录器。 ...
因此,如果您指定LOG_CONS并且输出来自控制台,则意味着该消息无法记录在syslog中。
答案 1 :(得分:1)
您不知道这些syslog函数调用是否成功。原因是syslog
调用仅向syslogd
(或rsyslogd
兼容的syslogd
)发送单个网络数据包,该数据包既是Unix域套接字又是一个UDP套接字服务器。 syslogd
守护程序没有响应。因此,如果出现诸如丢包之类的故障,您将不知道。我相信这是设计使日志机制尽可能简单,以避免不必要的日志开销。