2017-11-20 1 views
1

내가 파일에 메시지를 기록하기 위해 아래의 코드를 작성하고는 :파이썬 로깅 문제가 있습니까?

#!/usr/bin/python3 

import logging 

## init logger 
logger = logging.getLogger(__name__) 

## create handler file 
handler = logging.FileHandler('mylog3.log') 

## set log level 
handler.setLevel(logging.INFO) 

## add handler to logger 
logger.addHandler(handler) 

l = [1, 2, 3, 4] 
i = 3 

logger.info('This is an info message') 
logger.warning('This is a warning message') 
logger.debug('This is a debug message. I=%d l=%s', i, l) 
logger.error('This is an error message. l =%s', l) 
logger.fatal('This is a fatal error message') 

내가보고하고 문제는 상관없이 내가주는 어떤 설정, 항상 파일의 경고, 오류 및 치명적 오류 메시지를 출력하지 않는다는 것이다. 디버그 및 정보 메시지는 기록되지 않습니다.

나는 Windows에서 PyCharm과 우분투 리눅스 파이썬 3에서 문제가 발생하고 있음을 확인했다. 그래서, 나는 틀린 일을해야만한다. 그것은 무엇 일 수 있는가? 나는 손실에있다!

+0

질문에 답변 한 경우 제 답변을 허용으로 표시하십시오. –

답변

1

로거와 핸들러에는 모두 레벨이 있습니다. 로거가 아닌 핸들러의 레벨을 설정했습니다. 기본값은 WARNING입니다. 예를 들면 (당신이 logging.INFO에 핸들러의 레벨을 설정하는 경우) logger.setLevel(logging.DEBUG), 당신은 (당신이 모든 핸들러에 레벨을 설정하지 않은 경우)뿐만 아니라 DEBUGINFO 메시지를 참조하거나 INFO 메시지가 아니라 DEBUG 메시지해야한다.

로깅의 정보 흐름에 대한 자세한 내용은 this diagram을 참조하십시오.

+0

명확하게 해주셔서 감사합니다. 이제 예상대로 작동합니다. – whirlaway

1

handler.setLevel(logging.INFO) 라인 때문에 디버그 및 정보 메시지가 표시되지 않습니다. 이로 인해 레벨 logging.INFO 이하 (정보 및 디버그 만 표시)의 모든 메시지가 표시되지 않습니다. 이 문제를 해결하기 위해 loggign.INFOlogging.NOTSET으로 대체 할 수 있습니다.

+0

줄을 제거하더라도 경고 및 오류 메시지 만 인쇄합니다. – whirlaway

+0

@whirlaway 기본 레벨은'WARNING'입니다. –

+0

'handler.setLevel (logging.INFO)'을 제거해도 문제가 해결되지 않습니다. –