2017-11-21 11 views
0

yaml을 사용하여 Python 응용 프로그램에 대한 로깅을 구성하고 있습니다.INFO가 디버그 로그에 기록되는 이유

version: 1 
disable_existing_loggers: False 

formatters: 
    standard: 
     format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s" 

handlers: 
    console: 
     class: logging.StreamHandler 
     level: DEBUG 
     formatter: standard 
     stream: ext://sys.stdout 

    info_file_handler: 
     class: logging.handlers.RotatingFileHandler 
     level: INFO 
     formatter: standard 
     filename: info.log 
     maxBytes: 10485760 # 10MB 
     backupCount: 20 
     encoding: utf8 

    error_file_handler: 
     class: logging.handlers.RotatingFileHandler 
     level: ERROR 
     formatter: standard 
     filename: errors.log 
     maxBytes: 10485760 # 10MB 
     backupCount: 20 
     encoding: utf8 

    debug_file_handler: 
     class: logging.handlers.RotatingFileHandler 
     level: DEBUG 
     formatter: standard 
     filename: debug.log 
     maxBytes: 10485760 # 10MB 
     backupCount: 20 
     encoding: utf8 

loggers: 
     db_ops: 
     level: DEBUG 
     handlers: [info_file_handler, error_file_handler, debug_file_handler] 
     propagate: true 

db_ops 모듈에서 I 로깅 상이한 레벨 모두 logger.infologger.debug 및를 사용한다. 앱을 실행할 때 INFO이 info.log에 출력되는 동안 INFODEBUG 메시지가 모두 debug.log에 출력됩니다.

수준에 따라 로그를 다른 파일로 구분하는 올바른 방법은 무엇입니까?

답변

3

파이썬 로거와 핸들러의 레벨은 임계 값입니다. 레벨을 DEBUG로 지정하면 이상이 DEBUG 이상이 기록됨을 의미합니다.

DEBUG 로깅 만하려면 DEBUG 메시지를 필터링하는 필터를 추가로 지정해야합니다.

+0

그래서 모든 파일을 동일한 파일에 출력하는 것이 좋습니다. 그런 식으로 서로 다른 파일에 중복 로그가 생기지 않습니까? – ddd

+0

로깅을 사용하는 방법에 따라 달라집니다. 로컬 개발을 위해 DEBUG 레벨을 활성화하는 것이 일반적인 패턴이지만, 노이즈 레벨을 줄이고 중요한 로그 만 (일반적으로 문제)하기 위해 INFO 이상을 프로덕션 환경에 설정하십시오. 그러나 다른 경우 로깅 요구 사항이 다를 수 있습니다. 예를 들어, 오류를 stderr로, 표준 출력을 stdout으로 출력하려고 할 수 있습니다. 그것에 대한 엄격한 규칙이 없습니다. 귀하의 경우 동일한 목적지에 모든 것을 기록하는 것만으로도 괜찮은 것 같습니다. – m1keil