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

发布时间 2023-03-25 18:51:57作者: 双份浓缩馥芮白

✨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
from colorama import init, Fore, Style


def get_logger(level=logging.INFO):
    # 初始化colorama
    init(autoreset=True)

    # 创建Logger对象
    logger = logging.getLogger()
    logger.setLevel(logging.NOTSET)

    # 移除默认的handler
    for handler in logger.handlers:
        logger.removeHandler(handler)

    # 定义一个输出到终端并使用颜色的Handler
    class ColorHandler(logging.StreamHandler):
        def __init__(self, stream=None, level=logging.NOTSET):
            super().__init__(stream=stream)
            self.level = level

        def emit(self, record):
            if record.levelno >= self.level:
                if record.levelno >= logging.ERROR:
                    color = Fore.RED  # 红色
                elif record.levelno >= logging.WARNING:
                    color = Fore.YELLOW  # 黄色
                elif record.levelno >= logging.INFO:
                    color = Fore.GREEN  # 绿色
                else:
                    color = Style.RESET_ALL  # 默认颜色
                message = self.format(record)
                message = color + message + Style.RESET_ALL  # 恢复默认颜色
                stream = self.stream
                stream.write(message)
                stream.write(self.terminator)

    # 创建ColorHandler对象,并添加到Logger中
    handler = ColorHandler(level=level)
    logger.addHandler(handler)

    return logger

如上代码封装了get_logger()方法

使用时调用get_logger()即可

logger = get_logger()
logger.info('项目已启动')

⭐转载请注明出处

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

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

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