龙空技术网

软件测试|Python logging模块怎么使用,你会了吗?

测试者穆勒 68

前言:

此刻同学们对“pythonlogging编码”可能比较关注,兄弟们都需要学习一些“pythonlogging编码”的相关知识。那么小编在网上网罗了一些对于“pythonlogging编码””的相关知识,希望我们能喜欢,看官们快快来学习一下吧!

Python logging模块使用

在开发和维护Python应用程序时,日志记录是一项非常重要的任务。Python提供了内置的logging模块,它可以帮助我们方便地记录应用程序的运行时信息、错误和调试信息。本文将介绍如何使用Python logging模块进行日志记录。

获取更多技术资料,请点击!> 「链接」

logging模块

logging是Python自带的用于记录程序运行日志的模块,它将日志分为5个等级,分别是:

DEBUGINFOWARNINGERRORCRITICAL

同时也可以将日志输出到控制台或者写入到日志文件中。

logging中的常用对象

Logger:日志记录器,是应用程序中可以直接使用的接口。Handler:日志处理器,用以表明将日志保存到什么地方以及保存多久。Formatter:格式化,用以配置日志的输出格式。

三者关系为,一个 Logger 使用一个 Handler,一个 Handler 使用一个 Formatter

日志输出到控制台

import logging# 创建logger实例logger = logging.getLogger('example')# 设置日志级别logger.setLevel(logging.DEBUG)# 创建控制台处理器,将日志输出到控制台console_handler = logging.StreamHandler()console_handler.setLevel(logging.DEBUG)# 创建日志格式formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')# 将日志格式应用到处理器console_handler.setFormatter(formatter)# 将处理器添加到logger实例中logger.addHandler(console_handler)# 记录日志信息logger.debug('debug')logger.info('info')logger.warning('warning')logger.error('error')logger.critical('critical')

运行代码,控制台输出如下:

2023-06-29 11:04:29,242 - example - DEBUG - debug2023-06-29 11:04:29,242 - example - INFO - info2023-06-29 11:04:29,242 - example - WARNING - warning2023-06-29 11:04:29,242 - example - ERROR - error2023-06-29 11:04:29,242 - example - CRITICAL - critical
日志输出到文件

更多时候,我们需要将日志保存起来,所以我们可以指定将日志输出到日志文件中,代码如下:

import loggingfilename = "{}.log".format(__file__)fmt = "%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s"logging.basicConfig(    level=logging.DEBUG,    filename=filename,    filemode="w",    format=fmt)logging.info("info")logging.debug("debug")logging.warning("warning")logging.error("error")logging.critical("critical")

日志文件内容如下图:

同时输出到文件和控制台

import logging# 创建logger对象logger = logging.getLogger(__name__)logger.setLevel(logging.DEBUG)  # log等级总开关# log输出格式formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")# 控制台handlerstream_handler = logging.StreamHandler()stream_handler.setLevel(logging.INFO) # log等级的开关stream_handler.setFormatter(formatter)# 文件handlerfile_handler = logging.FileHandler("logging.log")file_handler.setLevel(logging.WARNING) # log等级的开关file_handler.setFormatter(formatter)# 添加到loggerlogger.addHandler(stream_handler)logger.addHandler(file_handler)# 输出日志logger.info("info")logger.debug("debug")logger.warning("warning")logger.error("error")logger.critical("critical")
logging.conf配置文件

我们可以通过logging.conf来配置日志的输出,logging.conf名称是固定的。

[loggers]keys = root[handlers]keys = logfile[formatters]keys = generic[logger_root]handlers = logfile[handler_logfile]class = handlers.TimedRotatingFileHandlerargs = ('demo.log', 'midnight', 1, 10)level = DEBUGformatter = generic[formatter_generic]format = %(asctime)s %(levelname)-3.5s [%(name)s:%(lineno)s] %(message)s
import logging.configlogging.config.fileConfig('logging.conf')logging.debug('debug message')logging.info("info message")logging.warning('warning message')logging.error("error message")logging.critical('critical message')

运行结果如下:

循环覆盖式日志处理

随着程序逐渐运行,日志规模会越来越大,我们就需要删除掉之前的日志,也可以设置单个日志的大小,当日志大小达到限定值时,会自动开始写入新的日志文件。

import loggingfrom logging.handlers import RotatingFileHandlerlogger = logging.getLogger("root")# 设置logger等级logger.setLevel(logging.DEBUG)# 设置日志格式formatter = logging.Formatter(    fmt='%(asctime)s - %(pathname)s - %(name)s - %(levelname)s: - %(message)s',    datefmt='%Y-%m-%d %H:%M:%S')# 设置日志回滚  # 单个日志文件最大为1k,# 最多保存4份日志文件(除了当前写入的文件外)# 日志文件编码格式为utf-8handler = RotatingFileHandler("logging.log", maxBytes=1024 * 1, backupCount=4, encoding='utf-8')handler.setFormatter(formatter)# 给logger添加handlerlogger.addHandler(handler)# 测试主模块for i in range(100):    logger.debug("测试日志main %d", i)
总结

通过使用Python的logging模块,我们可以方便地进行日志记录并获得应用程序的运行时信息。我们可以设置不同的日志级别,根据需要记录调试信息、警告、错误等。此外,我们还可以将日志记录到文件中,以供后续查看和分析。

使用logging模块进行日志记录可以帮助我们更好地理解应用程序的运行状况,并帮助我们快速定位和解决问题。建议在开发和维护Python应用程序时,充分利用logging模块进行日志记录。

获取更多技术资料,请点击!> 「链接」

标签: #pythonlogging编码 #python logging 不补空格