[python] Celery로 분산 로깅을 처리하는 방법은 어떻게 되는가?

Celery는 파이썬으로 작성된 분산 작업 처리 라이브러리입니다. 이 라이브러리를 사용하면 분산 환경에서 작업을 실행하고 관리할 수 있습니다. 이번 포스트에서는 Celery를 사용하여 분산 로깅을 처리하는 방법에 대해 알아보겠습니다.

Celery의 로깅 기능

Celery는 내장된 로깅 기능을 제공하여 작업 실행 중에 발생하는 로그 메시지를 처리할 수 있습니다. 기본적으로 Celery는 작업의 성공 또는 실패에 대한 로그 메시지를 출력하도록 설정되어 있습니다. 그러나 이 로깅 기능을 통해 분산 로깅을 처리하는 것은 어려운 일일 수 있습니다.

분산 로깅을 위한 Celery 로거 설정

Celery에서 분산 로깅을 처리하려면 로거 설정을 조정해야 합니다. 로거는 Celery에 대한 다양한 로그 메시지를 처리하는 역할을 합니다. 로거 설정은 Celery 구성 파일(celeryconfig.py 또는 celery.py)에서 수행할 수 있습니다.

import logging

# 로거 생성
logger = logging.getLogger("celery")
logger.setLevel(logging.INFO)

# 분산 로그 핸들러 추가
handler = logging.FileHandler("/path/to/distributed.log")
handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))

# 핸들러를 로거에 추가
logger.addHandler(handler)

위의 예제 코드에서는 로거를 생성하고 로깅 레벨을 INFO로 설정합니다. 그리고 분산 로그 메시지를 저장할 파일 경로를 지정한 후, 해당 파일을 핸들러로 추가합니다. 마지막으로, 로거에 핸들러를 추가하여 로그 메시지를 처리합니다.

분산 로그 메시지 출력

Celery 작업을 실행할 때 분산 로거 설정이 적용되어 로그 메시지가 저장됩니다. 아래는 작업 실행 중에 로그 메시지를 출력하는 간단한 예제입니다.

from celery import Celery
import logging

# 분산 로그 기능을 가진 Celery 인스턴스 생성
app = Celery('tasks', loglevel='INFO')

# 분산 로거 생성 및 설정
logger = logging.getLogger("celery")
logger.setLevel(logging.INFO)
handler = logging.FileHandler("/path/to/distributed.log")
handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
logger.addHandler(handler)

# 분산 작업 정의
@app.task
def add(x, y):
    result = x + y
    logger.info(f"Addition of {x} and {y} is {result}")
    return result

# 작업 실행
add.delay(3, 4)

위의 예제에서는 Celery 인스턴스를 생성하고, 분산 로그 기능을 가진 작업(add 함수)을 정의합니다. 작업 실행 시 로그 메시지를 출력하는데, 앞서 설정한 로거를 사용하여 메시지를 저장합니다.

결론

Celery를 사용하여 분산 환경에서 로깅을 처리하는 방법을 알아보았습니다. Celery에서 제공하는 내장 로깅 기능과 로거 설정을 활용해서 로그 메시지를 분산적으로 처리할 수 있습니다. 이를 통해 작업 실행 중 발생하는 로그 메시지를 효과적으로 관리할 수 있습니다. Celery 공식 문서와 로깅 라이브러리의 문서를 참고해 자세한 내용을 살펴보시기 바랍니다.