[PYTHON] 파이썬 로그로 두 번 나타나는 로그 메시지
PYTHON파이썬 로그로 두 번 나타나는 로그 메시지
파이썬 로깅을 사용하고 있으며, 어떤 이유로 모든 메시지가 두 번 나타나고 있습니다.
로깅을 구성하는 모듈이 있습니다.
# BUG: It's outputting logging messages twice - not sure why - it's not the propagate setting.
def configure_logging(self, logging_file):
self.logger = logging.getLogger("my_logger")
self.logger.setLevel(logging.DEBUG)
self.logger.propagate = 0
# Format for our loglines
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
# Setup console logging
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(formatter)
self.logger.addHandler(ch)
# Setup file logging as well
fh = logging.FileHandler(LOG_FILENAME)
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
self.logger.addHandler(fh)
나중에이 메서드를 호출하여 로깅을 구성합니다.
if __name__ == '__main__':
tom = Boy()
tom.configure_logging(LOG_FILENAME)
tom.buy_ham()
그리고 나서, buy_ham 모듈에서, 저는 전화를했습니다 :
self.logger.info('Successfully able to write to %s' % path)
그리고 어떤 이유로 모든 메시지가 두 번 나타나고 있습니다. 스트림 처리기 중 하나를 주석 처리했지만 여전히 똑같습니다. 별난 사람의 작은 조각 (왜 이것이 일어나고 있는지에 관해 명확히하지 않는다. .. 축 늘어져 라. 나는 명백한 것을 놓쳤다 고 가정한다.
건배, 승리자
해결법
-
==============================
1.configure_logging을 두 번 호출하고 있습니다 (아마도 Boy의 __init__ 메소드에서). getLogger는 동일한 객체를 반환하지만 addHandler는 유사한 핸들러가 이미 로거에 추가되었는지 확인하지 않습니다.
configure_logging을 두 번 호출하고 있습니다 (아마도 Boy의 __init__ 메소드에서). getLogger는 동일한 객체를 반환하지만 addHandler는 유사한 핸들러가 이미 로거에 추가되었는지 확인하지 않습니다.
해당 메소드에 대한 호출을 추적하고 이들 중 하나를 제거하십시오. Boy의 __init__ 메소드에서 False로 초기화 된 logging_initialized 플래그를 설정하고 logging_initialized가 True이면 configure_logging을 변경하여 아무것도 로깅하지 않으며 로거를 초기화 한 후에 True로 설정하십시오.
프로그램이 여러 개의 Boy 인스턴스를 생성하는 경우 글로벌 configure_logging 함수로 핸들러를 추가하는 방법과 self.logger 속성을 초기화하는 Boy.configure_logging 메소드 만 변경해야합니다.
이것을 해결하는 또 다른 방법은 로거의 핸들러 속성을 확인하는 것입니다.
logger = logging.getLogger('my_logger') if not logger.handlers: # create the handlers and call logger.addHandler(logging_handler)
-
==============================
2.핸들러는 외부에서 전화 할 때마다 추가됩니다. 작업을 마친 후에 핸들러 제거를 시도하십시오.
핸들러는 외부에서 전화 할 때마다 추가됩니다. 작업을 마친 후에 핸들러 제거를 시도하십시오.
self.logger.removeHandler(ch)
-
==============================
3.저는 파이썬 초보자입니다. 그러나 이것은 저에게 효과적이었습니다 (Python 2.7).
저는 파이썬 초보자입니다. 그러나 이것은 저에게 효과적이었습니다 (Python 2.7).
while logger.handlers: logger.handlers.pop()
-
==============================
4.이 문제가 발생하고 처리기를 두 번 추가하지 않으면 abarnert의 대답을 참조하십시오.
이 문제가 발생하고 처리기를 두 번 추가하지 않으면 abarnert의 대답을 참조하십시오.
문서에서 :
따라서 "test"에 대한 커스텀 핸들러를 원한다면, 그 핸들러가 루트 핸들러로가는 것을 원치 않는다면 대답은 간단합니다 : propagate 플래그를 끄십시오 :
logger.propagate = False
from https://stackoverflow.com/questions/6729268/log-messages-appearing-twice-with-python-logging by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] import 문 앞에 pythonpath를 설정하십시오. (0) | 2018.10.25 |
---|---|
[PYTHON] Python 3 - 4GB보다 큰 바이트 객체를 처리 할 수 있습니까? (0) | 2018.10.25 |
[PYTHON] 키에 특정 문자열이 들어있는 파이썬 사전의 항목 필터링 (0) | 2018.10.25 |
[PYTHON] except 블록을 테스트하기 위해 예외를 발생시키는 함수 조롱 (0) | 2018.10.25 |
[PYTHON] 떠 다니는 '.0'을 떠내려 라. (0) | 2018.10.25 |