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

yizhihongxing

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日

相关文章

  • 如何在Julia中安装NumPy包

    在 Julia 中安装 NumPy 包,需要先安装 PyCall 包。PyCall 是 Julia 的一个 Python 调用库,通过 PyCall 可以在 Julia 中使用 Python 的功能,包括 NumPy 库。 以下是在 Julia 中安装 NumPy 包的完整攻略: 安装 PyCall 包 在 Julia 中,可以使用 Pkg.add() 命令…

    python-answer 2023年3月25日
    00
  • 最新python正则表达式(re模块)详解

    最新Python正则表达式(re模块)详解 正则表达式是一种强大的文本处理工具,可以用于匹配、查找、替换和割字符串。Python提供了re模块来处理正则表达式。本文将为您详细讲解Python正则表达式语法、re模块的常用方法和两个示例说明。 正则表达式语法 在正则表达式中使用[]表示字符集,^表示取反,-表示范围,+匹配一个或多个字符,*表示匹配零或多个字符…

    python 2023年5月14日
    00
  • Python 重新缩放数据

    【问题标题】:Python Rescale DataPython 重新缩放数据 【发布时间】:2023-04-04 19:46:01 【问题描述】: 我在以下代码中收到此错误。我收到的错误没有给我任何地址的线索。请帮忙。 错误:TypeError: ‘ 代码: from pandas import read_csv from numpy import set…

    Python开发 2023年4月6日
    00
  • Python max()和min()寻找极值

    Python的max()和min()是内置函数,用于寻找可迭代对象(如列表,元组,字典等)中的最大值和最小值。 以下是它们的使用方法: max()函数 max(iterable[, key=func]) -> value With a single iterable argument, return its biggest item. The defa…

    python-answer 2023年3月25日
    00
  • 基于python修改srt字幕的时间轴

    基于python修改srt字幕的时间轴,可以通过以下几个步骤完成: 1. 读取SRT文件 使用Python中的open()方法,打开要修改的SRT文件,读取其内容,并存储在一个变量中。代码如下: with open(‘subtitle.srt’, ‘r’, encoding=’utf-8′) as f: content = f.read() 2. 更改时间轴…

    python 2023年6月2日
    00
  • Python while true实现爬虫定时任务

    实现爬虫的定时任务需要用到while True循环和time.sleep()方法。当然在循环内部还需要完成实际的爬虫任务。下面是具体的步骤: 1. 导入相关模块 首先要导入的模块是requests和beautifulsoup4,用于进行网络请求和网页解析。另外还需要time模块用于设置间隔时间。 import requests from bs4 import…

    python 2023年6月3日
    00
  • Python语言进阶知识点总结

    Python语言进阶知识点总结 Python是一种高级编程语言,应用广泛且逐渐成为许多开发人员的首选语言。本文将介绍Python语言的一些进阶知识点。 1. 类与对象 Python是一种面向对象编程语言,支持类和对象的概念。我们可以使用class来定义一个类,使用对象的实例来调用类的方法和属性。 示例1: class Person: def __init__…

    python 2023年5月13日
    00
  • Python开发入门——迭代的基本使用

    Python开发入门——迭代的基本使用 什么是迭代? 迭代是指,在程序中重复执行一段代码的过程。常用的迭代方式有循环和递归。在Python中,循环通常使用for语句来实现。 循环语句 在Python中,for循环可以有两种写法。 第一种写法 第一种写法是针对特定的数据类型,如列表、元组、字符串等,通过in关键字来实现遍历操作。 以列表为例,代码如下: my_…

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