news 2026/6/29 18:27:51

【接口自动化测试】Logging 日志模块

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【接口自动化测试】Logging 日志模块

文章目录

  • 1. 介绍
  • 2. 全局 logging
  • 3. 自定义 logger 并输出到控制台
  • 4. 自定义logger并输出到日志文件
  • 5. 自定义日志格式并输出到文件

1. 介绍

logging是 Python 标准库中的一个模块,它提供了灵活的日志记录功能。通过logging,开发者可以方便地将日志信息输出到控制台、文件、网络等多种目标,同时支持不同级别的日志记录,以满足不同场景下的需求。

下面介绍一下使用。

2. 全局 logging

代码如下所示:

importlogging# 默认情况下, logging输出warning及以上级别的日志# 指定输出级别, 输出info及以上级别的日志logging.basicConfig(level=logging.INFO)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')

运行结果如下:

3. 自定义 logger 并输出到控制台

代码如下所示:

# 导入 logging 模块importlogging logging.basicConfig(level=logging.INFO)# 获取一个日志记录器对象,名称为当前模块的名称logger=logging.getLogger(__name__)# 设置日志记录器的级别为 DEBUG# 这意味着所有级别为 DEBUG 及以上的日志都会被记录logger.setLevel(logging.DEBUG)if__name__=="__main__":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')

运行结果如下:

4. 自定义logger并输出到日志文件

代码如下所示:

# 导入 logging 模块importlogging# 获取一个日志记录器对象,名称为当前模块的名称logger=logging.getLogger(__name__)# 设置日志记录器的级别为 DEBUG# 这意味着所有级别为 DEBUG 及以上的日志都会被记录logger.setLevel(logging.DEBUG)# 创建一个 FileHandler 对象,指定日志文件的名称为 "mylog.log"# 这个处理器会将日志信息写入到指定的文件中handler=logging.FileHandler(filename="mylog.log")# 将这个处理器添加到日志记录器中# 这样,日志记录器就会使用这个处理器来处理日志信息logger.addHandler(handler)if__name__=="__main__":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')

结果如下所示:

关键概念说明:

  • 获取日志记录器:logging.getLogger(__name__)获取一个日志记录器对象,name 是当前模块的名称。使用模块名称作为日志记录器的名称有助于在大型项目中区分不同模块的日志。
  • 设置日志级别:logger.setLevel(logging.DEBUG)将日志记录器的级别设置为 DEBUG,这意味着所有 DEBUG 及以上级别的日志都会被记录。
    • 日志级别金字塔:DEBUG < INFO < WARNING < ERROR < CRITICAL
    • 高于设定级别的日志才会被处理
  • 创建文件处理器:logging.FileHandler(filename="mylog.log")创建一个文件处理器,将日志信息写入到名为mylog.log的文件中。
  • 添加处理器:logger.addHandler(handler)将文件处理器添加到日志记录器中,这样日志记录器就会使用这个处理器来处理日志信息。

5. 自定义日志格式并输出到文件

代码如下所示:

# 导入 logging 模块importlogging# 获取一个日志记录器对象,名称为当前模块的名称logger=logging.getLogger(__name__)# 设置日志记录器的级别为 DEBUG# 这意味着所有级别为 DEBUG 及以上的日志都会被记录logger.setLevel(logging.DEBUG)# 创建一个 FileHandler 对象,指定日志文件的名称为 "test.log"# 这个处理器会将日志信息写入到指定的文件中handler=logging.FileHandler(filename="test.log")# 创建一个日志格式器对象formatter=logging.Formatter("%(asctime)s %(levelname)s [%(name)s] [%(filename)s (%(funcName)s:%(lineno)d)] - %(message)s")# 将格式器设置到处理器上handler.setFormatter(formatter)# 将这个处理器添加到日志记录器中# 这样,日志记录器就会使用这个处理器来处理日志信息logger.addHandler(handler)if__name__=="__main__":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')

结果如下所示:

日志格式说明:logging.Formatter是用于定义日志输出格式的类。在构造函数中,传递了一个格式字符串,用于指定日志信息的格式。格式字符串中使用了一些特殊的占位符(以%开头),这些占位符会被替换为相应的日志信息内容。

如下表所示:

格式占位符说明
%(asctime)s日志记录的时间戳,通常显示为日期和时间。
%(levelname)s日志级别(如DEBUGINFOWARNINGERRORCRITICAL)。
%(name)s日志记录器的名称,通常为模块名称。
%(filename)s日志记录发生的文件名。
%(funcName)s日志记录发生的函数名。
%(lineno)d日志记录发生的行号。
%(message)s日志消息本身。

handler.setFormatter(formatter)将创建的格式器对象设置到处理器上。这意味着处理器在处理日志信息时,会使用这个格式器来格式化日志信息。

通过这种方式,你可以控制日志信息的输出格式,使其包含你感兴趣的信息,如时间戳、日志级别、文件名、函数名、行号等。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/29 18:26:39

AI编程实战:如何开发一个谷歌浏览器插件,并上架 Chrome 商店?

AI编程实战&#xff1a;如何开发一个谷歌浏览器插件&#xff0c;并上架 Chrome 商店&#xff1f; 本文适合&#xff1a;第一次用 AI 开发浏览器插件&#xff0c;并准备上架 Chrome 商店的人。 文章目录AI编程实战&#xff1a;如何开发一个谷歌浏览器插件&#xff0c;并上架 Chr…

作者头像 李华
网站建设 2026/6/29 18:26:34

C++:STL:Vector

STL(Standard Template Library,标准模板库)由容器(Container) + 算法(Algorithm) + 迭代器(Iterator)组成,算法通过迭代器操作容器的数据。容器分为序列式容器(动态数组vector、双端队列deque、双向链表list)、关联式容器(集合set / multiset)和容器适配器(栈s…

作者头像 李华
网站建设 2026/6/29 18:25:00

读书拆解(一)《认知红利·上》:为什么你越努力越焦虑?你最宝贵的财富不是时间,而是注意力

本文主要介绍了《认知红利上》的知识架构和一部分的个人思考总结 目录 第一章 你拥有的最宝贵的财富是什么 核心底层&#xff1a;注意力是人最顶级的财富 第二章 世界上只买卖一种产品 所有人的共同身份&#xff1a;时间商人&#xff08;四种变现模式&#xff0c;由初级到顶…

作者头像 李华
网站建设 2026/6/29 18:23:05

react+springAI 接入deepseek Demo

reactspringBoot 接入deepseek 先来看看实现效果 后端模块代码 后端模块 后端springBoot springAi 链接: https://pan.baidu.com/s/1Woio0RVgxLSVvbulhA9rxA?pwd1234 提取码: 1234 前端模块代码 前端reactvite 链接: https://pan.baidu.com/s/1eMdY8qe5TacdGEEoqskqaA?pw…

作者头像 李华
网站建设 2026/6/29 18:21:59

【学习记录】Week2(一):深入 ELF 结构视图与 .got/.plt 节区作用详解

写在前面&#xff1a;进入 Week2&#xff0c;我们需要把目光从宏观的保护机制下沉到微观的文件结构中。在平时用 readelf 或 objdump 分析二进制时&#xff0c;我们经常会看到“节区”和“段”这两个词。它们到底有啥区别&#xff1f;我们天天喊的“打 GOT 表”&#xff0c;GOT…

作者头像 李华
网站建设 2026/6/29 18:21:01

学习C#开源报表组件Seal Report(2:配置数据库连接)

Seal Report组件基于数据源生成报表&#xff0c;Seal Server Manager和Seal Report Designer都支持创建数据源&#xff0c;前者创建的数据表会被所有报表共享&#xff0c;适合那些在多个报表中都会用到的公共数据表&#xff0c;而后者创建的数据表仅对当前报表文件有效&#xf…

作者头像 李华