当前位置: 首页 > news >正文

Python不会调试不够丝滑?那事你不会logging---剖析!

前言:

一直都是手动debug进行调试,F8都按烂了;最近用logging进行提前布置,发现这样更能让代码走得丝滑,同时也能尽早发现问题!

基本概念:


Logger - 日志记录接口
Handler - 确定日志记录发送到不同的地方(文件、控制台等)
Level - 定义了日志的严重性级别(DEBUG、INFO、WARNING、ERROR、CRITICAL)
Formatter - 定义日志的布局,即格式

举例子(logging模块,简单):

import logging# 配置日志基础参数:级别和格式
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')# 创建一个logger
logger = logging.getLogger(__name__)# 日志消息示例
logger.debug('这是 debug 级别的日志,通常用于调试')
logger.info('这是 info 级别的日志,常规操作消息')
logger.warning('这是 warning 级别的日志,指示有潜在问题')
logger.error('这是 error 级别的日志,标识操作中的严重问题')
logger.critical('这是 critical 级别的日志,指严重的错误')# 输出将会是info及以上级别的日志,因为配置了level=logging.INFO
请注意这个例子中,只有INFO级别及以上级别的日志信息(Default level)会被输出到控制台,因为我们在basicConfig中设置了级别为INFO。如果需要将消息存储在文件中,而不是在控制台输出,则需要将handers添加到logger中。如果同时将日志打印至控制台和写入文件,可以另外添加StreamHandler和FileHandler到你的logger。

举例子(输出到控制台和文件):

import logging# 首先,创建一个Logger对象
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)  # 设置捕捉所有级别日志# 接着,创建Formatter对象以设定日志格式
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')# 创建一个StreamHandler实例用于输出到控制台
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)  # 设置只输出INFO级别及以上的日志到控制台
console_handler.setFormatter(formatter)  # 应用日志格式# 创建一个FileHandler实例用于写入文件,例如写入example.log
file_handler = logging.FileHandler('example.log')
file_handler.setLevel(logging.DEBUG)  # 设置记录DEBUG级别及以上的日志到文件
file_handler.setFormatter(formatter)  # 应用日志格式# 添加之前创建的Handler至logger
logger.addHandler(console_handler)
logger.addHandler(file_handler)# 记录不同级别日志的示例
logger.debug('这是DEBUG级别的信息,因为FileHandler设置为DEBUG级别,所以它能记录在文件里。')
logger.info('这是INFO级别的信息,Info级别的日志会输出在控制台。')
logger.warning('这是WARNING级别的信息,会既出现在控制台也会记录在文件中。')
logger.error('这是ERROR级别的信息,会既出现在控制台也会记录在文件中。')
logger.critical('这是CRITICAL级别的信息,会既出现在控制台也会记录在文件中。')#  现在,在控制台上将会看到INFO及更高级别的日志,
#  而在“example.log”文件中将会看到DEBUG及更高级别的日志。
级别为DEBUG以上的日志会被写入example.log文件,而控制台只会显示INFO级别及以上的日志信息。通过调整setLevel方法的参数,你可以自定义不同Handler所处理的日志级别。记得最后调用addHandler方法将handler添加至logger。


 




最后经验分享:

在生产中应用:

在生产环境中不要使用print语句,而应该使用一个配置良好的日志系统;这能够提供灵活的日志管理。

避免过多无关日志:

过多的日志可以隐藏真正重要的信息,合理设定日志级别,捕获关键信息。

异步/队列日志记录:

高并发应用中,考虑使用异步方式记录日志或者使用消息队列来减少日志记录对性能的影响。

http://www.lryc.cn/news/238303.html

相关文章:

  • OpenAI的Whisper蒸馏:蒸馏后的Distil-Whisper速度提升6倍
  • Ubuntu18.04安装LeGO-LOAM保姆级教程
  • git修改commit历史提交时间、作者
  • 【C++历练之路】list的重要接口||底层逻辑的三个封装以及模拟实现
  • Kubeadm部署Kubernetes Containerd集群
  • OpenCV入门9——目标识别(车辆统计)
  • 2023前端大厂高频面试题之JavaScript篇(5)
  • 物联网网关在工业行业的应用案例
  • 5、基础入门——资产架构端口应用WAF站库分离负载均衡
  • golang学习笔记——接口和继承比较1
  • chatGPT快捷键(最新版本)
  • 77基于matlab的蚁群优化路径算法,二维路径和三维路径优化
  • PyTorch中并行训练的几种方式
  • 基于非链式(数组)结点结构的二叉树的层序输入创建以及遍历
  • 云计算:开辟数字时代的无限可能
  • Django+Vue项目创建 跑通
  • 2023年中职“网络安全“—Linux系统渗透提权②
  • 多模态大模型训练数据集汇总介绍
  • IDEA中更换java项目JDK
  • C++函数
  • 设计模式-命令模式-笔记
  • 酒店品牌纷纷冲击中高端,东呈集团能否“快人一步”?
  • [hive] posexplode函数
  • C#具名参数(Named Parameters)
  • Vue3的组件如何通讯
  • MySQL SUBSTRING_INDEX 函数用法
  • 腾讯微服务平台TSF学习笔记(一)--如何使用TSF的Sidecar过滤器实现mesh应用的故障注入
  • day30_servlet
  • 计算机毕业设计 基于SpringBoot的社区物资交易互助平台/系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • go 判断两棵树内容是否一致