본문 바로가기

아이티 :D/Python

파이썬 로깅모듈을 이용한 커스텀 logger 만들기

Python logging 라이브러리를 활용해서 Custom Logger를 아래와 같이 간단하게 만들어보았습니다.

개발할때 중요한게 참 많지만 그중에서 디버깅과 로깅은 정말 중요하다고 할 수 있죠.

적절한 로깅은 디버깅을 한결 편리하게 해주니 우리모두 로깅을 남발하지 말고 적절하게 사용합시다 :D..


from __future__ import absolute_import
import os,sys
from logging import getLogger, StreamHandler, FileHandler, Formatter, DEBUG, INFO
from logging.handlers import TimedRotatingFileHandler

class Logger(object):

def __init__(self, logtype=None, logname=None, loglevel=None, filename=None \
,rollover=None, interval=None, backupcount=None):
self.logtype = logtype
self.logname = logname
self.loglevel = loglevel
self.filename = filename
self.rollover = rollover
self.interval = interval
self.backupcount = backupcount
self.defaultformat = Formatter('[%(asctime)s] %(process)d %(levelname)s in %(module)s: %(message)s')
def SetDefault(self):
if self.logtype == None:
self.logtype = 'ALL'
if self.logname == None:
self.logname = 'AppLog'
if self.loglevel == None:
self.loglevel = 'DEBUG'
if self.filename == None:
self.filename = 'LoggerApp.log'
if self.rollover == None:
self.rollover = 'm'
if self.interval == None:
self.interval = 10
if self.backupcount == None:
self.backupcount = 10

def FLogHandler(self):
logpath = os.path.dirname(__file__) + '/' + self.filename
logdir = os.path.dirname(logpath)
if not os.path.exists(logdir):
os.makedirs(logdir)
fhandler = TimedRotatingFileHandler(logpath, when=self.rollover \
,interval=self.interval, backupCount=self.backupcount)
fhandler.setFormatter(self.defaultformat)
return fhandler

def SLogHandler(self):
shandler = StreamHandler()
shandler.setFormatter(self.defaultformat)
return shandler

def UseLogger(self):

# 사용자 입력값이 없다면 디폴트 설정으로 logger 적용
self.SetDefault()

# getLogger객체 생성 및 logging level 설정
logger = getLogger(self.logname)
logger.setLevel(self.loglevel)

# logtype에 따라 Handler 설정
if self.logtype == 'FILE':
fhandler = self.FLogHandler()
logger.addHandler(fhandler)

elif self.logtype == 'STREAM':
shandler = self.SLogHandler()
logger.addHandler(shandler)

elif self.logtype == 'ALL':
fhandler = self.FLogHandler()
shandler = self.SLogHandler()
logger.addHandler(fhandler)
logger.addHandler(shandler)

return logger


if __name__ == "__main__":
logger = Logger(rollover='H', interval=5, backupcount=5).UseLogger()
logger.debug('LOGGING TEST')