【ChatGPT系列】Python自定义打印各种颜色的日志
[本文出自天外归云的博客园]
如何在控制台和文件中同时输出日志?
要将日志同时输出到文件和控制台,可以创建并配置一个额外的 StreamHandler,然后将其添加到 Logger 中。下面是一个示例代码,演示如何将日志同时输出到文件和控制台:
import logging # 创建 Logger 对象 logger = logging.getLogger("example_logger") logger.setLevel(logging.DEBUG) # 创建 FileHandler 并设置 Formatter file_formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(filename)s:%(lineno)d - %(message)s", "%Y-%m-%d %H:%M:%S") file_handler = logging.FileHandler("example.log") file_handler.setLevel(logging.DEBUG) file_handler.setFormatter(file_formatter) # 创建 StreamHandler 并设置 Formatter console_formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s", "%Y-%m-%d %H:%M:%S") console_handler = logging.StreamHandler() console_handler.setLevel(logging.DEBUG) console_handler.setFormatter(console_formatter) # 将 FileHandler 和 StreamHandler 添加到 Logger logger.addHandler(file_handler) logger.addHandler(console_handler) # 示例日志记录 logger.debug("This is a debug message.") logger.info("This is an info message.") logger.warning("This is a warning message.") logger.error("This is an error message.") logger.critical("This is a critical message.")
在上述示例中,我们创建了一个名为 `console_handler` 的 StreamHandler,并设置了适当的 Formatter。然后,我们将 `console_handler` 添加到 Logger 中,以便将日志记录发送到控制台。
这样设置后,日志消息将同时输出到文件(使用 FileHandler)和控制台(使用 StreamHandler)。
你可以根据自己的需求自定义日志处理程序的级别和格式。例如,可以使用 `console_handler.setLevel(logging.DEBUG)` 设置控制台的日志级别为 DEBUG,以确保所有级别的日志消息都输出到控制台。
如何让这五种level的日志显示不同的颜色?
要为不同级别的日志消息添加不同的颜色,可以使用 `logging` 模块的 `addHandler()` 方法添加一个自定义的处理程序,该处理程序将根据日志级别为消息选择不同的颜色。下面是一个示例代码,演示如何为不同级别的日志消息设置不同的颜色:
import logging import sys # 自定义处理程序,根据日志级别选择不同的颜色 class ColoredHandler(logging.StreamHandler): def emit(self, record): # 定义不同级别的颜色代码 colors = { logging.DEBUG: '\033[94m', # 蓝色 logging.INFO: '\033[92m', # 绿色 logging.WARNING: '\033[93m', # 黄色 logging.ERROR: '\033[91m', # 红色 logging.CRITICAL: '\033[95m' # 紫色 } # 重置终端颜色代码 reset_color = '\033[0m' # 获取日志级别对应的颜色代码 color = colors.get(record.levelno, '') # 格式化消息并输出到控制台 self.stream.write(color + self.format(record) + reset_color + '\n') # 创建 Logger 对象 logger = logging.getLogger("example_logger") logger.setLevel(logging.DEBUG) # 创建自定义处理程序并设置格式 handler = ColoredHandler(sys.stdout) formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s", "%Y-%m-%d %H:%M:%S") handler.setFormatter(formatter) # 将处理程序添加到 Logger logger.addHandler(handler) # 示例日志记录 logger.debug("This is a debug message.") logger.info("This is an info message.") logger.warning("This is a warning message.") logger.error("This is an error message.") logger.critical("This is a critical message.")
在上述示例中,我们创建了一个自定义的 `ColoredHandler` 类,继承自 `StreamHandler`。在 `ColoredHandler` 中,我们重写了 `emit()` 方法,根据日志级别选择相应的颜色代码,并将格式化后的消息输出到控制台。
我们定义了一个 `colors` 字典,将不同级别的日志与相应的颜色代码关联起来。然后,我们在 `emit()` 方法中根据日志记录的级别获取相应的颜色代码,并将其应用于输出的消息。
在示例中,我们使用蓝色、绿色、黄色、红色和紫色分别表示 DEBUG、INFO、WARNING、ERROR 和 CRITICAL 级别的日志消息。
运行示例代码后,不同级别的日志消息将以不同的颜色显示在控制台上。请确保你的终端支持 ANSI 转义序列,以正确显示颜色。
本文来自博客园,作者:天外归云,转载请注明原文链接:https://www.cnblogs.com/LanTianYou/p/17680136.html