본문 바로가기
기록/Python

[Python] 파이썬 로그 찍는 방법 및 오류 해결

by 자임 2022. 10. 14.

 

### log 세팅
import logging

def get_logger(name=None):
    # 1 logger instance를 만듭니다.
    logger = logging.getLogger(name)

    # 2 logger의 level을 가장 낮은 수준인 DEBUG로 설정합니다.
    logger.setLevel(logging.DEBUG)

    # 3 formatter 지정하여 log head를 구성해줍니다.
    ## asctime - 시간정보
    ## levelname - logging level
    ## funcName - log가 기록된 함수
    ## lineno - log가 기록된 line
    formatter = logging.Formatter("%(asctime)s - %(levelname)s - [%(funcName)s:%(lineno)d] - %(message)s")

    # 4 handler instance 생성하여 console 및 파일로 저장할 수 있도록 합니다. 파일명은 txt도 됩니다.
    console = logging.StreamHandler()
    file_handler_debug = logging.FileHandler(filename="log_debug.log", encoding='utf-8')
    file_handler_error = logging.FileHandler(filename="log_error.log", encoding='utf-8')

    # 5 handler 별로 다른 level 설정합니다. 설정한 level 이하 모두 출력,저장됩니다.
    console.setLevel(logging.INFO)
    file_handler_debug.setLevel(logging.DEBUG)
    file_handler_error.setLevel(logging.ERROR)

    # 6 handler 출력을 format 지정방식으로 합니다.
    console.setFormatter(formatter)
    file_handler_debug.setFormatter(formatter)
    file_handler_error.setFormatter(formatter)

    # 7 logger에 handler 추가합니다.
    logger.addHandler(console)
    logger.addHandler(file_handler_debug)
    logger.addHandler(file_handler_error)

    # 8 설정된 log setting을	반환합니다.
    return logger


로그 코드 : https://leftday.tistory.com/14



오류1.

logger.info("response ", status)
이렇게 하면 오류남

logger.info("response status")
logger.info(status)
하나씩만 가능



오류2. attributeerror: 'logger' object has no attribute 'error'

log 찍을 때 logger.error(response) 이런식으로 소문자로 써야하는데 대문자(ERROR)로 써서 난 오류였음

출처 : https://stackoverflow.com/questions/44135225/attributeerror-logger-object-has-no-attribute-warning



오류3. 콘솔에는 오류메시지 한글로 제대로 찍히는데 .log 파일에는 한글이 다 깨져서 나옴

file_handler_debug = logging.FileHandler(filename="log_debug.log", encoding='utf-8')
file_handler_error = logging.FileHandler(filename="log_error.log", encoding='utf-8')

FileHandler 쪽에 인코딩 명시해주면 됨

출처 : https://selfdevelope.tistory.com/809




+ 참고
DEBUG : 상세한 정보. 보통 문제를 진단할 때만 필요합니다.
INFO : 예상대로 작동하는지에 대한 확인.
WARNING : 예상치 못한 일이 발생했거나 가까운 미래에 발생할 문제(예를 들어 ‘디스크 공간 부족’)에 대한 표시. 소프트웨어는 여전히 예상대로 작동합니다.
ERROR : 더욱 심각한 문제로 인해, 소프트웨어가 일부 기능을 수행하지 못했습니다.
CRITICAL : 심각한 에러. 프로그램 자체가 계속 실행되지 않을 수 있음을 나타냅니다.

출처 : https://docs.python.org/ko/3/howto/logging.html