도라에몽주머니

[Python] logging 모듈을 사용해 실행 로그 파일 남기기 본문

Study/Python

[Python] logging 모듈을 사용해 실행 로그 파일 남기기

에몽쓰 2025. 3. 11. 17:54

안건에서 로그 내역을 남겨 에러 메세지를 관리할 필요가 있어, logging 모듈의 사용법이나 작성 방법 등을 정리해보려고 한다.

https://docs.python.org/ko/3.13/howto/logging.html

 

Logging HOWTO

Author, Vinay Sajip <vinay_sajip at red-dove dot com>,. This page contains tutorial information. For links to reference information and a logging cookbook, please see Other resources. Basic Logging...

docs.python.org

 

로그(Log)

로그(Log) 란 컴퓨터 시스템, 애플리케이션, 네트워크 등에서 발생하는 모든 일에 대한 기록을 말한다. 로그는 보통 시스템에서 문제가 발생했을 때나 사고가 생겼을 때, 어디에서 언제 문제가 발생했는지 파악할 수 있도록 하기 위해 작성된다. 뿐만 아니라, 로직이 의도한 대로 흐르고 있는지 등을 확인할 때에도 로그가 사용된다.

로깅(Logging)

로깅은 쉽게 말하면 로그를 작성하는 것이다. 단순히 오류 메세지나 값을 확인하기 위해 print()를 사용해 콘솔에서 내용을 확인해 볼 수도 있지만, 해당 내용이 warning인지, 에러인지, 확인을 위한 값을 출력한 것인지를 알기는 어렵기 때문에 logging 모듈을 사용해서 알기 쉽게 정리할 필요가 있다.

getLogger

getLogger는 로거에 접근할 때 사용하는 메소드이다. 여러 개의 로거를 만들고 싶은 경우에 주로 사용한다.

아래의 코드와 같이 각각의 로거를 정의할 수 있다.

import logging

logger1 = logging.getLogger('logger1')
logger2 = logging.getLogger('logger2')

Log Level

Log level은 로그의 심각한 정도를 나타낸다. 기본적으로 파이썬에서 제공하는 로그의 기준 레벨은 아래와 같다.

수준 (Level) 설명
DEBUG (문제 해결에 필요한) 상세한 정보
INFO 예상대로 동작하는지에 대한 확인
WARNING 예상치 못한 일이 발생했거나 앞으로 발생할 가능성이 있는 문제에 대한 표시 (소프트웨어는 제대로 동작하지만 경고 표시)
ERROR WARNING보다 심각한 문제로 인해 소프트웨어가 일부 기능을 동작하지 못하고 중지
CRITICAL 심각한 에러로 인해 프로그램이 작동하지 못하고 중지

 

기본값은 WARNING으로 설정되어 있어서 로그 수준을 명시하지 않으면 WARNING, ERROR, CRITICAL에 해당하는 내용들이 로그로 기재된다.

 

basicConfig

로그의 기본 설정을 하는 함수이다. 이 함수를 통해 로그를 기록할 파일을 설정하거나, 최소 레벨을 설정하거나, 출력 형식을 정의하는 등 기본 설정을 정의할 수 있다.

logging.basicConfig(
    filename="log_file.log" # 로그를 기록할 파일 경로
    encoding='utf-8' # 인코딩 설정
    level=logging.ERROR # 로그 레벨을 설정(여기에서는 ERROR)
    format="[ %(asctime)s | %(levelname)s ] %(message)s", # 로그에 날짜, 레벨, 메시지를 포함
    datefmt="%Y-%m-%d %H:%M:%S" # 날짜 형식을 'YYYY-MM-DD HH:MM:SS'로 설정
)

 

로그 파일 예제

이제 로그 파일을 작성하는 코드를 써보자. 예시 코드는 함수 형태로 작성해볼 것이다.

 

우선 로깅을 설정하는 함수인 setup_logger부터 작성해보자. 이번에는 [ 2025-03-11 00:00:00  | DEBUG] 에러 메세지 의 형태로 로그를 기록한다.

import logging

def setup_logger(log_file: str, log_level=logging.DEBUG):
    """
    로깅을 설정하는 함수
    
    Args:
    	log_file: 로그 파일 경로
        log_level: 로깅 레벨 (기본값 : DEBUG)
    """
    logging.basicConfig(
        filename=log_file,            # 로그를 기록할 파일 경로
        level=log_level,              # 로그 레벨
        format="[ %(asctime)s | %(levelname)s ] %(message)s",  # 로그 포맷
        datefmt="%Y-%m-%d %H:%M:%S"   # 날짜 표기 포맷
        filemode='a'                  # 로그 파일에 추가 모드로 기록 (기본값: 'a' 추가 모드)
    )

 

이제 로깅 함수를 설정했으니 실제로 사용해보자.

def main():
    # 'example.log'라는 파일에 DEBUG 레벨로 로그 기록
    setup_logger('example.log', logging.DEBUG)
    
    # 다양한 레벨의 로그 메시지 기록
    logging.debug("디버그 메시지")           # [ 2025-03-11 00:00:00 | DEBUG ] 디버그 메시지 
    logging.info("정보 메시지")              # [ 2025-03-11 00:00:00 | INFO ] 정보 메시지
    logging.warning("경고 메시지")           # [ 2025-03-11 00:00:00 | WARNING ] 경고 메시지
    logging.error("오류 메시지")             # [ 2025-03-11 00:00:00 | ERROR ] 오류 메시지
    logging.critical("치명적 오류 메시지")   # [ 2025-03-11 00:00:00 | CRITICAL ] 치명적 오류 메시지
    
    # 추가적인 로깅 예시
    logging.info("로그 작성이 완료되었습니다.")  # [ 2025-03-11 14:30:04 | INFO ] 로그 작성이 완료되었습니다.

if __name__ == "__main__":
    main()

 

이런 방식으로 오류를 지속적으로 기록하고 추적해야 하는 프로젝트에 로깅을 활용할 수 있다. 다음 안건이나 프로젝트에서도 다시 활용해 볼 수 있었으면 좋겠다.