2012-10-20 1 views
1

로깅에 syslog을 사용하는 응용 프로그램이 있습니다. 이 응용 프로그램 내의 다른 라이브러리는 자신의 용도로 명시 적으로 openlog()을 호출합니다.이 경우 이상한 일이 발생합니다. stderr 출력은 이미 열려있는 TCP 소켓으로 보내집니다. lib의 출력 로그를 stderr 또는 stdout으로 변경하면 모든 것이 잘 동작합니다. 두 개의 syslog 연결에 문제가 있거나 코드의 어딘가에있는 것이 아닌지 궁금합니다. 이것은 lib 디렉토리의 시스템 로그 초기화가응용 프로그램이 syslog에 대해 둘 이상의 연결을 열면 어떻게됩니까?

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

:

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

답변

1

그것은 아마 구현 의존

이 주요 응용 프로그램의 시스템 로그 초기화입니다. MUSL libc을 사용하는 경우 코드는 syslog.c에 있으며 syslog에는 하나의 fd 만 사용되므로 두 openlog -s가 같은 log_fd을 공유하고 있음을 알 수 있습니다. 대부분의 Linux 구현에서 어떤 일이 발생하는지 보려면 GNU libc 소스 코드를 살펴보십시오. strace 또는 ltrace

으로 조사 할 수도 있습니다.
관련 문제