모든 셀러리 작업의 로그 메시지를 단일 파일로 전송
더 구체적인 로깅 시스템을 설정하는 방법이 궁금합니다. 내 모든 작업은
logger = logging.getLogger(__name__)
모듈 전체의 로거로.
셀러리가 "celeryd.log"에 기록하고 내 작업을 "tasks.log"에 기록하고 싶지만이 작업을 수행하는 방법을 모르겠습니다. CELERYD_LOG_FILE
django-celery에서 사용하면 모든 celeryd 관련 로그 메시지를 celeryd.log로 라우팅 할 수 있지만 내 작업에서 생성 된 로그 메시지의 흔적은 없습니다.
참고 :이 답변은 이제 get_task_logger()
작업 별 로거를 설정하는 데 사용 하는 Celery 3.0에서 구식 입니다. 자세한 내용 은 Celery 3.0의 새로운 기능 문서의 로깅 섹션 을 참조하십시오.
Celery는 작업별로 로깅을 전담 지원합니다. 주제에 대한 태스크 문서를 참조하십시오 .
작업자 로거를 사용하여 작업자 로그에 진단 출력을 추가 할 수 있습니다.
@celery.task() def add(x, y): logger = add.get_logger() logger.info("Adding %s + %s" % (x, y)) return x + y
몇 가지 로깅 수준을 사용할 수 있으며 작업자 로그 수준 설정은 로그 파일에 기록할지 여부를 결정합니다.
물론 표준 출력 / 오류에 기록 된 모든 내용이 로그 파일에도 기록되므로 단순히 print를 사용할 수도 있습니다.
내부적으로 이것은 모두 여전히 표준 파이썬 로깅 모듈입니다. 당신은 설정할 수있는 CELERYD_HIJACK_ROOT_LOGGER
옵션을 달리 셀러리 당신을위한 처리를 구성합니다 작업에 자신의 로깅 설정을 허용 false로한다.
그러나 작업의 경우 .get_logger()
호출을 통해 개별 작업별로 별도의 로그 파일을 설정할 수 있습니다. 단순히 logfile
인수를 전달하면 로그 메시지를 별도의 파일로 라우팅합니다.
@celery.task()
def add(x, y):
logger = add.get_logger(logfile='tasks.log')
logger.info("Adding %s + %s" % (x, y))
return x + y
마지막으로, 파이썬 로깅 모듈 에서 최상위 패키지를 구성 하고 자체 파일 처리기를 제공 할 수 있습니다. celery.signals.after_setup_task_logger
신호를 사용하여 이것을 설정했습니다 . 여기에서는 모든 모듈이 foo.tasks
(및에서 foo.tasks.email
와 같이 foo.tasks.scaling
) 라는 패키지에 있다고 가정합니다 .
from celery.signals import after_setup_task_logger
import logging
def foo_tasks_setup_logging(**kw):
logger = logging.getLogger('foo.tasks')
if not logger.handlers:
handler = logging.FileHandler('tasks.log')
formatter = logging.Formatter(logging.BASIC_FORMAT) # you may want to customize this.
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.propagate = False
after_setup_task_logger.connect(foo_tasks_setup_logging)
이제 이름이로 시작하는 foo.tasks
모든 tasks.log
로거는 루트 로거 대신 전송 된 모든 메시지를 갖게 됩니다 ( .propagate
False 이기 때문에 이러한 메시지를 볼 수 없음 ).
힌트 : Celery에는 자체 로깅 처리기가 있습니다.
from celery.utils.log import get_task_logger
logger = get_task_logger(__name__)
또한 Celery는 작업의 모든 출력을 기록합니다. 작업 로깅을위한 Celery 문서에 대한 자세한 내용
참고 URL : https://stackoverflow.com/questions/6192265/send-log-messages-from-all-celery-tasks-to-a-single-file
'Development Tip' 카테고리의 다른 글
자바 스크립트 : indexOf 대 일치 문자열 검색? (0) | 2020.11.21 |
---|---|
사용 가능한 모든 matplotlib 백엔드 목록 (0) | 2020.11.21 |
div가 나머지 높이를 차지하도록 만드는 방법은 무엇입니까? (0) | 2020.11.21 |
Enum.HasFlag를 그렇게 느리게 만드는 것은 무엇입니까? (0) | 2020.11.21 |
JavaScript 객체를 "잠금"하면 성능상의 이점이 있습니까? (0) | 2020.11.21 |