[Python] logging 사용법

들어가며

로깅은 프로그램을 개발하면서 발생하는 문제를 추적하고 디버깅하는 데 매우 중요한 역할을 합니다.
파이썬에서는 기본적으로 logging 모듈을 사용하여 로깅을 할 수 있습니다.
하지만 이 모듈은 설정이 복잡하고 사용법이 어려워 초보자에게는 다소 부담이 될 수 있습니다.
이러한 문제를 해결하기 위해 Loguru라는 라이브러리를 소개하고자 합니다. Loguru는 사용이 간편하고 직관적이어서 로깅을 보다 쉽게 구현할 수 있게 도와줍니다.

Loguru 설치

Loguru는 파이썬 패키지 관리자인 pip를 사용하여 손쉽게 설치할 수 있습니다.
터미널에서 아래 명령어를 입력해 설치할 수 있습니다.

pip install loguru

설치가 완료되면 바로 Loguru를 활용해 로깅을 시작할 수 있습니다.

Loguru 사용법

Loguru는 기본적으로 파이썬의 logging 모듈과 비슷한 방식으로 사용할 수 있습니다.
아래는 Loguru를 사용하여 간단한 로그 메시지를 출력하는 예제입니다.

from loguru import logger
logger.info("Hello, Loguru!")

위와 같이 매우 간단한 코드로 로그를 출력할 수 있습니다. 이처럼 Loguru는 직관적인 API를 제공하여 로그 작성이 훨씬 쉬워집니다.

Loguru의 유용한 기능들

Loguru는 기본적인 로깅 외에도 다양한 기능들을 제공합니다. 아래에서는 그 중 몇 가지 유용한 기능을 소개해드리겠습니다.

1. 로그 파일 저장

Loguru는 로그를 파일로 저장하는 기능을 제공합니다. 로그 파일의 이름과 날짜에 따라 자동으로 로그 파일을 회전하거나 보관할 수 있습니다.

예를 들어, 다음과 같이 설정하여 로그를 파일로 저장할 수 있습니다.

logger.add("file.log")  # 기본 로그 파일 저장

logger.add("file_1.log", rotation="500 MB")  # 파일 크기가 500MB를 넘으면 자동으로 회전
logger.add("file_2.log", rotation="12:00")   # 매일 정오에 새로운 파일로 회전
logger.add("file_3.log", rotation="1 week")  # 일주일마다 파일 회전

logger.add("file_X.log", retention="10 days")  # 10일이 지난 파일은 자동으로 삭제

logger.add("file_Y.log", compression="zip")    # 로그 파일을 압축하여 저장

2. 에러 발생 시 변수 값과 함께 로그 출력

Loguru는 에러 발생 시, 코드의 스택 트레이스와 함께 변수 값도 출력할 수 있습니다. 이 기능은 디버깅을 더욱 용이하게 만들어 줍니다.

# Caution, "diagnose=True" is the default and may leak sensitive data in prod
logger.add("out.log", backtrace=True, diagnose=True)

def func(a, b):
    return a / b

def nested(c):
    try:
        func(5, c)
    except ZeroDivisionError:
        logger.exception("What?!")

nested(0)

위 코드를 실행하면 다음과 같은 로그가 출력됩니다.

2018-07-17 01:38:43.975 | ERROR    | __main__:nested:10 - What?!
Traceback (most recent call last):

  File "test.py", line 12, in <module>
    nested(0)
    └ <function nested at 0x7f5c755322f0>

> File "test.py", line 8, in nested
    func(5, c)
    │       └ 0
    └ <function func at 0x7f5c79fc2e18>

  File "test.py", line 4, in func
    return a / b
           │   └ 0
           └ 5

ZeroDivisionError: division by zero

3. 코드 간단화 및 예외 처리

Loguru는 데코레이터를 사용하여 예외 처리를 더욱 간단하게 만들 수 있습니다. 아래 예제처럼 코드를 간결하게 작성할 수 있습니다.

@logger.catch
def my_function(x, y, z):
    # An error? It's caught anyway!
    return 1 / (x + y + z)

my_function(1, 2, 3)

위와 같이 @logger.catch 데코레이터를 사용하면 예외를 자동으로 처리하고 로그로 남길 수 있습니다.

마치며

Loguru는 파이썬에서 로깅을 쉽게 처리할 수 있도록 도와주는 라이브러리입니다.
기본적인 로깅 기능을 제공하는 것 외에도 파일 회전, 에러 추적, 예외 처리 등을 매우 간편하게 구현할 수 있어 로깅을 다루는 데 많은 편리함을 제공합니다.
보다 다양한 기능은 Loguru 공식 문서를 참고하셔서 활용해 보시기 바랍니다.

Comments