Python的logging函数

Python的logging函数

选择自己喜欢的颜色

运行如下代码,查看颜色

import logging
logging.error("\033[1;29m this is color1 \033[0m")
logging.error("\033[1;30m this is color2 \033[0m")
logging.error("\033[1;31m this is color3 \033[0m")
logging.error("\033[1;32m this is color4 \033[0m")
logging.error("\033[1;33m this is color5 \033[0m")
logging.error("\033[1;34m this is color6 \033[0m")
logging.error("\033[1;35m this is color7 \033[0m")
logging.error("\033[1;36m this is color8 \033[0m")

结果得到:

在这里插入图片描述

开始自己构建Logging类

需要继承logging.Logger类,关键在于重构***callHandlers***方法,使屏幕输出模式时不向上兼容

完整代码如下,有兴趣的可参考

import logging

format_base = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d] %(message)s'
file_format = '[%(asctime)s][%(pathname)s][line:%(lineno)d][%(levelname)s]-[%(message)s]'
date_format = '%Y-%m-%d %H:%M:%S'
config = {
    'debug': '\033[1;29m',
    'info': '\033[1;36m',
    'warning': '\033[1;33m',
    'error': '\033[1;31m',
    'critical': '\033[1;31m',
}


class MyLog(logging.Logger):
    def __init__(self):
        super().__init__(__name__)
        self._add_all_steam_handler()

    # 重写方法,使屏幕输出模式不向上兼容,文件输出则保留原样
    def callHandlers(self, record):
        c = self
        while c:
            for hdlr in c.handlers:
                if hdlr.__class__.__name__ == 'StreamHandler' and record.levelno == hdlr.level:
                    hdlr.handle(record)
                if hdlr.__class__.__name__ == 'FileHandler' and record.levelno >= hdlr.level:
                    hdlr.handle(record)
            if not c.propagate:
                c = None  # break out
            else:
                c = c.parent

    # 添加所有steam_handler,每一个方法对应一个handler
    def _add_all_steam_handler(self):
        for method, color in config.items():
            fmt = '{} {} {}'.format(color, format_base, '\033[0m')
            handler = logging.StreamHandler()
            handler.setFormatter(logging.Formatter(fmt, datefmt=date_format))
            handler.setLevel(method.upper())
            self.addHandler(handler)

    # 生产环境会需要日志文件!
    def set_file_log(self, filename='log.log', _level=logging.WARNING):
        # 输出到文件
        file_handler = logging.FileHandler(filename=filename, mode='a', encoding='utf8')
        file_handler.setLevel(_level)
        file_handler.setFormatter(logging.Formatter(file_format, datefmt=date_format))
        self.addHandler(file_handler)


log = MyLog()

if __name__ == '__main__':
    log.debug('debug')
    log.info('info')
    log.warning('warning')
    log.error('error')
    log.critical('critical')

输出结果为:

image-20201119130054921

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值