自定义logging的Handler

2020年6月20日 / 10次阅读 / 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

留言区

电子邮件地址不会被公开。 必填项已用*标注


前一篇:
后一篇:

More


©Copyright 麦新杰 Since 2019 Python笔记

go to top