파이썬 logging 라이브러리 setLevel이 잘 안 됩니다

조회수 258회

매 코드 작성 시 logging 라이브러리를 불러와 일일히 값을 정하는 게 귀찮아서 함수형으로 만들었습니다. 근데 레벨을 DEBUG로 했는데 warning 이상부터 메세지가 출력돼서 어디가 잘못된 건지 모르겠습니다. 제 코드에 문제가 있을까요?

import logging

def pr_logger(log_name, stream_lvl, file_lvl):
    logger = logging.getLogger(__name__)
    # logger.setLevel(eval('logging.{mutual_lvl}'))
    formatter = logging.Formatter('[%(levelname)s] [%(asctime)s] [%(message)s]', datefmt='%Y-%m-%d %H:%M:%S')

    stream_handler = logging.StreamHandler()
    stream_handler.setLevel(eval(f'logging.{stream_lvl}')) # 'DEBUG'
    stream_handler.setFormatter(formatter)

    file_handler = logging.FileHandler(f'{log_name}.log') # dop
    file_handler.setLevel(eval(f'logging.{file_lvl}')) # 'DEBUG'
    file_handler.setFormatter(formatter)

    logger.addHandler(stream_handler)
    logger.addHandler(file_handler)

    return logger


a = pr_logger('dop', 'DEBUG', 'DEBUG') # stream, file handler set DEBUG level
a.debug('debug') # msg 출력 x
a.info('info') # msg 출력 x
a.warning('warning') # msg 출력 o
a.error('error') # msg 출력 o
a.critical('critical') # msg 출력 o

>>> [WARNING] [2022-11-13 20:57:55] [warning]
>>> [ERROR] [2022-11-13 20:57:55] [error]
>>> [CRITICAL] [2022-11-13 20:57:55] [critical]

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기
    logger.setLevel(eval(f'logging.{stream_lvl}'))
    

    다시 보니 logger.setLevel을 빼셨네요

    print(logger)해보시면

    <Logger __main__ (WARNING)>
    

    이렇게 나와요. 기본값이 WARNING인듯..

    logger의 레벨과 handler의 레벨 중 높은게 적용되는 듯 해요

    • 하 너무 답답했는데 감사합니다 간단한 것이었군요 ㅠ 각 Handler에만 레벨지정하면 되는지 알았어요 김지용 2022.11.14 00:15

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)