[python] Celery의 로깅 설정 방법은 어떻게 되는가?

Celery는 분산 작업을 처리하는 데 사용되는 강력한 비동기 작업 큐 프레임워크입니다. Celery를 사용할 때 로깅은 중요한 요소입니다. Celery 작업에 대한 로그를 설정하는 방법에 대해 알아보겠습니다.

Celery는 기본적으로 Python의 logging 모듈을 사용하여 로그를 처리합니다. 로깅을 구성하려면 Celery 설정 파일에 logging 항목을 추가해야 합니다. 아래는 Celery의 로깅 설정 예시입니다.

from celery.utils.log import get_task_logger

logger = get_task_logger(__name__)
logger.propagate = False

celery_log_format = "[%(asctime)s] [%(levelname)s] %(message)s"
celery_log_datefmt = "%Y-%m-%d %H:%M:%S"

CELERY_LOGS = {
    "version": 1,
    "disable_existing_loggers": False,
    "formatters": {
        "celery_log_formatter": {
            "format": celery_log_format,
            "datefmt": celery_log_datefmt,
        },
    },
    "handlers": {
        "celery_console_handler": {
            "class": "logging.StreamHandler",
            "level": "INFO",
            "formatter": "celery_log_formatter",
            "stream": "ext://sys.stdout",
        },
    },
    "root": {
        "handlers": ["celery_console_handler"],
        "level": "INFO",
    },
}

위의 예시에서는 Celery의 로그 형식과 핸들러를 설정하고 있습니다. celery_log_format은 로그의 형식을 나타내는 문자열입니다. celery_log_datefmt은 로그의 날짜와 시간 형식을 지정하는 문자열입니다.

CELERY_LOGS 딕셔너리는 Celery 로그 설정을 정의합니다. handlers 항목은 로그를 처리하는 핸들러를 지정합니다. 위의 예시에서는 celery_console_handler를 사용하여 콘솔로 로그를 출력하고 있습니다.

root 항목은 로그의 루트 로거를 설정합니다. 위의 예시에서는 celery_console_handler를 사용하여 INFO 레벨 이상의 로그를 콘솔로 출력하도록 설정되어 있습니다.

Celery 설정 파일에서 위의 설정을 추가하면 Celery 작업의 로그가 설정한 대로 출력됩니다. 이를 통해 Celery 작업의 동작을 모니터링하고 디버깅하는 데 도움이 될 것입니다.

추가로, Celery 작업에서 직접 로그를 기록할 때는 logger = get_task_logger(__name__)와 같이 해당 작업 모듈의 로거를 얻어와서 사용할 수 있습니다.

자세한 내용은 Celery documentation - Logging을 참조하세요.