파이썬에서 로그를 남기는 방법 | 로깅하는 법

파이썬은 어떻게 로깅을 할까?

컴퓨터 시스템을 개발하다 보면 수많은 이슈와 버그를 맞닥뜨리게 됩니다. 저의 경우에는 “임베디드 리눅스” 혹은 “리눅스” 기반의 시스템을 주로 개발했었는데 개발했던 제품이 문제가 생겼을 때 원인을 파악하기 위해 확인하였던 정보는 “로그(log)” 였습니다.

로그는 시스템에 파일로 예외사항이나 이용 내역들을 시간 순서대로 기록한 내용들입니다. 이들 로그들은 시스템이 동작하면서 자동적으로 기록을 하기 때문에 시스템에 문제점이 발생시에 원인 파악에 주로 이용이 되고 있는 정보입니다.

시스템의 오류나 버그에 필수적인 요소는 “로그” 이다. – pixabay

따라서 시스템 개발을 위해서는 반드시 “로그” 를 코드 중간중간에 넣어주는게 필요합니다. 그래야 추후 소프트웨어의 문제점 파악이 수월해지며 이슈를 해결하는데 많은 도움이 됩니다.

리눅스에서는 커널이나 시스템의 로깅을 기본적으로 해주고 있습니다. 또한 “logger( )” 라는 함수를 이용하면 손쉽게 로깅이 가능합니다.

그런데 “파이썬” 코드는 로깅을 어떻게 해야 할까요? 파이썬으로 로깅을 하는 방법에 대해 알아보겠습니다.

파이썬 로그 사용 예제 코드

파이썬으로 로그를 사용하는 방법은 그리 어렵지 않습니다. 일단 아래 코드를 살펴보시기 바랍니다.

#-*- coding: utf-8 -*-
import logging
import logging.handlers

class CodedosaLogger:
	def __init__(self, parent=None):
		self.logger = logging.getLogger('[머릿글]')
		self.filename = 'log/codedosa_app.log'
		self.fileMaxByte = 1024 * 1024 * 100 #100MB
		self.fileHandler = logging.handlers.RotatingFileHandler(self.filename, maxBytes=self.fileMaxByte, backupCount=10)
		self.fomatter = logging.Formatter('[%(levelname)s|%(filename)s:%(lineno)s] %(asctime)s > %(message)s')
		
		self.fileHandler.setFormatter(self.fomatter)
		self.logger.addHandler(self.fileHandler)

		self.logger.setLevel(logging.DEBUG)
		
	def debug(self, str):
		self.logger.debug(str)
		
	def info(self, str):
		self.logger.info(str)
		
	def warning(self, str):
		self.logger.warning(str)
		
	def error(self, str):
		self.logger.error(str)
		
	def critical(self, str):
		self.logger.critical(str)

if __name__ == '__main__':
	log = CodedosaLogger()
        log.debug("오류 발생!")

제가 사용하고 있는 파이썬 로깅 관련 class 입니다. 파이썬에서는 기본적으로 logging 이라는 모듈이 제공됩니다. 이 모듈은 별도로 설치를 할 필요가 없습니다.

위 코드에서 __init__( ) 에는 로그와 관련된 설정 내역들이 있습니다. 로그의 머릿글, 로그파일의 경로, 최대 파일 크기, 로그의 포맷 등을 설정이 가능합니다. 이 포맷들은 내가 적절히 설정하여 사용하면 되겠습니다.

위 코드에서도 로그 레벨의 정의가 되어 있습니다. 로그 레벨은 다음과 같습니다.

레벨에 따라서 사용 용도가 약간은 차이가 있습니다. 개발 단계에서는 DEBUG 레벨로 설정을 주로 하지만 어느 정도 안정화가 되면 WANING 이상으로 로깅을 하게 변경을 해도 됩니다.

파이썬 로깅 관련해서 좀더 자세한 내용을 알고 싶다면 위의 문서를 참고하시기 바랍니다.

위 코드의 __main__ 부분에는 로그 사용법을 간단히 표시 했습니다. 클래스를 호출하여 해당 로깅 함수에 메시지를 넣어주면 로깅이 됩니다. 다른 레벨의 함수도 사용은 동일합니다.

위 로그 소스의 class 를 import 하여 제가 현재 구동하고 있는 파이썬 데몬 로그의 모습입니다. 파일의 이름과 날짜, 시간, 메세지 순으로 로깅이 된것을 볼 수 있습니다. 날짜와 시간은 자동으로 로깅이 됩니다.

파이썬으로 로깅을 하는게 별로 어렵지 않죠?^^

'코드도사(codedosa.com)'에는 쿠팡파트너스 등의 제휴링크가 포함되어 있으며 수수료를 제공받을 수 있습니다.