2017-02-27 1 views
2

나는 공식 로깅 요리 책을 기반으로 간단한 예제를 시도했지만 결과는 예기치 않은 :파이썬 로깅 문제는

In [2]: logger.info("hello") 
In [3]: logger.error("bad") 

나중에 :

LOG_PATH = 'logs' 

logger = logging.getLogger(__name__) 

# Creates 2 Handlers to split log levels 
info_fh = logging.FileHandler(path.join(LOG_PATH, 'info_level.log')) 
info_fh.setLevel(logging.INFO) 
err_fh = logging.FileHandler(path.join(LOG_PATH, 'err_level.log')) 
err_fh.setLevel(logging.ERROR) 

# Create formatter and add it to the handlers 
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 
info_fh.setFormatter(formatter) 
err_fh.setFormatter(formatter) 

# add the handlers to logger 
logger.addHandler(info_fh) 
logger.addHandler(err_fh) 

가 그럼 난 콘솔에 쓰기

cat logs/err_level.log 
>>> 2017-02-27 13:16:40,328 - jive - ERROR - bad 

cat logs/info_level.log 
>>> 2017-02-27 13:16:40,328 - jive - ERROR - bad 

info_level.log 파일에 "hello"로그 레코드가없는 이유를 알 수 없습니다.

답변

3

아마도 logger의 레벨이 logging.INFO (20)보다 높음을 의미합니다. 이 값은 부모 로거에서 상속 수동

>>> logger.level 
0 # that means it is not set 
>>> logging.NOTSET 
0 
>>> logger.getEffectiveLevel() 
30 # value of parent because not set 
>>> logger.parent.level  
30 
>>> logging.INFO 
20 # < logger.getEffectiveLevel() -> not picked up 

설정 로거의 레벨 :

>>> logger.setLevel(logging.DEBUG) 
>>> logger.getEffectiveLevel() 
10 

가 이제 info 로그가 포착됩니다. Logger.getEffectiveLeveldocs :

이 로거의 유효 수준을 나타냅니다. NOTSET 이외의 값이 setLevel()을 사용하여 설정되면 반환됩니다. NOTSET이 아닌 값을 찾을 때까지 그렇지 않으면, 계층 구조는 루트쪽으로 횡단하고, 그 값이 다른 곳

을 반환됩니다 루트 로거 수준의 경고로 만들어집니다

참고.

+0

완벽한 설명을 주셔서 감사합니다. –