안녕하세요. 오늘은 logger를 만들어 보겠습니다.
logger는 파이썬에서 프로그램 만들어서 사용할 때 log를 남겨,
프로그램에 버그가 생겼을 때, 남겨진 log로 디버깅을 할 수 있는 유용한 방법입니다.
오늘은 logger를 생성하는 함수를 만들어 해당 함수를 불러옴으로써 logger를 생성하고 log를 남기는 방법을 공유하겠습니다.
테스트 파일은 위 세 파일입니다.
output.log는 log를 남기는 파일
utils.py는 log를 가져오는 함수가 들어있는 파일
test.py는 log를 테스트하는 파일입니다.
utils.py -> test.py -> output.log 파일 순으로 보겠습니다.
1. logger 생성 함수
utils.py 파일에 아래와 같이 코드를 입력합니다.
import logging
def getLogger(logger_name):
logger = logging.getLogger(logger_name)
if len(logger.handlers) > 0:
return logger
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter('[%(levelname)s|%(name)s|%(filename)s:%(lineno)s] %(asctime)s > %(message)s')
streamHandler = logging.StreamHandler()
streamHandler.setFormatter(formatter)
logger.addHandler(streamHandler)
file_handler = logging.FileHandler('./output.log')
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
return logger
코드를 조금 뜯어보겠습니다.
logger_name : 본인이 설정하는 logger 이름 (마음대로 문자를 넣으시면 됩니다.)
if len(logger.handlers) > 0 : 이전에 해당 logger_name으로 생성된 적이 있으면 그 logger를 그대로 반환합니다.
중복으로 logger가 생성되는 것을 방지하기 위함입니다.
logger.setLevel(logging.DEBUG) : log의 level을 설정해주는 코드입니다.
DEBUG < INFO < WARNING < ERROR < CRITICAL입니다.
예를 들어 DEBUG로 설정 시 모든 종류의 log가 남고
INFO로 설정 시 DEBUG 로그는 남지 않게 됩니다.
formatter = logging.Formatter('...') : log의 형태를 결정해줍니다. 사용할 수 있는 포맷의 종류는 아래와 같습니다.
형식 | 내용 | 예시 |
%(asctime)s | 날짜, 시간 | 2022-10-23 20:24:07,003 |
%(created)f | 생성 시간 | 1666525752.700142 |
%(filename)s | 파일명 | test.py |
%(funcName)s | 함수명 | <module> |
%(levelname)s | 로그레벨 | DEBUG, INFO, WARNING, ERROR, CRITICAL |
%(levelno)s | line 넘버 | 5 |
%(module)s | 모듈 이름 | test |
%(msecs)d | 생성 시간 中 밀리세컨드 | 700 |
%(message)s | 로그 메시지 | (직접 적은 메시지 출력) |
%(name)s | 로그 이름 | test_logger |
%(pathname)s | 소스 경로 | d:\python\logging\test.py |
%(process)d | 프로세스 ID | 10712 |
%(processName)s | 프로세스 이름 | Mainprocess |
%(thread)d | Thread ID | 27512 |
%(threadName)s | Thread Name | MainThread |
포맷의 종류는 위와 같고, 간단한 logger 사용 시 쓰면 좋을 포맷을 파란색으로 표시하였습니다.
위 포맷의 종류를 골라 아래 예시처럼 사용하시면 됩니다.
file_handler = logging.FileHandler('./output.log')
log를 저장 할 파일 경로를 설정해주는 코드입니다.
위처럼 추가된 Handler는 addHandler로 logger에 추가해주면 됩니다.
로그를 생성하는 함수를 만들었으니 이제 이용해보겠습니다.
2. logging 테스트
import utils
logger = utils.getLogger('test_logger')
logger.info('log')
logger.debug('log')
logger = utils.getLogger('test_logger')
logger.info('log2')
앞에서 생성한 파일을 import한 후 test_logger의 이름으로 logger를 가져옵니다.
logger.info('log') 처럼 log를 남기기만 하면 됩니다. info, debug 는 log level 입니다.
두번째 utils.getLogger를 실행 시에는 이미 만들어진 logger가 있으므로 있는 logger를 리턴 후 사용하게 됩니다.
3. log 결과 확인
위 test.py 코드를 실행하면 아래와 같이 output.log 파일에 로그가 남고 콘솔창에도 같은 결과가 남게 됩니다.
프로그램 실행 시 문제가 생겼을 때, 위와 같이 로그를 확인하여 어디까지 실행됐는지, 어디서 문제가 발생하였는데 디버깅이 가능합니다.
'프로그래밍 > Python' 카테고리의 다른 글
[파이썬, Python] csv 파일 불러오기 (open, close, with) (0) | 2023.01.17 |
---|---|
[파이썬, Python] 텍스트 파일 불러오기 (open, close, with) (0) | 2023.01.17 |
[파이썬, Python] plot style 변경 (0) | 2023.01.17 |
[파이썬, Python] 이중 for 문 한 줄로 만들기 (0) | 2023.01.17 |
[파이썬, Python] 실행파일(.exe) 만들기 (Pyinstaller, VSCode) (0) | 2022.10.20 |