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 2023年5月31日
    00
  • Python科学画图代码分享

    Python科学画图代码分享 前言 Python是一门优秀的编程语言,尤其在科学计算领域拥有广泛的应用。Python科学画图模块也越来越受到关注。通过本篇文章,我们将学习如何用Python科学画图模块来进行数据可视化,并分享一些常用的代码。 本篇文章将重点介绍以下三个主要的Python科学画图模块: Matplotlib:Python中最常用的科学画图模块之…

    python 2023年5月19日
    00
  • python os模块介绍

    Python os模块介绍 简介 在Python中,os模块是用于与操作系统进行交互的模块,它提供了很多与操作系统相关的功能。 常用功能 获取当前工作目录 使用os模块中的getcwd()函数可以获取当前工作目录。 import os cwd = os.getcwd() print(cwd) 创建目录 使用os模块中的mkdir()函数可以创建目录。 imp…

    python 2023年5月30日
    00
  • 详解Django 和 Python 的区别

    Django是一个基于Python语言的Web框架,Python是一种动态、强类型、解释性编程语言,它们之间的区别主要表现在以下几个方面: 1. 用途和应用场景的不同 Python是一种通用编程语言,适用于各种领域的编程工作。Django则是一种Web框架,主要用于快速开发高质量的Web应用程序。 例如,一个简单的Python程序可以用来计算1+1: # P…

    python-answer 2023年3月25日
    00
  • python实现红包裂变算法

    下面是详细讲解“Python实现红包裂变算法”的完整攻略,包括算法原理、Python实现和两个示例。 算法原理 红包裂变算法是一种常用的社交网络应用场景,其主要思想是将一定数量的红包金额分配给多个用户,使得每个用户获得的金额随机且公平。红包裂变算法的实现过程如下: 首先确定红包总金额和红包个数。 然后随机生成每个红包的金额,保证每个红包金额的总和等于红包总金…

    python 2023年5月14日
    00
  • Python datetime模块使用方法小结

    Python datetime模块是Python中用于处理日期和时间的标准库。这个模块提供了许多在日期和时间处理方面非常有用的类、函数和常量。 在使用datetime模块之前,我们需要先引入该模块。可以使用以下代码来导入datetime模块: import datetime 1. datetime的构造函数 datetime模块定义了几个类,其中最重要的是d…

    python 2023年6月2日
    00
  • python实现简单银行管理系统

    如何实现简单银行管理系统 简介 Python是一种高级编程语言,它可以用来开发各种应用程序,包括银行管理系统。本文将介绍如何使用Python编写一个简单的银行管理系统。 功能特点 简单的银行管理系统需要具备以下功能: 用户注册:用户可以注册一个帐户进行存款和取款操作。 存款:用户可以存入钱到自己的帐户。 取款:用户可以从自己的帐户中取出钱。 查询余额:用户可…

    python 2023年5月30日
    00
  • 详解Python中的__new__()方法的使用

    详解Python中的__new__()方法的使用 在Python中,__new__()方法是一个特殊的方法,用于创建对象并返回它。它是在__init__()方法之前调用的,用于创建实例并返回它。以下是Python中__new__()方法的详细解释: __new__()方法的基本用法 __new__()方法是一个类方法,用于创建一个新的实例。它的第一个参数是类…

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