프로젝트 소개
Quill은 C++17 이상을 위한 비동기 로깅 및 메트릭 라이브러리로, 성능이 중요하고 지연 시간에 민감한 애플리케이션을 대상으로 합니다. 핵심 설계는 포매팅과 I/O를 호출 스레드 밖으로 유지하는 것입니다. 로그 인자는 프런트엔드에서 인코딩되고 전용 백엔드 워커가 처리하므로, 비용이 큰 포매팅이 핫 패스에서 벗어나 수행됩니다.
README에 설명된 주요 기능:
- 비동기 처리: 백그라운드 스레드가 포매팅과 I/O를 처리하여 애플리케이션 스레드의 응답성을 유지합니다.
- 메트릭 게시: 사전 등록된 메트릭 샘플을 동일한 비동기 백엔드를 통해 보낼 수 있습니다. 번들로 제공되는 Prometheus 싱크는 카운터, 게이지, 히스토그램, 요약을 처리하며, 사용자 정의 싱크는 샘플을 StatsD, OpenTelemetry 또는 기타 인프로세스 컬렉터로 라우팅할 수 있습니다.
- 최소한의 헤더 사용: 프런트엔드는 Logger.h와 LogMacros.h만 필요하고, 백엔드는 단일 .cpp 파일을 통해 포함되므로 백엔드 코드가 다른 번역 단위에 주입되는 것을 피합니다.
- 컴파일 타임 옵션: 로그 레벨을 컴파일 타임에 제거할 수 있고, 프런트엔드 큐와 메모리 정책을 컴파일 타임에 조정할 수 있습니다.
- 런타임 구성: 백엔드 유휴 동작, CPU 선호도, 버퍼링, 타임스탬프 처리, 플러시 및 콜백을 구성할 수 있으며, 로거는 싱크별 필터와 함께 내장 또는 사용자 정의 싱크로 구성할 수 있습니다.
- 타임스탬프: rdtsc, chrono 또는 사용자 정의 클럭을 지원하며, 스레드 간 타임스탬프 비교와 지연된 생산자를 위한 구성 가능한 유예 창을 제공합니다.
- 싱크 및 출력: 콘솔(색상 포함), 파일(로테이션 포함), JSON, 그리고 사용자 정의 싱크.
- 추가 기능: 링 버퍼를 통한 백트레이스 로깅, 로그 필터링, JSON 구조화 로깅, 매핑된 진단 컨텍스트(MDC), 속도 제한 매크로, 모니터링이 포함된 구성 가능한 유계/무계 및 차단/드롭 큐 모드, 시그널 핸들러를 통한 크래시 처리, Linux의 huge pages 지원, Windows의 와이드 문자 지원, 예외 없는 빌드 옵션.
- {fmt} 라이브러리를 기반으로 한 타입 안전 API.
설치는 vcpkg, Conan, Homebrew, Meson WrapDB, Conda, Bzlmod, xmake, nix, build2 등 여러 패키지 관리자를 통해 가능합니다. 빠른 시작 경로는 콘솔 또는 파일 출력을 위해 simple_logger()를 사용하며, 자세한 설정은 싱크, 로거, 포매터를 명시적으로 제어할 수 있는 Backend 및 Frontend API를 노출합니다. 매크로 없는 함수 API도 제공되며, 매크로 API보다 약간 느리다고 설명되어 있습니다.
README에는 숫자 로깅, 큰 문자열, 복잡한 타입과 같은 시나리오에서 하나 및 네 개의 스레드를 사용해 Quill을 다른 C++ 로깅 라이브러리와 비교한 벤치마크 표가 포함되어 있습니다. 이러한 결과는 특정 시스템 구성과 벤치마크 방법론과 함께 제시되며, 독립적인 검증이 아니라 프로젝트 자체의 측정값으로 읽어야 합니다.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.