인프런 커뮤니티 질문&답변

bluebamus님의 프로필 이미지

작성한 질문수

실리콘밸리 엔지니어와 함께하는 샐러리(Celery)

Task 에러를 Signal로 해결해 보기

celery의 로그 설정을 django의 settings.py에서 따로 해줘야 하는게 있을까요?

24.07.08 16:07 작성

·

92

·

수정됨

1

django의 logger를 사용해 log를 출력하는 경우

CELERYD_HIJACK_ROOT_LOGGER = False를 해줘야 하는지요?

celery의 동작과 관련한 모든 기본 출력을 django log에 함께 출력하는 방법이 있는지도 알고 싶습니다.

답변 1

0

미쿡엔지니어님의 프로필 이미지
미쿡엔지니어
지식공유자

2024. 07. 09. 10:39

안녕하세요 bluebamus님,

저는 보통 Celery를 k8s에서 각각의 worker pod으로 사용하고, Splunk나 다른 Log fowarder를 사용해 왔었는데, 인터넷에 찾아보니, 이런 자료들이 있네요.

말씀하신대로 CELERYD_HIJACK_ROOT_LOGGER를 False로 설정하면 Celery가 기본 logger를 가져가서 사용하지 않습니다. 이를 통해 Django의 기본 로거 설정을 유지할 수 있습니다. 이 설정이 없으면 Celery가 root logger를 가로채서 Celery 자체의 로거로 사용하게 됩니다.

다음과 같이 사용하시면 될 듯 합니다.

# settings.py
CELERYD_HIJACK_ROOT_LOGGER = False

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
        },
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': 'django_celery.log',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console', 'file'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'celery': {
            'handlers': ['console', 'file'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}

# celery.py
import logging.config
from django.conf import settings

logging.config.dictConfig(settings.LOGGING)

app = Celery('your_project_name')

# your existing Celery settings

# Ensure the logging configuration is used by Celery
app.conf.update(
    worker_hijack_root_logger=False,
)
bluebamus님의 프로필 이미지
bluebamus
질문자

2024. 07. 10. 01:18

감사합니다. 덕분에 좋은 지식을 얻었습니다 ^^