Python 로그 라이브러리 비교: loguru가 logging보다 좋은 이유는?

Python 로그 라이브러리 비교: loguru가 logging보다 좋은 이유는?

 

파이썬(Python)으로 개발을 하다 보면, 프로그램의 실행 상태를 기록하거나 오류를 추적할 수 있도록 로그(logging)를 남기는 게 굉장히 중요합니다. 오류를 추적하거나 시스템 상태를 모니터링하려면 로그가 꼭 필요하죠.

 

파이썬에는 기본적으로 logging이라는 표준 라이브러리가 포함되어 있는데요.

 

최근에는 더 간단하고 강력한 기능을 제공하는 서드파티 라이브러리 loguru(로그루)를 사용하는 개발자들이 많아지고 있습니다.

 

그럼 두 라이브러리를 비교해보면서 어떤 상황에 어떤 라이브러리를 쓰는 게 더 좋은지 알아볼까요?


1. loguru(로그루)는 왜 편리할까?

loguru는 파이썬 커뮤니티에서 인기를 끌고 있는 서드파티 로그 라이브러리인데요.

 

복잡한 설정 없이도 강력한 기능을 제공하면서 logging을 대체할 수 있는 대안으로 주목받고 있습니다.

loguru의 장점

  • 설정이 간단하다
    복잡한 설정 파일이나 코드 없이도 몇 줄만으로 원하는 로그 설정이 끝납니다.
  • 체이닝(Chaining) 문법 지원
    메서드를 이어 쓰는 방식으로 로그를 남길 수 있어서, 코드가 더 직관적이고 깔끔합니다.
  • 다중 출력 지원
    로그를 파일과 콘솔에 동시에 출력하거나, 포맷을 자유롭게 설정할 수 있습니다.
  • 추가 기능이 풍부하다
    자동 로그 압축, 파일 용량 초과 시 자동 분할, 보관 기간 설정 등 다양한 기능이 내장되어 있습니다.

loguru 기본 사용 예시

from loguru import logger

# 로그 파일 설정 (500MB 이상이면 자동 분할)
logger.add("app.log", rotation="500 MB")

# 로그 메시지 기록
logger.info("정보 메시지입니다.")
logger.warning("경고 메시지입니다.")
logger.error("에러 메시지입니다.")

 

보시는 것처럼, logger.add() 한 줄이면 파일 로그 설정이 끝납니다.

 

따로 핸들러(handler)를 설정할 필요도 없죠.


파일과 콘솔에 동시에 출력하기

파일과 콘솔에 로그를 동시에 출력하고 싶다면 아래처럼 설정하면 됩니다:

from loguru import logger
import sys

# 파일과 콘솔에 로그 출력 설정
logger.add("app.log", rotation="500 MB", retention="10 days")
logger.add(sys.stdout, level="INFO")

# 로그 메시지 기록
logger.info("정보 메시지입니다.")
logger.warning("경고 메시지입니다.")
logger.error("에러 메시지입니다.")

 

sys.stdout을 추가하면 콘솔 출력도 자동으로 설정되기 때문에, 불필요한 설정 없이 바로 사용할 수 있습니다.


2. Python 기본 logging의 장단점은?

logging은 파이썬에 기본으로 포함된 표준 라이브러리인데요.

 

별도의 설치 없이 쓸 수 있고, 다양한 환경과 호환된다는 장점이 있습니다.

장점

  • 표준 라이브러리
    설치 없이 바로 쓸 수 있고, 운영체제나 플랫폼에 관계없이 동작합니다.
  • 높은 커스터마이징 가능성
    로그 포맷, 레벨, 출력 대상 등을 상세하게 설정할 수 있어서 복잡한 시스템에 적합합니다.
  • 호환성
    많은 서드파티 라이브러리들이 logging을 기반으로 로그를 남기기 때문에 통합 관리가 편합니다.

단점

  • 설정이 복잡하다
    단순한 기능이라도 설정이 길고 직관적이지 않아서, 처음 쓰는 사람은 헷갈리기 쉽습니다.
  • 체이닝 문법 미지원
    메서드 체이닝을 지원하지 않아 코드가 장황해질 수 있습니다.

logging 기본 사용 예시

import logging

# 로그 설정
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s',
    filename='app.log',
    filemode='a'
)

# 로그 메시지 기록
logging.info("정보 메시지입니다.")
logging.warning("경고 메시지입니다.")
logging.error("에러 메시지입니다.")

 

이렇게 하면 로그는 파일에만 저장되고 콘솔에는 출력되지 않습니다.

 

콘솔에도 출력하려면 추가 설정이 필요합니다.


파일과 콘솔 동시 출력 설정

import logging

# Logger 객체 가져오기
logger = logging.getLogger()
logger.setLevel(logging.INFO)

# 파일 핸들러 설정
file_handler = logging.FileHandler('app.log')
file_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))

# 콘솔 핸들러 설정
console_handler = logging.StreamHandler()
console_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))

# 핸들러 등록
logger.addHandler(file_handler)
logger.addHandler(console_handler)

# 로그 메시지 기록
logger.info("정보 메시지입니다.")
logger.warning("경고 메시지입니다.")
logger.error("에러 메시지입니다.")

 

보시는 것처럼, 파일과 콘솔에 동시에 로그를 출력하려면 여러 핸들러를 설정하고 포맷까지 따로 지정해야 합니다.

 

단순한 기능을 위해 꽤 많은 코드가 필요하죠.


3. loguru vs logging 비교 정리

항목 logging loguru
설정 복잡도 높음 (핸들러 설정 필요) 낮음 (logger.add()만으로 가능)
로그 파일 분할/보관 외부 모듈 필요 내장 기능으로 지원
파일 + 콘솔 동시 출력 복잡한 설정 필요 간단한 설정으로 가능
체이닝 문법 미지원 지원
사용 편의성 복잡한 시스템에 적합 빠른 개발에 적합

4. 언제 어떤 로그 라이브러리를 써야 할까?

  • 간단한 프로젝트나 빠른 개발이 필요할 때
    loguru가 더 적합합니다. 설정도 간단하고 가독성도 좋아서 프로토타입이나 소규모 프로젝트에 딱 맞습니다.
  • 복잡한 시스템이나 다중 모듈 프로젝트
    logging이 더 나은 선택입니다. 세밀한 설정이 가능해서 큰 프로젝트에서 유연하게 로그를 관리할 수 있습니다. 특히 여러 외부 라이브러리를 함께 쓸 때 통합 관리가 수월합니다.

5. 마무리 정리

logurulogging은 각각 장단점이 뚜렷한데요.

 

빠르고 간편하게 로그를 남기고 싶다면 loguru가 훨씬 편리합니다.

 

반면, 대규모 프로젝트나 복잡한 설정이 필요한 경우엔 logging이 더 안정적인 선택이 될 수 있겠죠.