2014-05-22 2 views
0

바쁜 상자가있는 임베디드 시스템이 있습니다. 바쁜 상자 설명서 페이지에는 다음 내용이 나와 있습니다.syslog 기능 로그를 사용자 지정 파일로 리디렉션

"이 버전의 syslogd는 /etc/syslog.conf를 무시합니다."

옵션이 있지만 모든 메시지가 사용자 지정 파일로 리디렉션됩니다.
C++에서 메시지를 보내고 있습니다. 어딘가에 외부 설정 파일 설정을위한 -f 옵션이 있습니다 - 작동하지 않습니다.

내 응용 프로그램에서 로거에 연결하는 방법 즉 :

bool Log::start() 
{ 
/* Launch process here */ 
    setlogmask(LOG_UPTO (LOG_DEBUG)); 
    openlog(LOG_IDENTITY, LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1); 

    return true; 
} 

수 내 응용 프로그램에서 함수를 호출하여 전체 시스템 로그에 대한 특정 시설이나 설비 마스크에 대해 서로 다른 로그 위치? 아니면 어떻게 든?

+0

syslogd 구현이 매우 적다는 것을 알 수 있습니다. 한 가지 접근법은 코드를 간결하게 볼 수 있기 때문에 소스를 읽음으로써 수행 할 수있는 작업을 파악할 수 있습니다. 필요한 것을 찾지 못하면 다른 구현을 사용하거나 패치를 적용하거나 완전히 다른 방법을 사용하여 파일에 기록하는 옵션이 포함 된 것 같습니다. –

답변

0

Busybox가 아니라 응용 프로그램의 syslog를 베어로드 syslogd를 사용하여 다른 로그 파일로 리디렉션하는 것과 같은 문제가있었습니다. 응용 프로그램의 호출이 openlog하는

  1. 업데이트() int facility에 세번째 매개 변수를 설정 한 다음 LOG_LOCAL7 라벨을 통해 LOG_LOCAL0에 local0 - local7과 변환 설정 코드를 만들 :이 솔루션은 두 단계이다. 그런 다음 응용 프로그램의 로그 데이터 만 필요한 호스트에 대해 LOCAL3을 지정하도록 응용 프로그램을 구성합니다.

  2. 그러면 우리 Operations 직원은 syslogd를 구성하여 LOCAL3 기능에 대한 로그 데이터를 별도의 파일로 리디렉션하도록 작업하고 있습니다. 나는 그들이 무엇을 생각해 냈는지 정확히 모른다. 그래서 나는 더 이상 추측하지 않을 것이다. 그러나 그들은 시설을 기반으로 syslogd 출력을 리다이렉트 할 수 있다는 지식하에 시설을 구성하도록 요청했습니다.

내가 알아챈 한 가지는 LOG_CONS입니다. 예전에는 syslogd에 쓸 수 없을 때 syslog가 자식 프로세스를 fork하고 Solaris x86_64 프로세스 테이블을 좀비로 채웠습니다. 그래서 나는 그 깃발을 더 이상 사용하지 않습니다.