Python中logging:设置打印级别,打印格式,打印颜色

目录

前言

一、引入库

二、实现代码

三、运行结果

四、补充知识

                logging模块的日志级别


前言

控制log的打印级别,打印格式,控制台根据log级别打印不同的颜色


一、引入库

import logging
import colorlog
import datetime
import os

二、实现代码

import logging
import colorlog
import datetime
import os


class Logging(object):

    def log(self, level='INFO'):  # 生成日志的主方法,传入对那些级别及以上的日志进行处理

        log_colors_config = {
            'DEBUG': 'white',
            'INFO': 'white',
            'WARNING': 'yellow',
            'ERROR': 'red',
            'CRITICAL': 'bold_red',
        }

        logger = logging.getLogger()  # 创建日志器
        # levle = getattr(logging, level)  # 获取日志模块的的级别对象属性
        logger.setLevel(level)  # 设置日志级别
        # console_handler.setLevel(logging.DEBUG)
        # file_handler.setLevel(logging.INFO)

        root_path = os.getcwd()
        file_name = datetime.datetime.now().strftime('%Y%m%d_%H%M%S') + ".log"
        log_path = os.path.join(root_path, r"output\logfiles", file_name)

        if not logger.handlers:  # 作用,防止重新生成处理器
            sh = logging.StreamHandler()  # 创建控制台日志处理器
            fh = logging.FileHandler(filename=log_path, mode='a', encoding="utf-8")  # 创建日志文件处理器
            # 创建格式器
            fmt = logging.Formatter(
                fmt='[%(asctime)s.%(msecs)03d] %(filename)s:%(lineno)d [%(levelname)s]: %(message)s',
                datefmt='%Y-%m-%d  %H:%M:%S')

            sh_fmt = colorlog.ColoredFormatter(
                fmt='%(log_color)s[%(asctime)s.%(msecs)03d] %(filename)s:%(lineno)d [%(levelname)s]: %(message)s',
                datefmt='%Y-%m-%d  %H:%M:%S',
                log_colors=log_colors_config)
            # 给处理器添加格式
            sh.setFormatter(fmt=sh_fmt)
            fh.setFormatter(fmt=fmt)
            # 给日志器添加处理器,过滤器一般在工作中用的比较少,如果需要精确过滤,可以使用过滤器
            logger.addHandler(sh)
            logger.addHandler(fh)
        return logger  # 返回日志器


if __name__ == '__main__':
    logger = Logging().log(level='INFO')
    logger.debug("11111111111")
    logger.info("22222222")
    logger.warning("33333333")

控制台根据log级别打印不同的颜色,注意以下代码:

sh_fmt = colorlog.ColoredFormatter(
                fmt='%(log_color)s[%(asctime)s.%(msecs)03d] %(filename)s:%(lineno)d [%(levelname)s]: %(message)s',
                datefmt='%Y-%m-%d  %H:%M:%S',
                log_colors=log_colors_config)
# 给处理器添加格式
sh.setFormatter(fmt=sh_fmt)

三、运行结果

[2022-10-11  14:50:54.449] t1.py:53 [INFO]: 22222222
[2022-10-11  14:50:54.449] t1.py:54 [WARNING]: 33333333

设置的log级别是INFO, 结果没有显示Debug级别的log. 

四、补充知识

logging模块的日志级别

logging模块默认定义了以下几个日志等级。

日志等级(level) 描述
DEBUG 最详细的日志信息,典型应用场景是 问题诊断
INFO 信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作
WARNING 当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的
ERROR 由于一个更严重的问题导致某些功能不能正常运行时记录的信息
CRITICAL 当发生严重错误,导致应用程序不能继续运行时记录的信息

你可能感兴趣的:(Python,python)