Python中的Logging模块在项目应用小结

 更新时间:2024年04月22日 09:22:10   作者:平时不搬砖  
Python标准库中的logging模块为我们提供了强大而灵活的日志记录功能,本文将介绍如何使用logging模块,并探讨其在Python开发中的实际应用,感兴趣的朋友一起看看吧

在Python编程中,日志记录(Logging)是一项至关重要的任务,它帮助我们跟踪代码的运行状态、识别错误以及优化程序性能。Python标准库中的logging模块为我们提供了强大而灵活的日志记录功能。本文将介绍如何使用logging模块,并探讨其在Python开发中的实际应用。

一、基本使用

首先,我们需要导入logging模块,并配置基本的日志记录器(Logger)。以下是一个简单的示例:

python
import logging  
# 配置日志记录器  
logging.basicConfig(level=logging.DEBUG,  
                    format='%(asctime)s - %(levelname)s - %(message)s',  
                    filename='example.log',  
                    filemode='w')  
# 在代码中使用日志记录器  
logging.debug('This is a debug message.')  
logging.info('This is an info message.')  
logging.warning('This is a warning message.')  
logging.error('This is an error message.')  
logging.critical('This is a critical message.')

在这个示例中,我们首先通过basicConfig方法配置了日志记录器。level参数用于设置日志级别,这里我们设置为DEBUG,意味着所有级别的日志都会被记录。format参数用于定义日志消息的格式,包括时间戳、日志级别和消息内容。filename参数指定了日志文件的名称,filemode参数用于设置文件的打开模式。

接下来,我们在代码中使用了不同级别的日志记录方法,如debug、info、warning、error和critical。这些方法会根据配置的日志级别来决定是否记录消息。

二、高级配置

除了基本配置外,logging模块还支持更高级的配置选项,以满足复杂的日志记录需求。例如,我们可以创建多个日志记录器,为每个记录器设置不同的处理器(Handler)和格式化器(Formatter)。

以下是一个更复杂的示例,展示了如何创建多个日志记录器,并将日志输出到控制台和文件:

python
import logging  
# 创建一个日志记录器  
logger = logging.getLogger('my_logger')  
logger.setLevel(logging.DEBUG)  
# 创建一个控制台处理器,将日志输出到控制台  
console_handler = logging.StreamHandler()  
console_handler.setLevel(logging.INFO)  
# 创建一个文件处理器,将日志输出到文件  
file_handler = logging.FileHandler('example.log')  
file_handler.setLevel(logging.DEBUG)  
# 创建一个格式化器,定义日志消息的格式  
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')  
# 将格式化器添加到处理器中  
console_handler.setFormatter(formatter)  
file_handler.setFormatter(formatter)  
# 将处理器添加到记录器中  
logger.addHandler(console_handler)  
logger.addHandler(file_handler)  
# 在代码中使用日志记录器  
logger.debug('This is a debug message.')  
logger.info('This is an info message.')  
logger.warning('This is a warning message.')  
logger.error('This is an error message.')  
logger.critical('This is a critical message.')

在这个示例中,我们首先创建了一个名为my_logger的日志记录器,并设置了日志级别为DEBUG。然后,我们创建了一个控制台处理器和一个文件处理器,并分别为它们设置了日志级别和格式化器。最后,我们将这两个处理器添加到了记录器中。这样,当我们使用logger对象记录日志时,消息会同时输出到控制台和文件中。

三、日志模块结构

在这里插入图片描述

组件名称对应的类对应描述
日志记录器Logger提供了应用程序的日志记录功能
处理器Handler提供日志的一条处理方式
过滤器Filter提供了更细颗粒的控制工具来决定输出日志的记录
格式化器Formmtter提供日志的格式

四、项目中应用

如下的代码为django项目中使用日志记录模块的示例

import os
import logging
import sys
from django.conf import settings
from datetime import datetime
os.makedirs(settings.LOGS, exist_ok=True)
class Logger:
    _instance = None
    def __init__(self):
        self.format = '%(asctime)s %(thread)d %(threadName)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s'
        # django中项目的名称
        self.logger = logging.getLogger(settings.PROJECTNAME)
        self.logger.setLevel(logging.DEBUG)
        self.add_stream_handle()
        self.file = os.path.join(settings.LOGS, f'{datetime.now().strftime("%Y%m%d_%H%M%S")}.log')
        self.add_file_handle(self.file)
    def add_stream_handle(self):
        handler = logging.StreamHandler(sys.stdout)
        handler.setLevel(level=logging.INFO)
        handler.setFormatter(logging.Formatter(self.format))
        self.logger.addHandler(handler)
    def add_file_handle(self, file):
        handler = logging.FileHandler(file, encoding="utf-8")
        handler.setLevel(level=logging.DEBUG)
        handler.setFormatter(logging.Formatter(self.format))
        self.logger.addHandler(handler)
    @classmethod
    def get_logger(cls):
    	# 初始化一次,通常__init__.py文件中调用
        if cls._instance is None:
            cls._instance = Logger().logger
        return cls._instance
Logger.get_logger()
# 其他模块中使用
import logging
from django.conf import settings
logger = logging.getLogger(settings.PROJECTNAME)
logger.info("INFO")
logger.warning("WARNING")
logger.error("ERROR")

到此这篇关于Python中的Logging模块在项目应用小结的文章就介绍到这了,更多相关Python Logging模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用Pandas实现可视化带有标签列的数据表

    使用Pandas实现可视化带有标签列的数据表

    Pandas是Python中一个灵活强大的数据处理库,它提供了大量数据操作和分析工具,本文我们将讨论如何使用Pandas可视化带有标签列的数据表,以便更好地呈现和传达数据的信息,需要的可以了解下
    2024-02-02
  • python中复数的共轭复数知识点总结

    python中复数的共轭复数知识点总结

    在本篇内容里小编给大家整理的是关于python中复数的共轭复数知识点总结,有需要的朋友们可以学习下。
    2020-12-12
  • python实现登陆知乎获得个人收藏并保存为word文件

    python实现登陆知乎获得个人收藏并保存为word文件

    这篇文章主要介绍了python实现登陆知乎获得个人收藏并保存为word文件,本文直接给出实现代码,需要的朋友可以参考下
    2015-03-03
  • pytorch 中pad函数toch.nn.functional.pad()的用法

    pytorch 中pad函数toch.nn.functional.pad()的用法

    今天小编就为大家分享一篇pytorch 中pad函数toch.nn.functional.pad()的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • 使用Python实现画一个中国地图

    使用Python实现画一个中国地图

    今天小编就为大家分享一篇使用Python实现画一个中国地图,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Python2.x中文乱码问题解决方法

    Python2.x中文乱码问题解决方法

    这篇文章主要介绍了Python2.x中文乱码问题解决方法,本文解释问题原因、给出了处理办法并讲解了编码解码的一些知识,需要的朋友可以参考下
    2015-06-06
  • python模拟投掷色子并数据可视化统计图

    python模拟投掷色子并数据可视化统计图

    这篇文章主要介绍了python模拟投掷色子并数据可视化统计图,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • Python使用Shelve保存对象方法总结

    Python使用Shelve保存对象方法总结

    在本篇文章里我们给大家分享的是关于Python使用Shelve保存对象的知识点总结,有兴趣的朋友们学习下。
    2019-01-01
  • python利用微信公众号实现报警功能

    python利用微信公众号实现报警功能

    微信公众号共有三种,服务号、订阅号、企业号。它们在获取AccessToken上各有不同。接下来通过本文给大家介绍python利用微信公众号实现报警功能,感兴趣的朋友一起看看吧
    2018-06-06
  • Django模板继承与模板的导入实例详解

    Django模板继承与模板的导入实例详解

    模板继承主要是为了提高代码重用,减轻开发人员的工作量,下面这篇文章主要给大家介绍了关于Django模板继承与模板导入的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03

最新评论