2016-06-09 5 views
0

이 스 니펫은 ERROR 레벨 이상을 콘솔에 넣고 DEBUG 이상을 로그 파일에 넣는 로깅 필터를 만듭니다. 내가 알아낼 수없는 것은 동일한 로그 파일에 쓰기 위해 여러 가지 모듈에서 해당 구성을 다시 사용하는 방법이지만 이름은이며 메시지를 생성 한 모듈을 올바르게 나타냅니다.파이썬 모듈간에 로깅 설정 재사용

미리 감사드립니다.

import logging 


default_formatter = logging.Formatter(
    "%(asctime)s:%(name)s:%(levelname)s:%(message)s") 

console_handler = logging.StreamHandler() 
console_handler.setLevel(logging.ERROR) 
console_handler.setFormatter(default_formatter) 

file_handler = logging.FileHandler("error.log", "a") 
file_handler.setLevel(logging.DEBUG) 
file_handler.setFormatter(default_formatter) 

noralog = logging.getLogger(__name__) 
noralog.setLevel(logging.DEBUG) 
noralog.addHandler(console_handler) 
noralog.addHandler(file_handler) 

noralog.debug('PUT ME ONLY IN THE FILE') 
noralog.error('STREAM AND FILE') 

답변

0

이것은 작동하는 것 같다,하지만 난 그게 최선의 해결책이다 확실하지 않다 : # 데프 (localName를) setup_logging 을 noralog.py : 수입 기록을

default_formatter = logging.Formatter(
      "%(asctime)s:%(name)s:%(levelname)s:%(message)s") 

    console_handler = logging.StreamHandler() 
    console_handler.setLevel(logging.ERROR) 
    console_handler.setFormatter(default_formatter) 

    file_handler = logging.FileHandler("error.log", "a") 
    file_handler.setLevel(logging.DEBUG) 
    file_handler.setFormatter(default_formatter) 

    noralog = logging.getLogger(localname) 
    noralog.setLevel(logging.DEBUG) 
    noralog.addHandler(console_handler) 
    noralog.addHandler(file_handler) 
    return noralog 


#othermod.py 
import noralog 

ff = noralog.setup_logging(__name__) 
ff.debug('PUT THIS ONLY IN FILE LOG') 
ff.error('PUT THIS IN STREAM AND FILE LOG')