python 实现运行代码时生成日志,日志里面包括(执行时间、级别(info)、请求的路径,请求的参数,输出的结果)

news/2024/4/27 12:12:08/文章来源:https://blog.csdn.net/weixin_45471729/article/details/130335759

我们可以使用Python内置的logging模块来实现这个功能。下面是一个例子,展示如何在代码中生成日志。

import logging# 创建日志对象
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)# 创建日志处理器
handler = logging.FileHandler('log.txt')
handler.setLevel(logging.INFO)# 创建日志格式器
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
handler.setFormatter(formatter)# 将日志处理器添加到日志对象中
logger.addHandler(handler)# 生成日志
logger.info('请求路径:%s,请求参数:%s,输出结果:%s', '/path/to/api', {'key': 'value'}, 'result')

上面的代码中,首先创建了一个名为logger的日志对象,并将日志级别设置为INFO。然后创建一个名为handler的日志处理器,用于将日志输出到文件log.txt中。接着创建一个名为formatter的日志格式器,用于指定日志的格式。最后将处理器和格式器分别添加到日志对象中,生成日志时就可以使用logger.info()方法,将请求路径、请求参数和输出结果作为参数传入,生成日志。

在实际应用中,你可以根据需要自定义日志的格式、级别和输出方式,以满足不同的需求。
我们通过上面的代码,对代码进行优化封装的示例:

import loggingdef setup_logger(name, log_file, level=logging.INFO):"""设置日志记录器:param name: 日志记录器名称:param log_file: 日志文件路径:param level: 日志记录级别:return: 日志记录器对象"""logger = logging.getLogger(name)logger.setLevel(level)handler = logging.FileHandler(log_file)handler.setLevel(level)formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')handler.setFormatter(formatter)logger.addHandler(handler)return loggerdef log_request(logger, path, params, result):"""记录请求日志:param logger: 日志记录器对象:param path: 请求路径:param params: 请求参数:param result: 输出结果"""logger.info(f'请求路径:{path},请求参数:{params},输出结果:{result}') #logger.info('请求路径:%s,请求参数:%s,输出结果:%s', path, params, result)

上面的代码中,我们定义了两个函数:

  • setup_logger():用于设置日志记录器,接受三个参数:name表示日志记录器的名称,log_file表示日志文件的路径,level表示日志记录的级别。在函数中,我们创建了一个名为logger的日志记录器对象,并将其级别设置为传入的level参数。然后创建一个名为handler的日志处理器对象,用于将日志记录到指定的文件中。接着创建一个名为formatter的日志格式化器对象,将其格式设置为包含时间、级别和消息的格式。最后将处理器和格式化器分别添加到日志记录器对象中,并返回记录器对象。
  • log_request():用于记录请求日志,接受四个参数:logger表示日志记录器对象,path表示请求的路径,params表示请求的参数,result表示输出的结果。在函数中,我们调用日志记录器对象的info()方法,将请求路径、请求参数和输出结果作为参数传入,生成日志。

使用时,可以先调用setup_logger()函数创建一个日志记录器对象,然后在需要记录请求日志的地方,调用log_request()函数即可。例如:

logger = setup_logger('test_logger', 'log.txt')
log_request(logger, '/path/to/api', {'key': 'value'}, 'result')

这样,就可以方便地记录请求日志了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_102624.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库物理存储结构

目录 一、数据库文件和文件组 1、数据库文件 (1) 主数据库文件(Primary Database File) (2) 次数据库文件(Secondary Database File) (3) 事务日志文件 …

Mysql 45讲和45问笔记(未完待续0203/04/24)

一、mysql 45讲 1)索引的本质讲解 定义解释 所以是帮助Mysql高效获取数据的排好序的数据结构 索引数据结构 ①二叉树 ②红黑树 ③Hash表 ④B-Tree 原理讲解 可以看到右边的数据结构里面,是按照k-v来存数据结构的,key是col2的字段&#xf…

Java学习-MySQL-事务

Java学习-MySQL-事务 ACID原则:原子性、一致性、隔离性、持久性 原子性(Atomicity) 两个步骤要么一起成功,要么一起失败,不可能只成功一个。 举例: A账户400元,B账户600元,A向B转…

Yolo v1 笔记

个人不太懂的点 1.损失函数的4与5项 【论文解读】Yolo三部曲解读——Yolov1 - 知乎 https://www.youtube.com/watch?vNkFENlEb4kM&t672s 训练阶段: C_i 预测值:由网络输出出来7*7*30中第一个bbox和第二个bbox的置信度confidence C_i^hat 标签值…

PTA L2-046 天梯赛的赛场安排 (25 分)

天梯赛使用 OMS 监考系统,需要将参赛队员安排到系统中的虚拟赛场里,并为每个赛场分配一位监考老师。每位监考老师需要联系自己赛场内队员对应的教练们,以便发放比赛账号。为了尽可能减少教练和监考的沟通负担,我们要求赛场的安排满…

C++ 类和对象(中)构造函数 和 析构函数

上篇链接:C 类和对象(上)_chihiro1122的博客-CSDN博客 类的6个默认成员函数 我们在C当中,在写一些函数的时候,比如在栈的例子: 如上述例子,用C 返回这个栈是否为空,直接返回的话&am…

利用Python操作Mysql数据库

我们在进行Python编程的时候,时常要将一些数据保存起来,其中最方便的莫过于保存在文本文件了。但是如果保存的文件太大,用文本文件就不太现实了,毕竟打开都是个问题,这个时候我们需要用到数据库。提到数据库&#xff0…

json模块和pickle模块

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 json和pickle模块 json模块序列化与反序列化json模块中的方法 pickle模块 专栏:《python从…

JAVAweb开发学习

六、MybatisPlus快速上手 数据库操作 注意!注意!注意!springboot版本选择2.7.2 1.ORM介绍(对象关系映射) 既包含存储,又包含映射。将java类映射到数据库 2.MybatisPlus介绍 ORM框架 数据库操作来啦…

【计算机网络】为什么 TCP 每次建立连接时,初始化序列号都要不一样呢?

【计算机网络】为什么 TCP 每次建立连接时,初始化序列号都要不一样呢? 为什么 TCP 每次建立连接时,初始化序列号都要不一样呢? 主要原因是为了防止历史报文被下一个相同四元组的连接接收。 TCP 四次挥手中的 TIME_WAIT 状态不是会…

机械键盘、口袋打印机,万元奖金等你拿!「万象格新」AI绘画X海报设计大赛即将开启...

号外!「万象格新」大赛开启 如果阳光暖到你心里,那一定是一格在想你~ 春夏交替,万物焕发生机,明媚色彩娱情惬意 在这样一个美好的时节 如果你: 心中荡漾着色彩斑斓的 AI 绘画创意 想要 show 出独到的审美与非凡设计能力…

吴恩达团队AI诊断心律失常研究:准确率超人类医生

2019年,吴恩达团队在AI医疗领域实现了一项革命性的突破,他们成功地让AI诊断心律失常,其准确率高达83.7%,超过了人类心脏病医生的78.0%。这项研究成果已经发表在了知名期刊Nature Medicine上。 一、如何让AI学会诊断心律失常&…

闲谈【Stable-Diffusion WEBUI】的插件:美不美?交给AI打分

文章目录 (零)前言(一)咖啡店艺术评价(Cafe Aesthetic) (零)前言 本篇主要提到了WEBUI的Cafe Aesthetic插件,这是一个相对独立的插件,单独标签页,…

Python小姿势 - Python基础知识

Python基础知识 Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。 Python的创始人为吉多范罗苏姆(Guido van Rossum),于1989年底发布第一个公开发行版本——0.9.0。 自2004年以来,Python已经成为顶级开源项目&…

希尔排序的实现

希尔排序是插入排序的一种升级,其基本思想是: 先选定一个整数,把待排序文件中所有记录分成个组,所有距离为的记录分在同一组内,并对每 一组内的记录进行排序。然后,取,重复上述分组和排序的工 作…

使用Linux运维常识

一.基础操作 1.终端常用快捷键 快捷键描述ctrl键盘左键向左跳一个单词ctrl键盘右键向右跳一个单词Ctrl c停止当前正在运行的命令。Ctrl z将当前正在运行的命令放入后台并暂停它的进程。Ctrl d关闭当前终端会话。Ctrl l清屏,也可以用clear命令实现Tab自动补全当…

Asp.NET CORE实验室信息管理系统源码,支持IIS独立部署,Docker部署

技术架构:Asp.NET CORE 3.1 MVC SQLserver Redis等 基于B/S架构的实验室管理系统源码,整个系统的运行基于WEB层面,只需要在对应的工作台安装一个浏览器软件有外网即可访问。全套系统采用云部署模式,部署一套可支持多家医院检验…

自定义RecyclerView.LayoutManager实现类实现卡片层叠布局的列表效果

一.前言 先看效果(大佬们请忽略水印): 卡片层叠列表的实现效果已经发布成插件,集成地址:implementation ‘com.github.MrFishC:YcrCardLayoutHepler:v1.1’; 先讲解如何快速实现,然后再来讲解…

托福高频真词List05 // 附托福TPO阅读真题

目录 4月23日单词 生词 熟词 4月24日真题 4月23日单词 生词 sparsethinly distributedadj 稀疏的sparselythinlyadv 稀疏地congestion / kənˈdʒestʃən / overcrowdingn 拥挤continuallyregularlyadv 持续的eradicateeliminatev 消除facilitatemake easiereasev 使..…

《面试1v1》java泛型

我是 javapub,一名 Markdown 程序员从👨‍💻,八股文种子选手。 面试官:小伙子,说实话,泛型这个机制一开始我也是一头雾水,搞不太明白它到底要解决什么问题。你能不能不那么书呆子,给我普普通通地讲一讲泛型? 候选人…