2011-09-03 8 views
6

검색 좀하고 기본 문서 보았다, 그러나 이것은 기록의 세 줄을 생성하지 않는 이유를 알아낼 수 없습니다했습니다파이썬 크로스 모듈은 로깅

# main.py 
import logging 
import apple 
import banana 

log = logging.getLogger('main') 
log.setLevel(logging.DEBUG) 

ch = logging.StreamHandler() 
ch.setLevel(logging.DEBUG) 

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 
ch.setFormatter(formatter) 

log.addHandler(ch) 

log.info("I'm in main!") 
    # apple.py 
    import logging 
    
    log = logging.getLogger('main.apple') 
    log.info("I'm here in apple!") 
    
      # banana.py 
      import logging 
      
      log = logging.getLogger('main.banana') 
      log.info("I'm here in banana!") 
      
        # output 
        2011-09-03 16:40:54,062 - main - INFO - I'm in main! 
        

        그러나 example in the logging documentation은 정상적으로 작동합니다.

        아이디어가 있으십니까?

        답변

        9

        처리기 (StreamHandler)는 가져 오기 전까지 설정되지 않았습니다. 따라서 가져온 모듈의 로깅 명령은 출력을 생성하지 않습니다. 일부 처리기는 파일로 인쇄하고 다른 처리기는 네트워크를 통해 통신하고 일부는 콘솔로 인쇄합니다. 가져온 모듈의 로깅 문이 처리기를 로거에 추가하지 않고 수행 할 작업을 알 수있는 방법은 없습니다.

        모듈의 로깅 문이 링크 된 예제에서와 같이 클래스 또는 함수 내에있는 경우 모듈 클래스 또는 함수가 호출 될 때까지 처리기가 로거에 추가되었습니다.

        관련 문제