Python的logging模块基本用法

yizhihongxing

下面是详细讲解“Python的logging模块基本用法”的完整攻略。

简介

Python的logging模块是Python内置的一个标准库,它提供了一种非常灵活的记录日志信息的方式。使用logging模块可以将对程序的控制台输出、文件输出、邮箱输出进行统一管理,可有效地在开发、测试、部署、运维多个环节中使用,记录各种信息,比如错误信息、调试信息、运行信息等。在Python中,通过导入logging模块,我们可以非常方便地实现日志记录的功能。

logging模块基本用法

Python的logging模块中最基本的四个组件是:

  • Loggers:日志记录器,管理所有日志记录的入口,决定哪些日志记录器处理哪些日志消息。
  • Handlers:日志处理器,决定将日志记录器发送到哪个输出目标,如输出到控制台、写入到文件、通过 email 发送等。
  • Formatters:日志格式化器,决定日志输出的格式。
  • Filters:日志过滤器,根据需要对日志记录进行过滤。

下面我们来看看具体的操作方法。

创建日志记录器

import logging

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

在上面的代码中,通过logging.getLogger()方法的参数 name 来指定具体的记录器名称,__name__表示使用的是模块的名称。如果导入其他的模块,会显示那个模块的名称。通过设置 logger 的级别为 logging.INFO,可以指定日志记录器最低输出的日志级别为 INFO。

创建日志处理器

import logging

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

handler = logging.FileHandler("sample.log")
handler.setLevel(logging.INFO)

在上面的代码中,我们使用了 FileHandler,将日志信息写入文件中。可以根据需求选择其他的 Handler,比如 StreamHandler,ConsoleHandler等。

定义日志输出的格式

import logging

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

handler = logging.FileHandler("sample.log")
handler.setLevel(logging.INFO)

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

在上面的代码中,我们根据需求定义了日志的输出格式,%s 表示字符串占位符,%(asctime)s 表示输出时间、%(name)s 表示日志记录器的名称、%(levelname)s 表示日志级别、%(message)s 表示输出的日志信息。

添加日志记录器

import logging

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

handler = logging.FileHandler("sample.log")
handler.setLevel(logging.INFO)

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

logger.addHandler(handler)

在上面的代码中,我们向日志记录器中添加了我们刚才创建的日志处理器和日志格式化器,这样定义的日志记录器就可以将日志信息输出到文件中了。

记录日志

import logging

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

handler = logging.FileHandler("sample.log")
handler.setLevel(logging.INFO)

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

logger.addHandler(handler)

logger.info("This is a sample log.")

在上面的代码中,我们调用 logger 对象上的 info 方法,输出一条日志信息并记录到日志文件中。

示例一:同时输出到控制台和日志文件

import logging

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

consoleHandler = logging.StreamHandler()
consoleHandler.setLevel(logging.DEBUG)

fileHandler = logging.FileHandler("sample.log")
fileHandler.setLevel(logging.ERROR)

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

consoleHandler.setFormatter(formatter)
fileHandler.setFormatter(formatter)

logger.addHandler(consoleHandler)
logger.addHandler(fileHandler)

logger.info("This is a debug log.")
logger.error("This is an error log.")

在上面的代码中,我们首先创建了两个 Handler,一个用于将日志信息输出到控制台,一个用于将日志信息写入到文件中。在 consoleHandler 中设置的日志级别是 DEBUG,fileHandler 中设置的日志级别是 ERROR,这样就可以在控制台看到 debug 级别的日志信息,同时将 error 级别的日志信息记录到文件中。

示例二:使用过滤器实现日志过滤

import logging

class MyFilter(logging.Filter):
    def filter(self, record):
        return "debug" in record.getMessage()

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

consoleHandler = logging.StreamHandler()
consoleHandler.setLevel(logging.DEBUG)

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

logger.addHandler(consoleHandler)

logger.addFilter(MyFilter())

logger.debug("This is a debug log.")
logger.info("This is an info log.")
logger.warning("This is a warning log.")

在上面的代码中,我们实现了一个自定义的 Log Filter,通过判断记录信息中是否含有 "debug" 字符串,来过滤掉其他级别的信息,只让 debug 级别的信息输出。

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

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

相关文章

  • python高级特性和高阶函数及使用详解

    Python高级特性和高阶函数详解 在Python中,高级特性和高阶函数是我们需要掌握的一些重要概念,它们可以极大地简化我们的开发工作,提高我们的编程效率。 列表推导式 列表推导式是Python中非常有用、简洁的特性,它可以让我们用一种简洁而优雅的方式来生成列表。其基本语法如下: [expression for item in iterable if con…

    python 2023年5月14日
    00
  • Python处理EXCEL表格导入操作分步讲解

    首先我们来详细讲解Python处理Excel表格导入操作的完整实例教程。 一、背景介绍 在我们日常的数据处理中,Excel表格可谓是一个必不可少的工具。但是当我们需要处理大量的数据时,手动逐条插入或修改显然是非常耗时的,这时候我们就需要使用Python来进行批量处理,以提高效率。 二、前置要求 本教程需要你熟悉Python的基本语法和Excel表格的基本操作…

    python 2023年5月13日
    00
  • pip报错“ValueError: invalid literal for int() with base 10: ‘3.8’”怎么处理?

    当使用 pip 命令时,可能会遇到 “SyntaxError: invalid syntax” 错误。这个错误通常是由于命令行中输入的语法错误导致的。以下是详细讲解 pip 报错 “SyntaxError: invalid syntax” 的原因与解决办法,包含两条实例说明: 原因 “SyntaxError: invalid syntax” 错误通常是以下原…

    python 2023年5月4日
    00
  • 修复python-memcached在python3.8环境中报SyntaxWarning的问题(完美解决)

    当将python-memcached安装在Python3.8环境中时,会出现以下SyntaxWarning警告信息: /usr/local/lib/python3.8/site-packages/memcache.py:1533: SyntaxWarning: “is not” with a literal. Did you mean “!=“? if va…

    python 2023年5月13日
    00
  • 如何在Python 中获取单成员集合中的唯一元素

    要获取单成员集合中的唯一元素,我们可以使用Python中的单成员集合set和元组tuple。以下是获取单成员集合中唯一元素的攻略: 使用set 第一步:创建单成员集合 可以通过传入一个元素来创建单成员set,例如: single_set = set([1]) 第二步:提取元素 我们可以使用set.pop()方法提取其中唯一的元素,例如: unique_ele…

    python 2023年5月13日
    00
  • Python 迭代器介绍及作用详情

    Python 迭代器介绍及作用详情 在Python中,我们可以使用迭代器来遍历我们的数据集合,例如列表、元组、集合、字典等。本文将介绍Python迭代器的概念、作用、定义以及两个示例说明。 迭代器的概念 迭代器是Python用于遍历集合对象的一种机制,它是一种可以记住遍历位置的对象。换句话说,它是能够记录当前位置并能够返回下一个值的对象。 迭代器的作用 通过…

    python 2023年5月14日
    00
  • python selenium 获取标签的属性值、内容、状态方法

    Python Selenium 获取标签的属性值、内容、状态方法 在使用Python Selenium进行web自动化测试时,我们有时需要获取一些元素的属性值、内容或状态。在本篇文章中,我们将介绍如何使用Python Selenium获取这些信息的方法。 获取标签属性值 我们可以使用get_attribute()方法来获取元素的属性值,方法的参数为要获取的属…

    python 2023年6月3日
    00
  • Request的中断和ErrorHandler实例解析

    当我们在使用 Express 发起请求时,请求可能会因为各种原因中断,比如超时、网络连接问题等等。此时,我们就需要捕获对应的错误,为此,Express 提供了一个中间件函数 ErrorHandler。 下面,我们将开始详细讲解“Request的中断和ErrorHandler实例解析”的攻略。攻略分为如下两个部分: Request的中断 ErrorHandle…

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