작성
·
138
·
수정됨
1
django의 logger를 사용해 log를 출력하는 경우
CELERYD_HIJACK_ROOT_LOGGER = False를 해줘야 하는지요?
celery의 동작과 관련한 모든 기본 출력을 django log에 함께 출력하는 방법이 있는지도 알고 싶습니다.
답변 1
0
안녕하세요 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,
)
감사합니다. 덕분에 좋은 지식을 얻었습니다 ^^