我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python中的logging模块的简单应用和高级使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python中的logging模块的简单应用和高级使用

简单使用

在 Python 中,可以使用内置的 logging 模块来记录应用程序的信息。最简单的用法是使用 basicConfig() 函数配置 logging 模块,然后使用 getLogger() 方法创建一个 Logger 对象,用于记录信息。下面是一个简单的例子:

import logging

# 配置 logging
logging.basicConfig(level=logging.DEBUG)

# 创建 logger 对象
logger = logging.getLogger()

# 记录信息
logger.debug('这是一条调试信息')
logger.info('这是一条普通信息')
logger.warning('这是一条警告信息')
logger.error('这是一条错误信息')
logger.critical('这是一条严重错误信息')

在上面的例子中,我们使用 basicConfig() 函数设置日志级别为 DEBUG(最详细的日志信息),然后使用 getLogger() 方法创建了一个 Logger 对象。接下来,我们使用 Logger 对象的不同方法记录不同级别的信息。日志级别的优先级从低到高依次是 DEBUG、INFO、WARNING、ERROR、CRITICAL。

日志格式

logging 模块支持自定义日志格式,可以使用 format 参数来指定日志格式。日志格式可以包括时间、日志级别、日志信息等。下面是一个自定义日志格式的例子:

import logging

# 配置 logging
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(levelname)s %(message)s')

# 创建 logger 对象
logger = logging.getLogger()

# 记录信息
logger.debug('这是一条调试信息')
logger.info('这是一条普通信息')
logger.warning('这是一条警告信息')
logger.error('这是一条错误信息')
logger.critical('这是一条严重错误信息')

在上面的例子中,我们使用 format 参数指定了日志格式,其中 %(asctime)s 表示时间,%(levelname)s 表示日志级别,%(message)s 表示日志信息。

输出到文件

logging 模块支持将日志输出到文件中,可以使用 filename 和 filemode 参数来指定输出文件名和打开模式。下面是一个将日志输出到文件中的例子:

import logging

# 配置 logging
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(levelname)s %(message)s',
                    filename='app.log',
                    filemode='w')

# 创建 logger 对象
logger = logging.getLogger()

# 记录信息
logger.debug('这是一条调试信息')
logger.info('这是一条普通信息')
logger.warning('这是一条警告信息')
logger.error('这是一条错误信息')
logger.critical('这是一条严重错误信息')

在上面的例子中,我们使用 filename 参数指定输出文件名为 app.log,使用 filemode 参数指定打开模式为 w(覆盖写入)。

处理程序(Handler)

logging 模块提供了处理程序(Handler)的概念,用于处理日志记录的输出。默认情况下,日志记录会输出到控制台。我们可以添加一个或多个处理程序来指定不同的日志输出方式。例如,可以将日志输出到文件、网络、数据库等。下面是一个将日志输出到文件和控制台的例子:

import logging

# 创建 logger 对象
logger = logging.getLogger()

# 创建控制台处理程序并设置日志级别
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)

# 创建文件处理程序并设置日志级别
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.DEBUG)

# 创建日志格式器
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')

# 设置处理程序的日志格式器
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)

# 添加处理程序到 logger 对象
logger.addHandler(console_handler)
logger.addHandler(file_handler)

# 记录信息
logger.debug('这是一条调试信息')
logger.info('这是一条普通信息')
logger.warning('这是一条警告信息')
logger.error('这是一条错误信息')
logger.critical('这是一条严重错误信息')

在上面的例子中,我们创建了一个 Logger 对象,并添加了两个处理程序:一个控制台处理程序和一个文件处理程序。我们还创建了一个日志格式器,并将其设置为处理程序的格式器。然后,我们将处理程序添加到 Logger 对象中,最后记录了一些信息。由于控制台处理程序的日志级别设置为 INFO,因此调试信息不会输出到控制台。

过滤器(Filter)

logging 模块还提供了过滤器(Filter)的概念,用于对日志记录进行过滤。可以使用过滤器来控制哪些日志记录应该被处理,哪些不应该被处理。下面是一个使用过滤器的例子:

import logging

# 创建 logger 对象
logger = logging.getLogger()

# 创建控制台处理程序并设置日志级别
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)

# 创建过滤器并设置过滤条件
class CustomFilter(logging.Filter):
    def filter(self, record):
        return record.msg.startswith('警告')

filter = CustomFilter()

# 设置处理程序的过滤器
console_handler.addFilter(filter)

# 创建日志格式器
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')

# 设置处理程序的日志格式器
console_handler.setFormatter(formatter)

# 添加处理程序到 logger 对象
logger.addHandler(console_handler)

# 记录信息
logger.debug('这是一条调试信息')
logger.info('这是一条普通信息')
logger.warning('警告:这是一条警告信息')
logger.warning('这是又一条警告信息')
logger.error('这是一条错误信息')
logger.critical('这是一条严重错误信息')

在上面的例子中,我们创建了一个 Logger 对象,并添加了一个控制台处理程序。我们还创建了一个过滤器,并将其设置为控制台处理程序的过滤器。过滤器的 filter()方法用于指定哪些记录应该被处理,它返回 True 或 False表示是否处理该记录。在这个例子中,我们创建了一个自定义过滤器 CustomFilter,用于只处理以“警告”开头的日志记录。

高级使用

除了上述介绍的基本用法外,logging 模块还提供了一些高级功能,如日志回溯、日志轮换、日志缓冲等。

日志回溯

logging 模块支持记录回溯信息,可以使用 exc_info 参数来记录当前异常的回溯信息。

在 Python 中,当程序发生异常时,解释器会自动输出异常信息和回溯信息。异常信息通常包含异常类型和异常消息,回溯信息包含了程序执行时的堆栈信息,即函数调用栈的跟踪信息。回溯信息可以帮助开发人员定位程序错误的根源。

日志回溯是使用 logging 模块记录程序发生的异常信息和回溯信息。可以使用 Logger 对象的 error()、exception() 或 critical() 方法来记录异常信息和回溯信息。这些方法会自动记录当前异常的类型、消息和回溯信息,无需额外的代码

下面是一个记录回溯信息的例子:

import logging

# 配置 logging
logging.basicConfig(level=logging.DEBUG)

# 创建 logger 对象
logger = logging.getLogger()

# 记录信息和回溯信息
try:
    1/0
except Exception as e:
    logger.error('发生异常', exc_info=True)

在上面的例子中,我们使用 exc_info=True 参数记录了当前异常的回溯信息。当发生异常时,日志记录将包括异常信息和回溯信息。

2023-04-19 15:47:36,688 ERROR 发生异常
Traceback (most recent call last):
  File "<ipython-input-1-728869f0c30f>", line 7, in <module>
    1/0
ZeroDivisionError: division by zero

日志轮换

logging 模块支持日志轮换功能,可以将日志按时间或大小轮换到不同的文件中。

日志轮换(Log Rotation)是指在日志文件大小达到一定值或一定时间间隔后,自动将当前日志文件备份并创建一个新的日志文件,以便管理和维护。日志轮换可以避免日志文件过大、影响系统性能和管理不便等问题。

在 Python 的 logging 模块中,可以使用 logging.handlers 模块中的 RotatingFileHandler 和 TimedRotatingFileHandler 类来实现日志轮换功能。其中,RotatingFileHandler 类是按文件大小轮换日志文件,TimedRotatingFileHandler 类是按时间轮换日志文件。

下面是一个按时间轮换日志的例子:

import logging
from logging.handlers import TimedRotatingFileHandler

# 创建 logger 对象
logger = logging.getLogger()

# 创建按时间轮换的文件处理程序
handler = TimedRotatingFileHandler('app.log', when='midnight', backupCount=7)

# 创建日志格式器
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')

# 设置处理程序的日志格式器
handler.setFormatter(formatter)

# 添加处理程序到 logger 对象
logger.addHandler(handler)

# 记录信息
logger.debug('这是一条调试信息')
logger.info('这是一条普通信息')
logger.warning('这是一条警告信息')
logger.error('这是一条错误信息')
logger.critical('这是一条严重错误信息')

在上面的例子中,我们创建了一个按时间轮换的文件处理程序,它会在每天的午夜时分割日志文件。when 参数可以指定分割的时间点,backupCount 参数可以指定保留的日志文件个数。在使用 TimedRotatingFileHandler 类型的日志处理器对象时,会根据指定的时间间隔创建新的日志文件,并在文件名中添加时间戳后缀。

具体来说,当日志文件发生轮换时,会在原来的日志文件名后面添加一个时间戳后缀,例如:

  • 原始日志文件名为 app.log,当轮换发生时,会将其备份为 app.log.2023-04-20,其中 2023-04-20 为轮换时的日期。
  • 下次轮换发生时,会将原始日志文件名为 app.log 的文件备份为 app.log.2023-04-21,同时将 app.log.2023-04-20 删除,以保持日志文件的数量在备份数量之内。

因此,使用 TimedRotatingFileHandler 类型的日志处理器对象时,每个日志文件名中都会包含时间戳后缀,以便区分不同的日志文件。

日志缓冲

在使用 logging 模块记录日志时,默认情况下,每条日志信息都会立即写入到磁盘文件中。这样会频繁地访问磁盘,导致程序性能下降。

为了避免频繁访问磁盘,logging 模块提供了缓冲机制。当使用缓冲机制时,多条日志信息会先存储在内存中,直到满足一定条件后再将它们写入磁盘文件。通过这种方式可以减少频繁访问磁盘的次数,提高程序的性能和效率。

在 logging 模块中,可以使用 logging.handlers 模块中的 BufferingHandler 类来实现日志缓冲机制。BufferingHandler 类中的 bufferSize 参数指定了缓冲区的大小。当日志信息达到缓冲区的容量时,就会将缓冲区中的信息写入磁盘文件。

下面是一个使用日志缓冲机制的例子:

import logging
from logging.handlers import BufferingHandler

# 配置 logging
logging.basicConfig(level=logging.DEBUG)

# 创建 logger 对象
logger = logging.getLogger()

# 创建带缓冲的文件处理程序
handler = BufferingHandler(capacity=5)

# 将处理程序添加到 logger 对象
logger.addHandler(handler)

# 记录信息
for i in range(10):
    logger.debug('这是第 %s 条调试信息', i+1)

在上面的例子中,我们使用 BufferingHandler 类型的日志处理器对象创建了一个带缓冲的文件处理程序,并设置缓冲区的容量为 5。然后使用 logger 对象记录了 10 条日志信息。

由于缓冲区容量为 5,当记录了 5 条日志信息后,就会将它们一起写入磁盘文件。因此,第 1 条到第 5 条日志信息会被存储在内存缓冲区中,而第 6 条到第 10 条日志信息会被存储在内存缓冲区中,并在最后一次写入时一起写入到磁盘文件中。

通过这种方式,我们可以减少频繁访问磁盘的次数,提高程序的性能和效率。需要注意的是,设置过大的缓冲区容量可能会占用过多的内存,从而导致程序崩溃。因此,需要根据实际需求和系统资源进行权衡和设置。

总结

logging 模块是 Python 标准库中一个功能强大的日志记录工具。它可以记录应用程序的各种信息,并支持自定义日志格式、日志输出方式、日志级别、日志过滤器、日志回溯、日志轮换、日志缓冲等功能。使用 logging 模块可以帮助开发人员更好地调试和分析应用程序,提高开发效率和程序质量。

到此这篇关于python中的logging模块的简单应用和高级使用的文章就介绍到这了,更多相关python的logging模块高级应用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python中的logging模块的简单应用和高级使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python中的logging模块的简单应用和高级使用

在 Python 中,可以使用内置的 logging 模块来记录应用程序的信息,logging 模块还提供了一些高级功能,如日志回溯、日志轮换、日志缓冲等,需要的朋友可以参考下
2023-05-17

Python中的logging模块怎么使用

这篇文章主要介绍“Python中的logging模块怎么使用”,在日常操作中,相信很多人在Python中的logging模块怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中的logging
2023-07-06

Python Logging 模块在大型应用程序中的应用

Python Logging 模块在大型应用程序中发挥着至关重要的作用,它提供了日志记录、错误处理和调试的强大功能。本文着重探讨 Logging 模块在大型应用程序中的应用,展示如何使用它来捕获、过滤和存储日志信息。
Python Logging 模块在大型应用程序中的应用
2024-02-20

python的md5模块使用非常简单

python的md5模块使用非常简单,包括以下几个函数:md5.new([arg]) 返回一个md5对象,如果给出参数,则相当于调用了update(arg)md5.updte(arg) 用string参数arg更新md5对象md
2023-01-31

一文详解Python中logging模块的用法

logging是Python标准库中记录常用的记录日志库,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等。本文主要来和大家聊聊它的具体用法,希望对大家有所帮助
2023-02-28

python process模块的使用简介

目录process模块1、在python中启动一个子进程2、给子进程传递参数3、同时开多个子进程4、join的用法5、多进程之间的数据是否隔离6、为什么在Windows中Process()必须放到if __name__ == '__main
2022-06-02

node.js中debug模块的简单介绍与使用

前言 相信使用node.js的朋友们都知道,一般在nodejs需要进行调试的时候,可以使用console.log()方法来将调试信息输出到控制台,当发布到生产环境的时候,需要将这些调试信息都注释掉,为了方便切换而不需要改动程序代码,可以使用
2022-06-04

python中os模块和sys模块的使用详解

本文主要介绍了python中os模块和sys模块的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-03-21

Python模块怎么实现简单的调用

这篇文章给大家分享的是有关Python模块怎么实现简单的调用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎无所不能,该语言通
2023-06-14

Python中内置的日志模块logging用法详解

logging模块简介 Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用。这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/POST,SMTP,Socket等,甚至可
2022-06-04

简单掌握Python的Collections模块中counter结构的用法

counter 是一种特殊的字典,主要方便用来计数,key 是要计数的 item,value 保存的是个数。from collections import Counter>>> c = Counter('hello,world') Coun
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录