首页 > 编程语言 >【ChatGPT系列】Python自定义打印各种颜色的日志

【ChatGPT系列】Python自定义打印各种颜色的日志

时间:2023-10-24 14:07:49浏览次数:40  
标签:logging 自定义 Python message handler console ChatGPT logger 日志


如何在控制台和文件中同时输出日志?

要将日志同时输出到文件和控制台,可以创建并配置一个额外的 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 转义序列,以正确显示颜色。



标签:logging,自定义,Python,message,handler,console,ChatGPT,logger,日志
From: https://blog.51cto.com/u_15317299/8003300

相关文章

  • 校验 ChatGPT4 真实性的三个经典问题:快速区分 GPT3.5 与 GPT4,并提供免费测试网站
    现在已经有很多ChatGPT的套壳网站,以下分享验明GPT-4真身的三个经典问题,帮助你快速区分套壳网站背后到底用的是GPT-3.5还是GPT-4。大家可以在这个网站测试:https://ai.hxkj.vip,免登录可以问三条,登录之后无限制。咱们使用免登录的额度测试就已经够用了测试问题1:Whatist......
  • 洛谷P5706 【深基2.例8】再分肥宅水(Python3)
    关键点:1.同一行输入两个数input().split(),然后list一下存到变量里,这个不多说2。输出两个数Python中默认end=‘\n’,所以不用多写一遍换行。3.输出三位小数这里用到了Python的格式化输出,与c++的格式化输出非常相近,只是符号不同。具体可看这篇blog 代码如下:a=list(input(......
  • python模块导入规则(相对导入和绝对导入)
    python模块可以相对导入和绝对导入,但这两者是不能替换使用的。本文主要讨论工作目录下模块之间的导入规则。其中相对导入前面有一个'.',表示从该脚本所在目录开始索引,而绝对导入前面没有'.',表示从根目录开始索引。首先明确一点,python认为的根目录为当前运行的脚本所在的目录,而......
  • [数据分析与可视化] 基于Python绘制简单动图
    动画是一种高效的可视化工具,能够提升用户的吸引力和视觉体验,有助于以富有意义的方式呈现数据可视化。本文的主要介绍在Python中两种简单制作动图的方法。其中一种方法是使用matplotlib的Animations模块绘制动图,另一种方法是基于Pillow生成GIF动图。目录1Animations模块1.1FuncA......
  • Java:自定义实现SpringBoot Starter
    (目录)1、自定义Starter1.1、项目结构$tree.├──pom.xml└──src├──main│├──java││└──com││└──example││└──demo││├──ReadingConfiguration.java......
  • Python标准库的入口
    Python有一套很有用的标准库(standardlibrary)。标准库会随着Python解释器,一起安装在你的电脑中的。它是Python的一个组成部分。这些标准库是Python为你准备好的利器,可以让编程事半功倍。 我将根据我个人的使用经验中,挑选出标准库三个方面的包(package)介绍:Python增强系......
  • VirtualCreateDiskFileDevice【chatgpt】
    VirtualCreateDiskFileDevice(简称VCDFD)和Dokan技术是用于创建虚拟文件系统和磁盘的两种不同的解决方案,它们有一些区别和特点:功能和用途:VCDFD是Windows内核模式下的一个驱动程序,它提供了一种机制来创建虚拟的磁盘设备,可以在该虚拟设备上进行文件读写操作。而Dokan是一个用户模式......
  • python基础
    python环境搭建1、下载安装包-3.x-2.x下载官网:https://python.org/2、安装(傻瓜式安装,选择路径时选择下,其他都默认即可)python的交互界面再命令行输入python,进入到python的交互页面;再交互页面输入python命令,python解释器就会立即执行。pythonjingjing.py执行python文......
  • Python第八课——类
    将函数和数据封装起来,形成类,用类再来创建对象。比如我创建了小狗这一个类,然后创造了名为William,年龄6岁的小狗,这只狗就是对象。一、创建和使用类1、创建dog类以下是Python的类代码的基本结构:classClassName:#一些类的属性和方法def__init__(self,arg1,arg2,...):......
  • grafana 配置自定义dashboard
    本文为博主原创,转载请注明出处:1.配置数据源         配置完成后,点击SaveAndTest,如果配置正确,页面则显示如下:           2.配置dashboard          点击Addnewpanel后,界面如下:       ......