[Rust 공식문서 한국어 정리] ㊺. Rust 로깅(Logging) 가이드
[Rust 공식문서 한국어 정리] ㊺. Rust 로깅(Logging) 가이드
원문 제목: The Rust log crate
작성자: Rust Log Team
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
이 문서는 Rust에서 로깅을 구현하는 표준 방식과 주요 라이브러리를 설명합니다.
log 크레이트의 매크로(info!, warn!, error! 등)와, 이를 실제로 출력하는 로그 구현체(백엔드)의 분리 개념을 다룹니다.
env_logger, flexi_logger, slog, tracing 등의 구현체 특성과 선택 기준을 중심으로 설명합니다.
비동기 환경에서의 로깅, 구조화 로그(JSON), 그리고 로그 레벨 관리 전략도 포함합니다.
애플리케이션의 관찰 가능성(observability)을 확보하려는 모든 Rust 개발자에게 필수적인 내용입니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔑 2. 핵심 개념 4가지
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① log crate: 로깅 매크로와 Logger 트레이트를 정의하는 facade(표준 인터페이스)입니다.
② Log Level: Error, Warn, Info, Debug, Trace 다섯 단계로 로그의 상세도를 제어합니다.
③ Logger Backend: log crate의 인터페이스를 구현한 실제 출력 모듈로, env_logger, tracing 등이 있습니다.
④ Structured Logging: 필드 기반의 구조화된 로그로, JSON 형태로 머신 파싱과 검색에 최적화합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
log 크레이트는 facade 패턴으로, 로그 생성 코드와 출력 코드를 분리합니다.
aplication 코드는 log::info!("message")처럼 호출하고, 실제 출력은 런타임에 설정된 logger가 담당합니다.
이를 통해 라이브러리는 log crate만 의존하고, 최종 애플리케이션이 원하는 백엔드를 선택합니다.
로그 레벨은 컴파일 타임과 런타임 모두에서 필터링할 수 있습니다.
컴파일 타임에는 Cargo.toml의 features로 max_level_info 등을 지정하여 릴리스 빌드에서 디버그 로그를 제거합니다.
런타임에는 RUST_LOG 환경변수로 mycrate=debug, hyper=error 등 모듈별 레벨을 세밀하게 제어합니다.
env_logger는 가장 기본적이고 널리 사용되는 로거입니다.
표준 출력에 간단한 텍스트 로그를 출력하며, RUST_LOG 환경변수로 필터링합니다.
설정이 간단하고 오버헤드가 낮아, CLI 도구나 개발 단계에서 적합합니다.
tracing은 비동기와 분산 시스템에 최적화된 현대적 로깅/추적 프레임워크입니다.
span 기반의 컨텍스트 전파로, 비동기 태스크 간의 요청 흐름을 연결하여 로그를 추적합니다.
tracing-subscriber로 출력 형식을 커스터마이징하고, tracing-opentelemetry로 분산 추적 시스템과 통합합니다.
구조화 로깅은 slog나 tracing의 JSON 서브스크라이버를 사용하여 구현합니다.
필드 기반 로그는 Elasticsearch, Loki 등의 로그 집계 시스템에서 효율적으로 색인하고 검색할 수 있습니다.
키-값 쌍으로 로그를 작성하면, 텍스트 파싱보다 훨씬 빠르고 정확한 쿼리가 가능합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛠 4. 실전 활용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
애플리케이션 진입점에서 tracing_subscriber::fmt::init()으로 글로벌 로거를 초기화합니다.
비동기 서비스에서는 tracing span으로 요청 ID를 전파하여, 분산 로그를 단일 요청으로 묶습니다.
프로덕션 환경에서는 JSON 포맷으로 구조화 로그를 출력하고, 중앙 집계 시스템으로 전송합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Rust 로깅은 log facade와 다양한 백엔드의 조합으로 유연하게 구성됩니다.
상황에 따라 env_logger, tracing, slog 중에서 적절한 도구를 선택하세요.
구조화 로그와 span 기반 추적은 현대적 관찰 가능성의 핵심입니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔗 출처 링크
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
원문: https://docs.rs/log/latest/log/
tracing: https://docs.rs/tracing/latest/tracing/
#Rust #Logging #Tracing #env_logger #StructuredLogging #Observability #번역

오뉴노노 님의 최근 댓글
ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30