2014-01-14 3 views
9

일부 로그를 작성하기 위해 파이썬에서 로깅을 사용하려고했지만, 이상하게도 error 만 기록되며 설정 한 레벨에 관계없이 info은 무시됩니다.파이썬 로거가 작동하지 않습니다.

번호 :

import logging 
import logging.handlers 

if __name__ == "__main__": 
    logger = logging.getLogger() 
    fh = logging.handlers.RotatingFileHandler('./logtest.log', maxBytes=10240, backupCount=5) 
    fh.setLevel(logging.DEBUG)#no matter what level I set here 
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 
    fh.setFormatter(formatter) 
    logger.addHandler(fh) 
    logger.info('INFO') 
    logger.error('ERROR') 

결과가 :

2014-01-14 11:47:38,990 - root - ERROR - ERROR 

http://docs.python.org/2/library/logging.html#logging-levels

INFO 따르면 너무 기록한다.

답변

15

로거의 레벨은 여전히 ​​기본값으로 설정되어 있습니다. 따라서 로거는 핸들러에 도착하기 전에 메시지를 버립니다. 핸들러가 메시지를받은 경우 핸들러가 메시지를 수락했다는 사실은 중요하지 않습니다. 메시지를받지 못하기 때문입니다.

그래서, 그냥이 추가 : the docs으로

logger.setLevel(logging.INFO) 

설명, 로거의 기본 레벨이 NOTSET, 그것은 WARNING의 기본이있는 루트는 부모와 함께 확인을 의미합니다.

처리기를 기본값 인 NOTSET으로두면 처리기가 필터링됨을 의미합니다.

3

정확한 임계 값을 설정해야 할 수도 있습니다.

logger.setLevel(logging.INFO) 
+1

글쎄, 그는 임계 값을 설정하지 않았습니다 ... 올바른 것이 아닙니다. – abarnert

+0

사실 ..하지만 당신의 대답은 더 간결합니다. 나는 시도했다 :-) –

관련 문제