Python logging 예제
02 Feb 2022 | PythonPythong logging 모듈 사용하기
Python에 기본으로 내장된 logging 모듈에 대한 사용법입니다.
로그 레벨에 따라 debug, info, warning, error, critical의 5가지 등급이 있으며
이 중에서 warning는 warn이라는 메소드도 같이 존재합니다. warn은 deprecated 되었기 때문에,
가급적 warn은 사용하지 말고 warning을 사용하도록 주의합시다.
간단한 예제
import logging
def main():
logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('error')
logging.critical('critical')
if __name__ == '__main__':
logging.basicConfig(level=logging.DEBUG,
format='[%(asctime)s] [%(levelname)s] %(message)s (%(filename)s:%(lineno)d)')
main()
Colored logging 사용하기
여기에 색상을 입히는 코드를 적용해봅니다.
color_palette.py
# Reset RESET = '\033[0m' # Regular Colors BLACK = '\033[30m' RED = '\033[31m' GREEN = '\033[32m' YELLOW = '\033[33m' BLUE = '\033[34m' MAGENTA = '\033[35m' CYAN = '\033[36m' WHITE = '\033[37m' # Bold BOLD_BLACK = '\033[1;30m' BOLD_RED = '\033[1;31m' BOLD_GREEN = '\033[1;32m' BOLD_YELLOW = '\033[1;33m' BOLD_BLUE = '\033[1;34m' BOLD_MAGENTA = '\033[1;35m' BOLD_CYAN = '\033[1;36m' BOLD_WHITE = '\033[1;37m' # Underline UNDERLINE_BLACK = '\033[4;30m' UNDERLINE_RED = '\033[4;31m' UNDERLINE_GREEN = '\033[4;32m' UNDERLINE_YELLOW = '\033[4;33m' UNDERLINE_BLUE = '\033[4;34m' UNDERLINE_MAGENTA = '\033[4;35m' UNDERLINE_CYAN = '\033[4;36m' UNDERLINE_WHITE = '\033[4;37m' # High Intensity INTENSITY_BLACK = '\033[0;90m' INTENSITY_RED = '\033[0;91m' INTENSITY_GREEN = '\033[0;92m' INTENSITY_YELLOW = '\033[0;93m' INTENSITY_BLUE = '\033[0;94m' INTENSITY_MAGENTA = '\033[0;95m' INTENSITY_CYAN = '\033[0;96m' INTENSITY_WHITE = '\033[0;97m'
colored_log_handler.py
import logging
from color_palette import RESET, GREEN, WHITE, YELLOW, MAGENTA, RED
class ColoredLogHandler(logging.StreamHandler):
def __init__(self):
super().__init__()
self.setLevel(logging.DEBUG)
self.setFormatter(self.__LogFormatter())
class __LogFormatter(logging.Formatter):
__FORMAT_DEBUG = '[%(asctime)s] [%(levelname)s] %(message)s (%(filename)s:%(lineno)d)'
__FORMAT_INFO = '[%(asctime)s] [%(levelname)s] %(message)s'
__FORMAT_WARNING = '[%(asctime)s] [%(levelname)s] %(message)s'
__FORMAT_ERROR = '[%(asctime)s] [%(levelname)s] %(message)s'
__FORMAT_CRITICAL = '[%(asctime)s] [%(levelname)s] %(message)s (%(filename)s:%(lineno)d)'
FORMATS = {
logging.DEBUG: GREEN + __FORMAT_DEBUG + RESET,
logging.INFO: WHITE + __FORMAT_INFO + RESET,
logging.WARNING: YELLOW + __FORMAT_WARNING + RESET,
logging.ERROR: MAGENTA + __FORMAT_ERROR + RESET,
logging.CRITICAL: RED + __FORMAT_CRITICAL + RESET
}
def format(self, record):
log_fmt = self.FORMATS.get(record.levelno)
formatter = logging.Formatter(log_fmt)
return formatter.format(record)
main.py
import logging
from colored_log_handler import ColoredLogHandler
def main():
logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('error')
logging.critical('critical')
if __name__ == '__main__':
logging.basicConfig(level="DEBUG", handlers=[ColoredLogHandler()])
main()