Semantic Logger 기본 설정 및 사용Semantic Logger는 Rails 애플리케이션의 기본 로거를 대체하는 rails_semantic_logger Gem을 통해 쉽게 통합됩니다. 초기 설정 시 SemanticLogger.add_appender(io: $stdout, formatter: :json)을 사용하여 JSON 형식으로 표준 출력에 로그를 기록하는 것이 권장됩니다. 성능 향상을 위해 비동기 로깅이 기본으로 활성화되어 있으나, 크래시 로그 보장을 위해 SemanticLogger.sync!를 호출하여 동기 모드로 전환할 수 있습니다.
로그 레벨 및 관리Semantic Logger는 TRACE, DEBUG, INFO, WARN, ERROR, FATAL 등 다양한 로그 레벨을 지원합니다. SemanticLogger.default_level을 통해 전역 로그 레벨을 설정하거나, include SemanticLogger::Loggable을 사용하여 클래스별로 로그 레벨을 재정의할 수 있습니다. 특히 SemanticLogger.add_signal_handler를 활성화하면 SIGUSR2 시그널을 통해 런타임에 로그 레벨을 동적으로 변경할 수 있어, 재시작 없이 문제 해결을 위한 상세 진단이 가능합니다. 테스트 환경에서는 logger.silence(:error)와 같이 특정 코드 블록 내에서 로그 레벨을 일시적으로 높여 불필요한 메시지를 억제할 수 있습니다.
컨텍스트 로깅 및 예외 처리Semantic Logger는 payload와 tags를 통해 풍부한 컨텍스트를 로그에 주입합니다.
- Payloads:
logger.info("메시지", user_id: "usr-1234")와 같이 개별 이벤트에 대한 메타데이터를 구조화된 형태로 전달합니다. - Tags:
SemanticLogger.tagged(invoice_id: invoice.id) do ... end블록 내에서 생성되는 모든 로그에 공통 속성을 자동으로 추가하여, 여러 메서드 호출에 걸쳐 특정 워크플로우의 컨텍스트를 유지합니다.예외 발생 시, 예외 객체를 직접 전달하면exception필드에 클래스 이름, 메시지, 스택 트레이스가 구조화된 배열 형태로 기록됩니다. 컨텍스트 페이로드와 예외 객체를 함께 전달하여 실패 원인을 더 명확하게 파악할 수 있으며, 중첩된 예외(cause)도 자동으로 직렬화하여 전체 오류 체인을 추적할 수 있습니다.