2020年6月20日 / 156次阅读 / Last Modified 2020年6月20日
logging模块
通过继承的方法,我们可以自己定义logging可以使用的Hanlder。继承之后,关键是emit函数的重写,record怎么处理就看emit函数。当然,完全可以通过__init__来初始化emit要使用的资源。
下面这个例子来自tklog项目中的tklogHandler,将logging日志输出到tklog窗口中去:
class tklogHandler(logging.Handler):
"""tklog handler inherited from logging.Handler"""
def __init__(self, **kw):
logging.Handler.__init__(self)
self.tklog = tklog(**kw)
def emit(self, record):
if record.levelno== logging.DEBUG:
self.tklog.debug(self.format(record))
if record.levelno== logging.INFO:
self.tklog.log(self.format(record))
if record.levelno== logging.WARNING:
self.tklog.warning(self.format(record))
if record.levelno== logging.ERROR:
self.tklog.error(self.format(record))
if record.levelno== logging.CRITICAL:
self.tklog.critical(self.format(record))
def title(self, msg):
self.tklog.title(msg)
def png(self, pngFile):
self.tklog.png(pngFile)
def gif(self, gifFile):
self.tklog.gif(gifFile)
def pack(self, **kw):
self.tklog.pack(**kw)
def grid(self, **kw):
self.tklog.grid(**kw)
下面这个是cook项目的例子,每天自动生产一个log文件:
class dailyFileHandler(logging.Handler):
"""simple daily rotation log handler"""
def __init__(self, filename):
logging.Handler.__init__(self)
self.path = COOK_ROOT + PATH_LOG
self.prefix = '/' + filename
def emit(self, record):
suffix = datetime.date.today().isoformat()
pf = self.path + self.prefix + '_' + suffix + '.log'
try:
with open(pf, 'a') as f:
f.write(self.format(record)+'\n')
except:
pass
-- EOF --
本文链接:https://www.pynote.net/archives/2066
Ctrl+D 收藏本页
©Copyright 麦新杰 Since 2019 Python笔记