【Python】Logging模块简介 & 开启不同颜色日志输出

✨Logging模块简介

Python Logging模块是一个内置的日志处理工具,可以用于记录和输出应用程序的运行状态。该模块提供了一个灵活的方式来控制日志记录的输出和格式,包括记录日志的级别、日志信息的格式和输出位置等。

以下是Python Logging模块的基本概念:

  • Logger:是日志记录器,用于记录日志信息,负责调用处理器(Handler)输出日志信息。
  • Handler:是日志处理器,负责处理日志记录器传递的日志信息,可以将日志输出到控制台、文件、网络等位置。
  • Formatter:是日志格式化器,用于定义日志输出的格式,包括时间、日志级别、消息内容等信息。
  • Level:是日志级别,表示日志的重要程度。日志级别从低到高依次为:DEBUG、INFO、WARNING、ERROR、CRITICAL。

✨Logging日志级别

在 Python 的 logging 模块中,日志记录的优先级(或称为“级别”)是由以下常量定义的(按照从低到高的顺序):

  1. DEBUG: 最低级别的日志信息,通常只在调试程序时使用,记录详细的程序执行信息,便于排错。
  2. INFO: 用于确认程序按预期运行的信息,记录程序运行过程中重要的事件和状态。
  3. WARNING: 用于警告程序可能存在的问题,但程序仍能正常运行,记录非致命性的问题。
  4. ERROR: 用于记录程序中的错误信息,指出程序出现错误的原因和位置,程序仍然能够继续运行。
  5. CRITICAL: 最高级别的日志信息,表示程序出现了严重的错误,必须停止程序运行。

在使用 logging 模块时,通常可以通过设置 logger 对象的级别来控制记录的日志信息的级别。例如,设置 logger 的级别为 WARNING,则只有 WARNING、ERROR 和 CRITICAL 级别的日志信息会被记录。


✨简单使用示例

下面是一个简单的使用Python Logging模块的示例:

import logging

logging.basicConfig(filename='example.log', level=logging.DEBUG)

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')

上述代码会将日志记录在名为example.log的文件中,并按照默认的日志格式输出日志信息。其中,basicConfig()方法设置了日志文件的名称和日志级别。

当执行上述代码时,输出的日志信息如下所示:

DEBUG:root:This is a debug message
INFO:root:This is an info message
WARNING:root:This is a warning message
ERROR:root:This is an error message
CRITICAL:root:This is a critical message

从上面的输出可以看出,日志信息按照默认的格式输出,并且包括了日志级别、记录器名称和消息内容。

可以根据需要,使用Python Logging模块提供的其他方法和类来定制化日志输出的格式、级别和位置。


✨开启不同颜色日志输出

注意:默认情况下,Python的logging模块为所有的logger设置了一个默认的handler。调用logger.info()方法时,该方法将使用默认handler来处理日志记录,而默认handler将日志记录发送到标准错误流(stderr)

要解决这个问题,我们需要移除默认的handler,并且仅使用我们定义的handler来处理日志记录。

import logging
import colorlog


def get_logger(level=logging.INFO):
    # 创建logger对象
    logger = logging.getLogger()
    logger.setLevel(level)
    # 创建控制台日志处理器
    console_handler = logging.StreamHandler()
    console_handler.setLevel(level)
    # 定义颜色输出格式
    color_formatter = colorlog.ColoredFormatter(
        '%(log_color)s%(levelname)s: %(message)s',
        log_colors={
            'DEBUG': 'cyan',
            'INFO': 'green',
            'WARNING': 'yellow',
            'ERROR': 'red',
            'CRITICAL': 'red,bg_white',
        }
    )
    # 将颜色输出格式添加到控制台日志处理器
    console_handler.setFormatter(color_formatter)
    # 移除默认的handler
    for handler in logger.handlers:
        logger.removeHandler(handler)
    # 将控制台日志处理器添加到logger对象
    logger.addHandler(console_handler)
    return logger


if __name__ == '__main__':
    logger = get_logger(logging.DEBUG)
    logger.debug('debug message')
    logger.info('info message')
    logger.warning('warning message')
    logger.error('error message')
    logger.critical('critical message')

当执行上述代码时,输出的日志信息如下所示:

image-20230326003103537


使用时调用get_logger()即可

logger = get_logger()
logger.info('默认日志级别设置为 INFO')

get_logger()不传入 level 的情况下

默认日志级别设置为 INFO

logger.debug将不被输出

如果需要输出 DEBUG 级别日志

如上 main 中所示

初始化logger实例时传入logging.DEBUG即可


⭐转载请注明出处

本文作者:双份浓缩馥芮白

原文链接:https://www.cnblogs.com/Flat-White/p/17255337.html

版权所有,如需转载请注明出处。

posted @ 2023-03-25 18:47  双份浓缩馥芮白  阅读(3667)  评论(0编辑  收藏  举报