python logging模块的使用详解

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实现图像和办公文档处理的方法和技巧 本文将介绍Python实现图像和办公文档处理的方法和技巧,包括常用的库、基本操作和示例说明。 常用的库 在Python中,实现图像和办公文档处理的重要库有Pillow、OpenCV、PyPDF2和python-docx等。其中,Pillow和OpenCV用于图像处理,而PyPDF2和python-docx用于办…

    python 2023年5月18日
    00
  • 日常整理python执行系统命令的常见方法(全)

    下面是详细讲解“日常整理python执行系统命令的常见方法(全)”的完整攻略。 日常整理python执行系统命令的常见方法(全) 执行命令方式 在Python中,可以通过os.system和subprocess模块执行系统命令。 os.system os.system函数能够将参数作为命令行直接传递给操作系统的shell来执行。例如,下面的代码将在Linux…

    python 2023年5月30日
    00
  • python os.path.isfile 的使用误区详解

    让我们来详细讲解一下“python os.path.isfile 的使用误区详解”。 什么是 os.path.isfile os.path.isfile(path) 是 Python 库中用于检测文件是否存在以及路径是否为文件的函数。 它接受一个参数 path,用来指定需要检测的文件路径。如果路径是一个文件,则返回 True;否则返回 False。 os.p…

    python 2023年6月2日
    00
  • 用Python获取智慧校园每日课表并自动发送至邮箱

    下面就是“用Python获取智慧校园每日课表并自动发送至邮箱”的完整攻略: 确定获取课表的方式 首先,需要确定获取智慧校园每日课表的方式。一般情况下,智慧校园会提供网页和移动端两个平台供学生查看课表。因此,可以选择使用Python中的网络爬虫技术来获取网页端的课表信息,或者使用微信API Library对移动端的课表信息进行爬取。 编写Python代码 下一…

    python 2023年5月19日
    00
  • Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解

    首先,我们需要了解什么是GUI编程。GUI,全称图形用户界面,是一种通过图形方式,使用鼠标操作的人机交互界面。GUI编程通常需要使用GUI框架,Python中其中一种常用的GUI框架就是tkinter。 本篇攻略将以tkinter为主题,详细讲解tkinter控件的介绍及基本使用方法。其中,主要内容包括:1、什么是tkinter控件;2、常用控件介绍及使用方…

    python 2023年6月13日
    00
  • Python实现定时执行任务的三种方式简单示例

    让我来为您详细讲解“Python实现定时执行任务的三种方式简单示例”的完整攻略。 1. 背景介绍 在一些需要间隔时间执行任务的场景中,我们通常需要使用定时任务技术。Python是一门非常流行的编程语言,通过Python,我们可以很方便地实现定时任务。本文将介绍Python中三种常见的实现定时任务的方式,并在每种方式下给出一个简单的示例。 2. 定时任务三种方…

    python 2023年5月19日
    00
  • Python语法学习之进程的创建与常用方法详解

    Python语法学习之进程的创建与常用方法详解 1. 前言 进程是操作系统进行任务调度的基本单位。在多任务环境下,同时执行多个进程可以提高运行效率。Python中通过multiprocessing模块来创建和管理进程。 本篇攻略将详细讲解如何在Python中创建进程以及常见的进程操作方法。 2. 进程的创建 Python中可以通过multiprocessin…

    python 2023年5月30日
    00
  • Python中请不要再用re.compile了

    以下是详细讲解“Python中请不要再用re.compile了”的完整攻略,包括为什么不再使用re.compile、如何使用re.compile、两个例说明和建议。 为什么不使用re.compile 在Python中,re.compile()函数用于编译正则表达式,以便在后续的搜索中重复使用。然而,随着Python版本的更新,re模块的性能已经得到了很大的提…

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