2017-12-21 3 views
0

파이썬 로깅 모듈을 사용하고 있습니다. 나는 다음과 같은 데이터 파이썬 로깅 모듈 로깅 문제

def initialize_logger(output_dir): 
    ''' 
    This initialise the logger 
    :param output_dir: 
    :return: 
    ''' 
    root = logging.getLogger() 
    root.setLevel(logging.INFO) 
    format = '%(asctime)s - %(levelname)-8s - %(message)s' 
    date_format = '%Y-%m-%d %H:%M:%S' 
    if 'colorlog' in sys.modules and os.isatty(2): 
     cformat = '%(log_color)s' + format 
     f = colorlog.ColoredFormatter(cformat, date_format, 
             log_colors={'DEBUG': 'green', 'INFO': 'green', 
                'WARNING': 'bold_yellow', 'ERROR': 'bold_red', 
                'CRITICAL': 'bold_red'}) 
    else: 
     f = logging.Formatter(format, date_format) 
    #ch = logging.FileHandler(output_dir, "w") 
    ch = logging.StreamHandler() 
    ch.setFormatter(f) 
    root.addHandler(ch) 

하나의 StreamHandler가로

을 가진 파일을 초기화하는,하지만 나는

INFO:root:clearmessage:%ss1=00 

2017-12-21 17:07:20 - INFO  - clearmessage:%ss1=00 

INFO:root:clearmessage:%ss2=00 

2017-12-21 17:07:20 - INFO  - clearmessage:%ss2=00 

모든 메시지가 RootInfo로 인쇄 될 때 내 콘솔에서 두 개의 지문을 얻고있다. 어떤 아이디어? 왜 내가 두 권의 지문을 얻는거야? 위의 코드에서는 색상 코드를 무시할 수 있습니다.

+1

initialize_logger()를 두 번 호출 할 수도 있습니다. – Humbalan

+0

두 메시지는 diff 메시지 형식으로 인쇄됩니다. addHandler (logging.NullHandler())와 같은 또 다른 구문을 호출하려고합니다. 문제가 발생합니다. – Nitesh

답변

1

처리기가 있어야합니다.

root.handlers = [] 
root.addHandler(ch) 
+0

예. 코드에서 어딘가에 두 번 호출 할 수 있습니다. 그러나 효과가있었습니다. 파이썬에서 html 로거에 대해 아는 것이 있습니까? – Nitesh

+0

'getLogger()'호출이 암시 적으로 핸들러를 생성 할 것이라고 생각합니다. – clemens