Syslog

Syslog (시스템 로그 인터페이스)

Syslog 패키지는 POSIX 시스템 로깅 기능에 대한 Ruby 인터페이스를 제공해요. 즉 운영체제가 제공하는 syslog 데몬에 로그를 남기는 방법이에요.

출처: Ruby 3.3 API

본문

Syslog 메시지는 보통 중앙 로깅 데몬(central logging daemon)으로 전달돼요. 데몬은 메시지를 필터링하고, /var/log 아래의 여러 파일로 나누고, SQL 데이터베이스에 저장하고, TCP/UDP를 통해 중앙 로깅 서버로 전달하고, 이메일·호출기·문자 메시지로 관리자에게 경고할 수도 있어요.

애플리케이션 레벨 로깅인 LoggerLog4r와 달리, syslog는 보안상 위·변조가 어려운(tamper-proof) 로깅을 하도록 설계됐어요. syslog 프로토콜은 RFC 5424로 표준화돼 있어요.

open(ident, options, facility) → syslog

syslog 기능(facility)을 열어요. 이미 열려 있으면 런타임 예외를 던져요. 코드 블록을 함께 주거나 주지 않고 호출할 수 있어요. 블록을 주면 만들어진 Syslog 객체를 블록에 전달해요. syslog가 이미 열려 있으면 RuntimeError를 던져요.

  • ident - 호출 프로그램을 식별하는 문자열이에요.
  • options - 다음 중 하나의 논리적 OR(logical OR)이에요.
    • LOG_CONS - 시스템 로거에 보내는 중 오류가 나면 콘솔에 직접 써요.
    • LOG_NDELAY - 첫 메시지가 쓰일 때까지 기다리지 말고 지금 연결을 열어요.
    • (그 외 LOG_PID 등)
  • facility - 기본값은 LOG_USER.

close()

syslog 기능을 닫아요. 열려 있지 않으면 런타임 예외를 던져요.

reopen(ident, options, facility) → syslog

syslog를 닫고 다시 열어요. 인자는 open()과 같아요.

opened?

syslog가 열려 있으면 true를 돌려줘요.

instance()

self를 돌려줘요. 하위 호환성용이에요.

facility()

마지막 open() 호출에서 사용한 facility 번호를 돌려줘요.

ident()

마지막 open() 호출에서 사용한 식별 문자열(identity string)을 돌려줘요.

options()

마지막 open() 호출에서 사용한 options 비트마스크를 돌려줘요.

log(priority, format_string, *format_args)

지정된 priority(우선순위)로 메시지를 로그로 남겨요.

Syslog.log(Syslog::LOG_CRIT, "Out of disk space")
Syslog.log(Syslog::LOG_CRIT, "User %s logged in", ENV['USER'])

우선순위는 내림차순으로 다음과 같아요.

  • LOG_EMERG - 시스템을 사용할 수 없음
  • LOG_ALERT - 즉시 조치가 필요함
  • LOG_CRIT - 심각한 상태가 발생함
  • LOG_ERR - 오류가 발생함
  • LOG_WARNING - 잠재적 문제 경고
  • LOG_NOTICE - 정상이지만 주목할 만한 상태
  • LOG_INFO - 정보성 메시지
  • LOG_DEBUG - 디버깅 정보

각 우선순위 레벨에는 해당 레벨로 로그를 남기는 단축 메서드(shortcut method) 도 따로 있어요.

mask()

현재 적용 중인 로그 우선순위 마스크(log priority mask)를 돌려줘요. 마스크는 syslog를 열거나 닫는 것으로는 리셋되지 않아요.

mask=(priority_mask)

로그 우선순위 마스크를 설정해요. 마스크 값을 쉽게 설정하도록 LOG_UPTO 메서드가 정의돼 있어요.

Syslog.mask = Syslog::LOG_UPTO(Syslog::LOG_ERR)

또는 특정 우선순위들을 뽑아 이진 OR로 더할 수도 있어요.

Syslog.mask = Syslog::LOG_MASK(Syslog::LOG_ERR) | Syslog::LOG_MASK(Syslog::LOG_CRIT)

우선순위 마스크는 open()close() 호출을 거쳐도 유지돼요.

inspect()

객체 상태를 요약한 inspect() 문자열을 돌려줘요.