티스토리 뷰
☞ openlog, syslog, closelog, setlogmask
<syslog.h>
void openlog(const char *ident, int option, int facility);
void syslog(int facility_priority, const char *format, ...);
void closelog();
int setlogmask(int mask);
시스템 내의 주요 대몬과 프로세스들이 관리자등에 통보하거나 조사 자료나 보고서 자료의 기반으로 사용하기 위해 남기는 메시지들은 대부분의 시스템에서 syslog라는 이름으로 운용됩니다. 통상 syslogd 또는 klogd와 같은 대몬이 "/dev/log"를 매개로 유닉스 소켓을 생성해서 메시지를 받아 처리하게 됩니다. 로컬 시스템에서는 연결 기반의 유닉스 소켓으로 메시지를 남길 수 있지만 원격 시스템에서도 UDP 데이터그램을 통해서 메시지를 남길 수 있습니다. 이런 과정은 모두 syslog()에서 처리해 줍니다. syslog()로 로그 메시지를 남길 수 있는데 openlog(), syslog(), closelog() 단계를 밟을 수도 있지만 openlog(), closelog() 없이 syslog()를 호출하면 기본 설정으로 로그를 남깁니다.
☞ 예제1
...... if (!openlog_done) { openlog(syslog_ident ? syslog_ident : "postgres", LOG_PID | LOG_NDELAY | LOG_NOWAIT, syslog_facility); openlog_done = true; } ...... if (syslog_sequence_numbers) syslog(level, "[%lu-%d] %s", seq, chunk_nr, buf); else syslog(level, "[%d] %s", chunk_nr, buf); ...... if (openlog_done) { closelog(); openlog_done = false; } ......
위의 코드는 PostgreSQL DBMS 코드의 일부입니다. 플래그(openlog_done)를 가지고 프로그램 실행중 1회만 openlog()를 수행하고 전체 작업 종료시 closelog()를 수행한 점을 참조할만 합니다.
openlog()의 첫 인수 ident는 로그를 남기는 주체를 알려주는 것으로 기본값은 프로그램 이름입니다.
두번째 인수 option에는 예제와 같은 방식으로 다음과 같은 것들을 사용할 수 있습니다.
- LOG_PERROR : 메시지를 syslog에 남기는 것과 동시에 표준 에러 스트림으로도 출력
- LOG_CONS : syslog 메시지 저장이 실패하면 시스템 콘솔에 출력
- LOG_PID : PID를 메시지에 포함시킴
- LOG_NDELAY : 유닉스 소켓으로 연결
openlog()와 syslog()에서 설정하는 장치코드(facility)는 다음과 같습니다.
- LOG_USER : 기타 사용자 프로세스. 기본값
- LOG_MAIL : 메일 시스템
- LOG_DAEMON : 기타 시스템 대몬
- LOG_AUTH : 보안, 사용자 관리
- LOG_SYSLOG : Syslog
- LOG_LPR : 중앙 프린터
- LOG_NEWS : 네트워크 뉴스
- LOG_UUCP : UUCP
- LOG_CRON : Cron, At
- LOG_AUTHPRIV : 개인 보안
- LOG_FTP : FTP 서버
syslog()에서는 장치코드에 부가해서 다음과 같은 우선순위 또는 레벨을 지정합니다.
- LOG_EMERG : 시스템 불능 상태
- LOG_ALERT : 즉시 조치가 이뤄져야 하는 작업
- LOG_CRIT : 심각한 상태
- LOG_ERR : 에러
- LOG_WARNING : 경고
- LOG_NOTICE : 정상이나 중요한 정보 통지
- LOG_INFO : 단순 정보
- LOG_DEBUG : 디버깅 목적의 메시지
setlogmask()는 특정 레벨의 로그를 무시하게 합니다. 비트 마스크 형태로 지정하는데,
비트가 ON 이면 정상적으로 처리하고 비트가 OFF면 해당 레벨의 메시지를 무시합니다.
LOG_MASK(LOG_EMERG) | LOG_MASK(LOG_ERROR) 처럼 지정할 수 있습니다.
'C | C++' 카테고리의 다른 글
지수와 로그 함수 (0) | 2018.06.29 |
---|---|
삼각 함수 (0) | 2018.06.29 |
터미널 IO (0) | 2018.06.29 |
데이터 그램 소켓 사용하기 (0) | 2018.06.17 |
연결 기반으로 소켓 사용하기 (0) | 2018.06.17 |