如果应用程序打开多个连接到syslog会发生什么?

时间:2012-10-20 09:44:58

标签: c linux syslog

我有一个使用syslog进行日志记录的应用程序。此应用程序中的另一个库显式调用openlog()用于它自己的用法,在这种情况下会发生奇怪的事情:stderr输出被发送到我已经打开的tcp套接字。 当我将lib的输出日志更改为stderrstdout时,一切正常。 我想知道这是两个syslog连接的问题,还是在代码中某处搞乱?

这是主应用程序的syslog初始化:

openlog( "app", LOG_PID|LOG_NDELAY, LOG_LOCAL1 );

这是lib的syslog初始化:

openlog("lib", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);

1 个答案:

答案 0 :(得分:1)

可能依赖于实现。如果您使用MUSL libc代码在syslog.c中,您可以看到只有一个fd用于syslog(因此两个openlog - s共享相同的log_fd) 。查看GNU libc源代码,了解大多数Linux实现会发生什么。您也可以使用straceltrace

进行调查