python logging模块的使用详解

yizhihongxing

Python logging模块的使用详解

什么是logging模块

Python的logging模块提供了大量的灵活方式记录程序运行时产生的信息,包括日志级别、输出位置、日志文件格式等。

利用logging模块可以高效的管理日志,对于排查问题和系统运维等方面非常重要。

logging模块的使用方法

logging模块主要包括四个组件:Logger, Handler, Filter, Formatter。

  • Logger: 定义了日志产生的地方,也可以设置多个Logger之间的层级关系。
  • Handler: 定义了日志将输出到哪里,例如控制台、日志文件等。
  • Filter: 可以更细致的过滤日志输出。
  • Formatter: 定义了日志的输出格式。

下面分别对这四个组件进行详细的说明。

Logger

Logger是日志记录器,统筹其他三个组件的工作。

对于每个Logger,在进行日志记录时,都需要有一个名字。名字的设定按层级结构设定,例如 app.module1.module2 就对应着一个层级结构。

import logging

logger = logging.getLogger(__name__) # 获取一个Logger实例
logger.setLevel(logging.DEBUG) # 设置logging的最低日志级别为DEBUG

Logger对象提供了6个记录日志的方法:debug(), info(), warning(), error(), critical(), log()。其中log()可以灵活引用其他5个方法来记录日志。

logger.debug("This is a debug level message.") # 记录Debug信息
logger.info("This is an info level message.") # 记录Info信息
logger.warning("This is a warning level message.") # 记录Warning信息
logger.error("This is an error level message.") # 记录Error信息
logger.critical("This is a critical level message.") # 记录Critical信息

Handler

Handler是日志处理器,可以将Logger产生的日志输出到多个位置。比较常见的有:控制台、文件、SMTP等。

下面是把日志记录到控制台的例子:

import logging

logger = logging.getLogger()
console_handler = logging.StreamHandler() # 创建一个输出到控制台的Handler
console_handler.setLevel(logging.DEBUG) # 设置Handler的日志级别为DEBUG
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') # 设置日志输出格式
console_handler.setFormatter(formatter) # 把Formatter和Handler结合起来
logger.addHandler(console_handler) # 把Handler加到Logger中

logger.info("This is an info level message for console.") # 记录Info信息并输出到控制台

Filter

Filter用于对日志进行过滤。

import logging

class InfoFilter(logging.Filter):

    def filter(self, record):
        return record.levelno == logging.INFO # 只保留Level为INFO的日志信息

logger = logging.getLogger()
handler = logging.StreamHandler()
handler.addFilter(InfoFilter()) # 过滤日志输出

logger.addHandler(handler)

logger.info('This is an info message.')
logger.debug('This is a debug message.')

Formatter

Formatter定义了日志的输出格式。

import logging

logger = logging.getLogger()
handler = logging.StreamHandler()

# 设置日志输出格式
formatter = logging.Formatter('[%(asctime)s] [%(levelname)s] [%(name)s] - %(message)s')
handler.setFormatter(formatter) # 把格式加到Handler中

logger.addHandler(handler)

logger.info('This is an info message.')
logger.debug('This is a debug message.')

示例

下面通过两个示例分别说明如何把日志保存到文件和如何把日志从多个模块记录到一个文件。

把日志保存到文件

import logging

logger = logging.getLogger()
handler = logging.FileHandler(filename='log.txt', encoding='utf-8')
handler.setLevel(logging.DEBUG)

formatter = logging.Formatter('[%(asctime)s] [%(levelname)s] [%(name)s] - %(message)s')
handler.setFormatter(formatter)

logger.addHandler(handler)

logger.info("This is an info level message for file.")

把日志从多个模块记录到一个文件

在多模块开发时,如果想要把日志记录到一个文件中,需要使用logging的父子logger结构。

  • 父Logger负责设置日志输出的最低级别,以及提供一个共享的Handler。
  • 不同的子Logger可以设置不同的日志输出等级,然后通过使用父Logger的共享Handler输出日志。
# 父Logger
import logging

logger = logging.getLogger()

handler = logging.FileHandler(filename='log.txt', encoding='utf-8')
handler.setLevel(logging.DEBUG)

formatter = logging.Formatter('[%(asctime)s] [%(levelname)s] [%(name)s] - %(message)s')
handler.setFormatter(formatter)

logger.addHandler(handler)
# 子Logger
import logging
from parent_module import logger

child_logger = logging.getLogger(__name__)
child_logger.setLevel(logging.DEBUG)

child_logger.addHandler(logger.handlers[0])

child_logger.debug("This is a debug message from child module.")

以上就是关于Python logging模块的使用详解的内容,包括了4个组件的简要介绍、示例说明两个常用场景,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python logging模块的使用详解 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • Python函数中的不定长参数相关知识总结

    下面是关于“Python函数中的不定长参数相关知识总结”的完整攻略: 1.什么是不定长参数 在Python中,有时候函数的参数个数是不确定的,这就需要我们使用不定长参数。不定长参数包括两种:可变参数和关键字参数。 可变参数是指传入的参数个数是不确定的,可变参数在函数内部自动组装为元组(tuple)类型。 关键字参数是指传入的参数个数也是不确定的,但是和普通参…

    python 2023年5月13日
    00
  • Scrapy爬虫框架集成selenium及全面详细讲解

    Scrapy爬虫框架集成selenium及全面详细讲解 Scrapy是一个非常流行的Python爬虫框架,可以帮助我们快速、高效地爬取网站数据。但是,有些网站使用了JavaScript技术,需要使用selenium等工具来模拟浏览器行为才能获取到数据。本文将介绍如何在Scrapy中集成selenium,并提供两个示例。 安装selenium 在使用selen…

    python 2023年5月15日
    00
  • Python正则表达式 r'(.*) are (.*?) .*’的深入理解

    让我来详细讲解一下关于Python正则表达式 r'(.) are (.?) .*’的深入理解。 首先,我们需要了解正则表达式是什么。正则表达式是一种提供给计算机使用的字符串匹配模式,是一种强大的文本处理工具。它可以用来快速地匹配、验证、搜索和替换文本中的内容,较之手动处理文本的方式更为高效、便捷。 而Python正则表达式 r'(.) are (.?) .*…

    python 2023年6月3日
    00
  • Django实现前台上传并显示图片功能

    下面是使用Django实现前台上传并显示图片的完整攻略: 1. 创建项目和应用 首先,我们需要利用Django创建一个项目和一个应用。在终端中执行如下命令: $ django-admin startproject myproject $ cd myproject $ python manage.py startapp myapp 2. 配置数据库 接下来,我…

    python 2023年6月3日
    00
  • python super的使用方法及实例详解

    pythonsuper的使用方法及实例详解 在Python中,super()函数用于调用父类的方法。它可以帮助我们避免硬编码父类的名称,从而使代码更加灵活和可维护。本文将介绍pythonsuper的使用方法及实例详解。 super()函数的基本用法 super()函数的基本语法如下: super([type[, object-or-type]]) 其中,ty…

    python 2023年5月15日
    00
  • Python抖音无水印视频下载方法

    下面是详细的Python抖音无水印视频下载方法攻略: 1. 安装必要的库 在开始下载之前,需要安装两个Python库:requests 和 re,这两个库分别用于发送HTTP请求和正则表达式匹配。 可以通过以下命令安装: pip install requests pip install re 2. 获取视频链接 在下载视频之前,需要获取视频的链接。可以通过以…

    python 2023年6月3日
    00
  • python实现简单遗传算法

    Python实现简单遗传算法 遗传算法是一种基于自然选择和遗传学原理的优化算法,可以用于解决各种优化问题。本文将详细讲解Python中如何实现简单遗传算法,包括遗传算法的基本原理、编码方式、适应度函数、选择、交叉和变异等操作。 遗传算法的基本原理 遗传算法是一种基于自然选择和遗传学原理的优化算法,其基本原理是通过模拟自然界中的进化过程,从而寻找最优解。遗传算…

    python 2023年5月14日
    00
  • 如何格式化文件输出 Python 3

    【问题标题】:How to format the file output Python 3如何格式化文件输出 Python 3 【发布时间】:2023-04-03 19:50:01 【问题描述】: 我制作了一个询问用户姓名和年龄的代码。它询问年龄并使用以下方式存储它: name = input(“”) 并且名称使用相同。我已经像这样将年龄输出到文件中: f …

    Python开发 2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部