网站/小程序/APP个性化定制开发,二开,改版等服务,加扣:8582-36016

    这篇文章主要介绍了python利用logging模块实现根据日志级别打印不同颜色日志,本文通过实例代码给大家详细讲解,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

    logger:日志器对象,可通过logging.getLogger()方法获取

    handler:处理器对象,将日志信息输出到指定位置,可通过logger.addHandler()方法进行添加

    formatter:格式器对象,输出格式化日志字符串

    有时候同一个应用程序有不同的日志需求,比如将error级别的日志在控制台输出,critical级别的日志写入日志文件中,这就需要不同的handler来实现,然后均通过logger.addHandler()方法进行添加

    代码:

    # coding:utf-8
    import logging
    import colorlog
    class Log:
        def __init__(self,name=None,log_level=logging.DEBUG):
            # 获取logger对象
            self.logger = logging.getLogger(name)
     
            # 避免重复打印日志
            self.logger.handlers = []
     
            # 指定最低日志级别:(critical > error > warning > info > debug)
            self.logger.setLevel(log_level)
     
            # 日志格化字符串
            console_fmt = '%(log_color)s%(asctime)s-%(threadName)s-%(filename)s-[line:%(lineno)d]
            -%(levelname)s: %(message)s'
            file_fmt = '%(asctime)s-%(threadName)s-%(filename)s-[line:%(lineno)d]-%(levelname)s: 
            %(message)s'
     
            # 控制台输出不同级别日志颜色设置
            color_config = {
                'DEBUG': 'cyan',
                'INFO': 'green',
                'WARNING': 'yellow',
                'ERROR': 'red',
                'CRITICAL': 'purple',
            }
     
            console_formatter = colorlog.ColoredFormatter(fmt=console_fmt,log_colors=color_config)
            file_formatter = logging.Formatter(fmt=file_fmt)
     
            # 输出到控制台
            console_handler = logging.StreamHandler()
            # 输出到文件
            file_handler = logging.FileHandler(filename=name,mode='a',encoding='utf-8')
     
            # 设置日志格式
            console_handler.setFormatter(console_formatter)
            file_handler.setFormatter(file_formatter)
     
            # 处理器设置日志级别,不同处理器可各自设置级别,默认使用logger日志级别
            # console_handler.setLevel(logging.WARNING)
            file_handler.setLevel(logging.ERROR) # 只有error和critical级别才会写入日志文件
     
            # logger添加处理器
            self.logger.addHandler(console_handler)
            self.logger.addHandler(file_handler)
     
        def debug(self,message):
            self.logger.debug(message)
     
        def info(self,message):
            self.logger.info(message)
     
        def warning(self,message):
            self.logger.warning(message)
     
        def error(self,message):
            self.logger.error(message)
     
        def critical(self,message):
            self.logger.critical(message)
     
    if __name__ == '__main__':
        # 控制台只会显示warning及以上级别日志信息,而log.txt文件中则会记录error及以上级别日志信息
        log = Log(name='log.txt',log_level=logging.WARNING)
        log.debug('debug')
        log.info('info')
        log.warning('warning')
        log.error('error')
        log.critical('critical')

    最终控制台按照指定颜色输出warning以上级别日志内容:

    log.txt文件中写入了error及critical级别日志内容:

    补充(python自带的格式化字符串):


    评论 0

    暂无评论
    0
    0
    0
    立即
    投稿
    发表
    评论
    返回
    顶部