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

4
我有一个应用程序使用syslog进行日志记录。该应用程序内另一个库明确调用openlog()以供其自身使用,但在这种情况下会出现奇怪的问题:标准错误输出被发送到我已经打开的TCP套接字。 当我将lib的输出日志更改为stderrstdout时,一切正常。 我想知道这是两个syslog连接的问题还是代码中的混乱? 这是主应用程序的syslog初始化:
openlog( "app", LOG_PID|LOG_NDELAY, LOG_LOCAL1 );

这是该库的系统日志初始化:
openlog("lib", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
1个回答

1

这可能是实现相关的。如果您使用MUSL libc,则代码在syslog.c中,您可以看到仅使用一个fd进行系统日志记录(因此两个openlog共享相同的log_fd)。查看GNU libc源代码以了解大多数Linux实现的情况。您还可以使用straceltrace进行调查。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接