파이썬 json logger

hbjs97·2024년 7월 29일

회사 내부 프로젝트를 진행하면서, 파이썬 애플리케이션의 로그를 수집하고 싶다는 동료의 요구가 있었다.
적절한 오픈소스 로거를 찾다가 마땅한 후보가 없어 직접 만들게 된 이야기를 소개해보려 한다.

기존 라이브러리 적용의 어려움

원래도 파이썬에는 기본 logging 패키지가 존재하고, 또 다양한 오픈소스 로깅 라이브러리(loguru, structlog 등)들도 있었지만, 막상 필요로 하는 기능들(json format, rotate)을 간단하고 간단하게 사용할 수 없었다.

loguru 는 기본적인 rotate 옵션을 내장하고 있었지만 json 형태로 구조화된 로그를 내보내기 어려웠고, 반대로 structlog 는 구조화된 로깅에 특화되었으나 별도의 rotate 기능을 제공하지 않아 파이썬 표준 logging 의 rotate 기능을 함께 사용해야 했다. 그리고 loguru 에 비해 비교적 사용하기 어려운 편이었다.

결국 어떤 라이브러리를 사용하든 커스텀해야 할 부분은 많았고 차라리 내 환경에 맞는 간단한(가벼운) 로거를 만들게 되었다.

json 로깅

가능한 기존 모니터링 시스템에 호환 가능한 형태로 로깅할 필요가 있었다.

예를 들어, 다음과 같은 JSON 형식을 통일해두면, 여러 서비스들이 생성하는 로그를 한 곳에 모으고, Grafana 등의 대시보드에서 쉽게 필터링 하여 확인할 수 있다.

{
  "context": "Foo",
  "level": "INFO",
  "message": "bar!",
  "timestamp": "2025-01-15T12:34:56",
  "thread": "Thread-1"
}

정리

물론, 이 로거는 특정 환경에 맞춰 제작되었기에 일반적인 오픈소스 라이브러리처럼 다양한 사용자 요구사항을 폭넓게 수용하지 못한다. 예컨대, 현재는 json 객체를 마음대로 수정하거나, 분산 환경의 트레이싱을 고려하는 기능이 전혀 반영되어 있지 않아 실제 서비스 환경에서의 활용은 어려울 것이다.

지금은 사내에서도 특별히 쓰는 사람이 없어, 사실상 '개인 프로젝트'에 가까운 상태이지만, 그래도 혹시나 이런 형태의 로깅이 필요한 분이 있을 수도 있다는 생각에 허락을 구해 오픈소스로 공개하게 되었다. 많은 이들에게 꼭 맞는 라이브러리는 아닐 수 있지만, '가볍게 한 번 참고해볼 만한' 선택지 정도로 생각되는것 만으로 만족스러울 것이다.

quickstart

loki & promtail recipe

0개의 댓글