Python内置模块logging用法实例分析

下面我就来详细讲解“Python内置模块logging用法实例分析”的完整攻略。

Python内置模块logging用法实例分析

1. logging模块介绍

logging是Python标准库中专门处理日志信息的模块,提供了各种日志级别,便于开发人员划分不同的日志级别并输出到不同的位置,方便程序调试。

2. logging模块基本使用

logging模块的基本使用总体上分为四步:创建Logger实例、创建Handler实例、创建Formatter实例、将Handler实例添加到Logger实例中。

2.1 创建Logger实例

Logger实例是我们打印日志的实例,有多种方式可以创建Logger实例,这里我们使用logging.getLogger()方法来创建一个Logger实例。logging.getLogger()方法有一个参数name,若传递的name参数不为空则返回名为name的Logger实例对象,若为空则返回root Logger实例对象。一般我们使用root Logger实例对象即可。

import logging

logger = logging.getLogger()

2.2 创建Handler实例

Handler实例决定了日志输出的位置,比如将日志输出到文件还是输出到控制台。常用的两个Handler有:StreamHandler(输出到控制台)和FileHandler(输出到文件),使用方法如下:

import logging

logger = logging.getLogger()
console_handler = logging.StreamHandler()  # 输出到控制台
file_handler = logging.FileHandler("log.txt", encoding="utf-8")  # 输出到文件

2.3 创建Formatter实例

Formatter实例决定了日志输出的格式,包括日志级别、时间等信息。常用的Formatter有:"%(asctime)s %(levelname)s %(message)s"、"%(asctime)s %(levelname)s %(module)s %(lineno)d %(message)s"等,使用方法如下:

import logging

logger = logging.getLogger()
formatter = logging.Formatter("%(asctime)s %(levelname)s %(message)s")

2.4 添加Handler实例到Logger实例中

最后一步是将Handler实例添加到Logger实例中,使用addHandler()方法进行添加。如果有多个Handler,则会输出到每个Handler实例中。

import logging

logger = logging.getLogger()
console_handler = logging.StreamHandler()  # 输出到控制台
file_handler = logging.FileHandler("log.txt", encoding="utf-8")  # 输出到文件
formatter = logging.Formatter("%(asctime)s %(levelname)s %(message)s")

console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)

logger.addHandler(console_handler)  # 将console_handler添加到Logger中
logger.addHandler(file_handler)  # 将file_handler添加到Logger中

3. logging模块高级使用

除了上述基本的使用方式外,logging模块还提供了许多高级功能,比如自定义Logger、LoggerAdapter、Filter等。

3.1 自定义Logger

通过自定义Logger,我们可以实现更灵活的日志输出方式。自定义Logger需要继承父类logging.Logger,并且可以针对不同的模块及功能实现不同的Logger实例。

import logging

class MyLogger(logging.Logger):
    def __init__(self, name, filepath=None):
        super(MyLogger, self).__init__(name)
        self.filepath = filepath
        if self.filepath:
            file_handler = logging.FileHandler(self.filepath, encoding="utf-8")
            formatter = logging.Formatter("%(asctime)s %(levelname)s %(message)s")
            file_handler.setFormatter(formatter)
            self.addHandler(file_handler)

logger = MyLogger("TestLogger1", filepath="log_test1.txt")

3.2 LoggerAdapter

LoggerAdapter用于为Logger实例增加额外的上下文信息,比如新增request id等。

import logging

logger = logging.getLogger()
logger = logging.LoggerAdapter(logger, {'request_id': 'sample-request-id'})
logger.info('test message')

3.3 Filter

Filter用于过滤特定的日志信息,比如我只需要输出warning级别以上的日志。

import logging

class FilterWarning(logging.Filter):
    def filter(self, record):
        return record.levelno >= logging.WARNING

logger = logging.getLogger()
handler = logging.StreamHandler()
handler.setFormatter(logging.Formatter("%(asctime)s %(levelname)s %(message)s"))
handler.addFilter(FilterWarning())  # 添加Filter
logger.addHandler(handler)
logger.warning("warning message")
logger.info("info message")

4. logging模块示例

下面给出两个logging模块的应用示例,一个输出到控制台,一个输出到文件中:

4.1 示例1:输出到控制台

import logging


logger = logging.getLogger()
console_handler = logging.StreamHandler()  # 输出到控制台

formatter = logging.Formatter("%(asctime)s %(levelname)s %(message)s")
console_handler.setFormatter(formatter)

logger.addHandler(console_handler)

logger.debug("debug message")
logger.info("info message")
logger.warning("warning message")
logger.error("error message")
logger.critical("critical message")

4.2 示例2:输出到文件

import logging


logger = logging.getLogger()
file_handler = logging.FileHandler("log.txt", encoding="utf-8", mode="w")  # 输出到文件

formatter = logging.Formatter("%(asctime)s %(levelname)s %(message)s")
file_handler.setFormatter(formatter)

logger.addHandler(file_handler)

logger.debug("debug message")
logger.info("info message")
logger.warning("warning message")
logger.error("error message")
logger.critical("critical message")

5. 总结

logging模块是Python标准库中非常重要的日志管理模块,在Python开发中具有重要的作用。本篇介绍了logging模块的基本使用、高级用法以及两个实例,相信读者已经初步了解了logging模块的使用方法,在实际开发中灵活运用logging模块,将可以使你的代码更加优雅。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python内置模块logging用法实例分析 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • python顺序执行多个py文件的方法

    当我们需要执行多个Python(.py)文件时,可以通过如下几种方法来顺序执行这些文件: 方法一:使用Python shell 在命令行窗口输入以下命令:python file1.py && python file2.py(&&是Linux的命令操作符,表示“先执行前面的命令,如果执行成功则继续执行后面的命令”) Python…

    python 2023年6月2日
    00
  • Python升级提示Tkinter模块找不到的解决方法

    以下是“Python升级提示Tkinter模块找不到的解决方法”的完整攻略: 问题背景 Python升级后,在执行脚本时可能会提示找不到Tkinter模块,导致脚本无法正常运行。 解决方法 方法一:重新安装Tkinter模块 首先尝试直接重新安装Tkinter模块。打开命令行窗口,输入以下命令: pip install tkinter 如果提示找不到Tkin…

    python 2023年6月13日
    00
  • 利用python库matplotlib绘制不同的图表

    下面是详细讲解“利用Python库Matplotlib绘制不同的图表”的完整攻略。 1. Matplotlib简介 Matplotlib 是一个非常流行的图形库,在数据分析和可视化方面得到了广泛应用。它可以绘制各种类型的图表,包括线图、散点图、柱状图、饼图等等。Matplotlib 提供了很多有用的函数和方法,可以灵活地控制图表的各个方面,如颜色、大小、坐标…

    python 2023年6月6日
    00
  • Python ord函数()案例详解

    Python ord() 函数案例详解 什么是 Python ord() 函数? Python ord() 函数是 Python 标准库中内置的一个函数,该函数用于返回指定 Unicode 字符的十进制整数表示。也就是说,该函数接收一个单个的 Unicode 字符作为参数,并返回这个字符对应的 Unicode 码位的整数值。 ord() 函数的语法 ord(…

    python 2023年5月14日
    00
  • Python高阶函数map() 简介和使用详解

    Python 高阶函数 map() 简介和使用详解 什么是高阶函数? 高阶函数是指能接收函数作为参数和/或返回函数的函数。在 Python 中,函数本身也是一个对象,因此函数可以像其他对象一样作为参数传给函数,也可以作为函数的返回值。高阶函数的使用可以使代码更加简洁,提高代码的可读性和可维护性。 map() 函数 map() 是 Python 内置的高阶函数…

    python 2023年5月14日
    00
  • Python抓取网页图片难点分析

    Python抓取网页图片难点分析 1. 资源定位 要抓取网页中的图片,首先需要定位图片所在的资源路径,通常包括以下两种方式: 1.1 直接获取源代码中的图片链接 在页面源代码中,图片资源通常是通过<img>标签引用的,其路径可以通过标签的src属性获取。通过requests库获取网页源代码并对其进行解析,即可获取页面中所有图片的资源路径。 示例代…

    python 2023年6月3日
    00
  • WebSocket的通信过程与实现方法详解

    WebSocket的通信过程与实现方法详解 什么是WebSocket? WebSocket是一种网络协议,在Web浏览器和服务器之间建立实时、双向数据传输的通道,可以用于实现实时通信、推送信息等应用场景。 WebSocket通信过程 WebSocket通信过程包括握手阶段和消息传输阶段。 握手阶段 WebSocket握手阶段与HTTP协议类似,也是通过HTT…

    python 2023年6月3日
    00
  • Python 实现网课实时监控自动签到、打卡功能

    关于 Python 实现网课实时监控自动签到、打卡功能的完整攻略,我将从以下几个方面进行详细讲解: 需要用到的工具和技术 网课平台的登录与自动化操作 签到与打卡功能的实现 示例说明 1. 需要用到的工具和技术 在实现网课实时监控自动签到、打卡功能时,需要用到的工具和技术主要包括: Python解释器:安装Python解释器可以到官方网站下载(https://…

    python 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部