Python中使用logging模块代替print(logging简明指南)

Python中使用logging模块代替print(logging简明指南)

使用print输出调试信息是一种常见的方式,但是print的缺陷也很明显:有时候输出的信息太多太杂,有时候输出的信息太少无法发现问题。为了更好的管理和处理调试信息,Python提供了logging模块。

基本用法

使用logging的流程可以大致分为以下三个步骤:

  1. 导入logging模块
  2. 配置logging参数
  3. 使用logging输出信息

以下是一个基本的代码示例,演示了如何使用logging输出一条信息:

import logging

logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s [%(levelname)s] %(message)s',
                    handlers=[logging.StreamHandler()])
logging.info('Hello, logging!')

代码说明:

  1. 导入logging模块
  2. 调用basicConfig函数配置logging参数。这里我们设置了日志级别为INFO,格式为'[时间] [级别] 消息',使用了StreamHandler输出到控制台。
  3. 调用info函数输出一条信息。

上述代码执行后,会在控制台输出一条消息:

2022-01-01 00:00:00,000 [INFO] Hello, logging!

日志级别

logging提供了多种日志级别,用于过滤日志信息。从低到高分别是:DEBUG、INFO、WARNING、ERROR、CRITICAL。默认情况下,logging的日志级别是WARNING,即只输出WARNING及以上级别的日志信息。

示例:

import logging

# 基本配置
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s [%(levelname)s] %(message)s',
                    handlers=[logging.StreamHandler()])

# 输出不同级别的日志
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') # 输出

日志格式

通过设置format参数,可以自定义日志的格式。format参数是一个字符串,其中包含各种占位符,日志输出时会替换成相应的信息。

以下是一些常用的占位符:

  • %(asctime)s:日志发生时间
  • %(levelname)s:日志级别
  • %(message)s:输出内容
  • %(name)s:Logger的名称
  • %(module)s:发出日志调用的模块
  • %(lineno)d:发出日志调用的代码行号

示例:

import logging

# 基本配置
logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s [%(levelname)s] %(message)s',
                    handlers=[logging.StreamHandler()])

# 输出不同格式的日志
logging.info('This is a message with %(name)s')    # This is a message with root
logging.info('This is a message with %(module)s:%(lineno)d')    # This is a message with __main__:3

输出到文件

logging还可以将日志信息输出到文件中,通过FileHandler实现。以下是一个简单的代码示例:

import logging

# 基本配置
logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s [%(levelname)s] %(message)s',
                    handlers=[logging.FileHandler('log.txt')])

# 输出日志到文件
logging.info('Hello, logging!')

执行上述代码后,会在当前目录下生成一个log.txt文件,其中包含一条日志信息。

日志轮换

当日志文件变得比较大时,我们可能需要定期轮换日志。logging提供了RotatingFileHandler和TimedRotatingFileHandler两种实现方式。

  • RotatingFileHandler:按文件大小轮换日志文件。示例中的代码轮换的是文件大小,当达到5MB时,自动备份当前日志文件,重新生成一个新的文件。
  • TimedRotatingFileHandler:按时间轮换日志文件。示例中的代码以天为单位轮换,每天自动生成一个日志文件,最多保留10个文件。

示例:

import logging.handlers

# 日志轮换配置(按文件大小轮换)
log_handler = logging.handlers.RotatingFileHandler('example.log', maxBytes=5*1024*1024, backupCount=5)
log_handler.setLevel(logging.INFO)
log_handler.setFormatter(logging.Formatter('%(asctime)s [%(levelname)s] %(message)s'))

# 日志处理器加入Root Logger
root_logger = logging.getLogger()
root_logger.setLevel(logging.DEBUG)
root_logger.addHandler(log_handler)

# 输出日志
for i in range(10000):
    logging.info('This is a rotating log message.')

上述代码实现了按文件大小轮换日志文件。log_handler是用于轮换日志的处理器,maxBytes参数指定每个日志文件的最大大小,backupCount参数指定备份数量,即保留几个旧文件。其他部分和基本用法相同。

TimedRotatingFileHandler的使用方式和上述示例类似,这里不再赘述。

总结

使用logging可以更好的管理和处理调试信息,降低代码质量的成本。logging提供了多种定制化功能,可以满足不同的需求。建议在编写Python程序时,合理地使用logging模块,提高代码的可读性和可维护性。

以上是Python中使用logging模块代替print的详细攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中使用logging模块代替print(logging简明指南) - Python技术站

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

相关文章

  • python实现半自动化发送微信信息

    下面我将为你详细讲解“python实现半自动化发送微信信息”的完整攻略,包括以下几个步骤: 安装itchat库 扫码登录微信 获取好友列表 发送文本信息 发送图片信息 详细说明如下: 1. 安装itchat库 itchat是一个开源的微信个人号接口,使用Python调用微信从未如此简单。可以使用pip在命令行中安装,如下所示: pip install itc…

    python 2023年5月18日
    00
  • python 基于aiohttp的异步爬虫实战详解

    Python基于aiohttp的异步爬虫实战详解攻略 本文将介绍基于aiohttp实现简单的异步爬虫的步骤和方法,让您轻松掌握异步爬虫开发! 安装aiohttp 首先,我们需要安装aiohttp库,执行以下命令: pip install aiohttp 简单的异步爬虫示例 下面,我们将使用aiohttp实现简单的异步爬虫。要爬取的网址是https://www…

    python 2023年5月14日
    00
  • Python面向对象程序设计构造函数和析构函数用法分析

    Python面向对象程序设计构造函数和析构函数用法分析 构造函数 在 Python 中,构造函数是用于在对象创建时进行初始化操作的特殊函数。Python 中的构造函数是 init()。 示例一: class Car: def __init__(self, make, model, year): self.make = make self.model = mo…

    python 2023年6月7日
    00
  • Python 抓取动态网页内容方案详解

    当我们需要获取动态网页的内容时,传统的爬虫方式已经无法满足需求,这时候我们可以考虑使用Python抓取动态网页内容。下面是Python抓取动态网页内容的详细攻略: 网页内容加载方式 动态网页与静态网页的主要区别在于内容的加载方式。静态网页内容都是在服务器上生成好的,客户端只需要请求一次,就可以得到完整的html代码,而动态网页的内容是通过JavaScript…

    python 2023年5月14日
    00
  • 详解Python namedtuple的优点

    Python中的namedtuple是一个非常有用的数据类型,它允许用户为元组中的每个元素定义名称,并用这些名称来引用元素。由于具有元组的不可变性,namedtuple比字典更加高效。 以下是namedtuple的一些优点: 内存效率:namedtuple比类更轻巧,因为它不需要创建新的__class__来实现。 速度快:与对象属性进行访问相比,namedt…

    python-answer 2023年3月25日
    00
  • Python实现简单文本字符串处理的方法

    Python实现简单文本字符串处理的方法 在Python中,我们可以使用字符串处理函数和正则表达式等工具来实现简单的文本字符串处理。本文将介绍如何使用Python实现简单的文本字符串处理,包括字符串拼接、字符串替换、字符串分割、字符串查找和正则表达式等操作。 字符串拼接 字符串拼接是将多个字符串连接成一个字符串的操作。在Python中,我们可以使用加号(+)…

    python 2023年5月14日
    00
  • python-yml文件读写与xml文件读写

    YAML文件读写 YAML是一种数据序列化格式,它比XML更容易阅读和编写。Python中有一个pyyaml库可以用于读写YAML文件。 安装pyyaml库 使用pip命令安装pyyaml库: pip install pyyaml 写YAML文件 可以通过dict对象和PyYAML库将Python字典数据结构写入YAML文件,示例代码如下: import y…

    python 2023年6月3日
    00
  • 分享11个Python自动化操作Excel的方法

    分享11个Python自动化操作Excel的方法 本次攻略将会介绍11个可以用Python进行Excel自动化操作的方法,这将会对需要频繁操作Excel的企业,以及需要进行Excel数据处理的数据分析人员有所帮助。 示例1:写入Excel数据 import openpyxl wb = openpyxl.Workbook() # 新建一个excel ws = …

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