reload()를 사용하더라도 logging의 logger 객체에 Hanlder를 다중 등록하지 않습니다.
8068 단어 Python
아직 logging의 예쁜 사용법을 몰라요...이렇게 생각하면서 쓴 기사입니다.
양해 부탁드립니다.
개시하다
일반적인 Pytohon을 쓰면 우선
reload
함수를 사용하지 않습니다.하지만 DCC 도구 개발에 종사하고 싶은 TA와 디자이너의 말
reload()
은 본 적이 있다.(이번 기사는 파이톤3으로 쓰여져 3과에서 추천하지 않는
reload()
대신 사용importlib.reload()
.)하지만 간단한
reload()
를 사용하면 로거는 망가진다.#! python3
import logging
logger= logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
sh = logging.StreamHandler()
sh.setFormatter(logging.Formatter('%(levelname)s: %(message)s'))
logger.addHandler(sh)
def main():
pass
logger.debug("test")
if __name__ == '__main__':
main()
일반적문제 없어요.
그리고 해석기
import
로 모듈main()
을 실행한다.이거
reload()
다음에 해볼게main()
.네, 한 줄을 많이 썼어요.
reload()
재평가 모듈 때 재평가log.addHandler(sh)
했기 때문이다.이러한 상황을 피하기 위해서, 우리는logger가 사용하는 모듈을 분리해 보았다.
log.py
#! python3
import logging
def __gen_logger():
# これだとlog階層に集まってしまうので間違いですが、、
# 時間がないので見逃してください!
logger_ = logging.getLogger(__name__)
logger_.setLevel(logging.DEBUG)
sh = logging.StreamHandler()
sh.setFormatter(logging.Formatter('%(levelname)s: %(message)s'))
logger_.addHandler(sh)
return logger_
logger = __gen_logger()
def get_logger():
return logger
logger_sample.py#! python3
import log
def main():
logger = log.get_logger()
logger.debug("test")
if __name__ == '__main__':
main()
이러면 중복 안 돼요!
모듈을 분리하지 않는 방법
근데 매번 로그야.py와 같은 로거용 부모듈도 만들 수 있을 것 같아요.
최근에 나는 좋은 방법을 하나 찾았다.
#! python3
import logging
def get_logger():
logger_ = logging.getLogger(__name__)
if logger_.hasHandlers() is False:
logger_.setLevel(logging.DEBUG)
sh = logging.StreamHandler()
sh.setFormatter(logging.Formatter('%(levelname)s: %(message)s'))
logger_.addHandler(sh)
return logger_
def main():
logger = get_logger()
logger.debug("test")
if __name__ == '__main__':
main()
끝맺다
간단한 리로드()가 만든 스크립트 멸종하세요.
Reference
이 문제에 관하여(reload()를 사용하더라도 logging의 logger 객체에 Hanlder를 다중 등록하지 않습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/takumi_akashiro/items/749b9110bbd7d691986b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)