파이썬 logging 에서 setLevel 이 not work 할 때

728x90

삽질 30분

삽질 사유 

콘솔에 로그가 찍히도록 StreamHandler 를 추가하고, 파일에도 찍도록 FileHandler 를 추가했다.

정상적이게 콘솔에 찍히고, 파일에도 출력됩니다. 그런데, 나오지 않았던 다른 라이브러리에 debug 로그가 쭉 찍히는걸 보고 setLevel를 INFO 레벨로 설정했는데 왜 나오지? 했는데,

30분의 삽질 끝에 각 핸들러에도 로그 레벨 설정이 가능한걸 알았다.

import logging

from logging.handlers import TimedRotatingFileHandler


# 로그 생성
logger = logging.getLogger()

# 로그의 출력 기준 설정
logger.setLevel(logging.INFO) # 여기 설정 했는데 적용이 안된다!

# 로그 출력 형식
formatter = logging.Formatter('[%(asctime)s] [%(module)s] [%(lineno)d] [%(name)s] [%(levelname)s] - %(message)s')

# log 출력
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(formatter)
stream_handler.setLevel(logging.INFO) # 각 핸들러 마다 로그 레벨을 설정해주어야 한다.
logger.addHandler(stream_handler)


# log를 파일에 출력
file_handler = logging.FileHandler('./logs/my.log')
file_handler.setFormatter(formatter)
file_handler.setLevel(logging.INFO) # 각 핸들러 마다 로그 레벨을 설정해주어야 한다.
logger.addHandler(file_handler)

각각 추가한 핸들러에 로그 레벨을 지정해주어야 해당 핸들러 로그세팅에 적용이 됩니다.

 

반응형