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的time模块中的常用方法整理

    Python的time模块中的常用方法整理 在Python中,time模块是处理时间和日期的必备模块,它包含了许多函数和类,能够获取当前时间、休眠程序、格式化日期、计算时间差等功能。下面我们来逐一介绍一下time模块中的常用方法。 1. 获取当前时间 使用time模块的time()函数可以获取当前时间戳,又称为Unix时间戳。它是指从1970年1月1日零时零…

    python 2023年6月2日
    00
  • Python编程快速上手——strip()函数的正则表达式实现方法分析

    Python编程快速上手——strip()函数的正则表达式实现方法分析 在Python中,strip()函数是用于去除字符串首尾指定字符的函数。但是,如果要去除字符串中间的指定字符,就需要使用正则表达式。本文将为您详细讲解Python中strip()函数的正则表达式实现方法,包括正则表达式的语法、re模块的常用方法和两个示例说明。 正则表达式的语法 在正则表…

    python 2023年5月14日
    00
  • Python数据结构队列解决约瑟夫斯问题

    标题:Python数据结构队列解决约瑟夫斯问题 约瑟夫斯问题简介 约瑟夫斯问题是一个经典的问题,即有n个人围成一圈,从编号为k的人开始报数,报到m的那个人出列,然后从出列的下一个人开始重新报数,直到剩下最后一个人,问这个人的编号是多少。 解题思路 题目中涉及到循环报数,因此可以利用队列数据结构来解决。 步骤如下:1. 初始化一个队列,用于存储所有人的编号。2…

    python 2023年6月5日
    00
  • python3获取当前目录的实现方法

    要获取当前目录路径,可以使用Python内置的os模块。下面是获取当前目录的实现方法的完整攻略: 使用os模块获取当前目录 import os cwd = os.getcwd() print(cwd) 上述代码使用了os模块的getcwd()函数获取当前目录,并且将结果赋值给cwd变量,然后使用print()函数输出cwd变量的值。这样就可以获取当前目录的路…

    python 2023年6月3日
    00
  • python 字典的打印实现

    当我们创建了一个 Python 字典时,可以使用不同的方法将其打印出来。以下是实现这个任务的几种不同的方法: 字典直接打印 使用print()函数可以直接将字典打印出来,但是这种方式的输出结果并不美观: my_dict = {‘name’: ‘张三’, ‘age’: 18, ‘gender’: ‘male’} print(my_dict) 输出结果: {‘n…

    python 2023年5月13日
    00
  • Python集成学习之Blending算法详解

    以下是关于“Python集成学习之Blending算法详解”的完整攻略: 简介 Blending算法是一种集成学习方法,它将多个基模型的预测结果进行加权平均,得到最终的预测结果。在本教程中,我们将介绍Blending算法的原理和实现方法,包括数据集划分、基模型训练、Blending模型训练等。 数据集划分 Blending算法需要将原始数据集划分为训练集和测…

    python 2023年5月14日
    00
  • python操作pptx设置title字体大小插入全屏图片A4尺寸实例一枚

    pip install python-pptx 安装好pptx,设置标题最大的作用是ppt里面的摘要视图显示摘要文字 参考:https://python-pptx.readthedocs.io/en/latest/   from pptx import Presentation from pptx.util import Cm pwidth,pheight=…

    python 2023年4月22日
    00
  • 解决python3 json数据包含中文的读写问题

    下面是详细攻略: 1. 问题描述 在Python3中,在处理json数据时,如果数据中包含中文字符,就会出现读写问题。具体表现为:在写入包含中文字符的json数据时,会出现编码错误;在读取包含中文字符的json数据时,会出现解码错误。 2. 解决方案 2.1 写入json数据 当数据中包含中文字符时,需要在写入前将其转换为Unicode编码,再写入到json…

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