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语句,而应该使用一个配置良好的日志系统;这能够提供灵活的日志管理。
避免过多无关日志:
过多的日志可以隐藏真正重要的信息,合理设定日志级别,捕获关键信息。
异步/队列日志记录:
高并发应用中,考虑使用异步方式记录日志或者使用消息队列来减少日志记录对性能的影响。
相关文章:
Python不会调试不够丝滑?那事你不会logging---剖析!
前言: 一直都是手动debug进行调试,F8都按烂了;最近用logging进行提前布置,发现这样更能让代码走得丝滑,同时也能尽早发现问题! 基本概念: Logger - 日志记录接口 Handler - 确定日志记录发送到不同的地方(文件、控制台等) Level - 定义了日…...
OpenAI的Whisper蒸馏:蒸馏后的Distil-Whisper速度提升6倍
1 Distil-Whisper诞生 Whisper 是 OpenAI 研发并开源的一个自动语音识别(ASR,Automatic Speech Recognition)模型,他们通过从网络上收集了 68 万小时的多语言(98 种语言)和多任务(multitask&am…...
Ubuntu18.04安装LeGO-LOAM保姆级教程
系统环境:Ubuntu18.04.6 LTS 1.LeGO-LOAM的安装前要求: 1.1 ROS安装:参考我的另一篇博客Ubuntu18.04安装ROS-melodic保姆级教程_灬杨三岁灬的博客-CSDN博客文章浏览阅读168次。Ubuntu18.04安装ROS-melodic保姆级教程https://blog.csdn.net/…...
git修改commit历史提交时间、作者
1、修改最近的几条记录,进入提交记录列表,修改提交记录模式 git rebase -i HEAD~3 // 修改最近的三条记录,顺序排列按提交时间升序 指令说明: pick:保留该commit(缩写:p) reword:…...
【C++历练之路】list的重要接口||底层逻辑的三个封装以及模拟实现
W...Y的主页 😊 代码仓库分享💕 🍔前言: 在C的世界中,有一种数据结构,它不仅像一个神奇的瑰宝匣,还像一位能够在数据的海洋中航行的智慧舵手。这就是C中的list,一个引人入胜的工具…...
Kubeadm部署Kubernetes Containerd集群
文章目录 概述一、硬件系统二、基础配置设置主机名配置主机名与IP地址解析关闭防火墙与selinux时间同步(ntp)升级系统内核配置内核转发及网桥过滤*安装ipset及ipvsadm关闭SWAP分区 三、Containerd准备Containerd获取下载解压Containerd配置文件生成并修改Containerd启动及开机自…...
OpenCV入门9——目标识别(车辆统计)
文章目录 图像轮廓查找轮廓绘制轮廓轮廓的面积与周长多边形逼近与凸包外接矩形项目总览【车辆统计】视频加载【车辆统计】去背景【车辆统计】形态学处理【车辆统计】逻辑处理【车辆统计】显示信息【车辆统计】 图像轮廓 查找轮廓 # -*- coding: utf-8 -*- import cv2 import n…...
2023前端大厂高频面试题之JavaScript篇(5)
系列文章: 2023前端大厂高频面试题之JavaScript篇(1) 2023前端大厂高频面试题之JavaScript篇(2) 2023前端大厂高频面试题之JavaScript篇(3) 2023前端大厂高频面试题之JavaScript篇(4) 2023前端大厂高频面试题之JavaScript篇(5) 2023前端大厂高频面试题之HTML篇 2023前端大厂高…...
物联网网关在工业行业的应用案例
物联网网关在工业行业的应用案例 随着物联网技术的不断发展,物联网网关在工业行业的应用越来越广泛。本文将介绍一个物联网网关在工业行业的应用案例,以期为相关领域的研究和实践提供借鉴和启示。 一、案例背景 某大型制造企业是一家全球知名的汽车制…...
5、基础入门——资产架构端口应用WAF站库分离负载均衡
资产架构 目录型网站安全:一个IP对应一个域名(bbs.xiaodi8.com),该域名(bbs.xiaodi8.com)下有一个网站,该域名的某个目录下(bbs.xiaodi8.com/blog)也有一个网站。 端口型…...
golang学习笔记——接口和继承比较1
继承 Go 语言的设计之初,就不打算支持面向对象的编程特性,因此 Go 不支持面向对象的三大特性之一——继承。但是 Go 可以通过组合的思想去实现 “继承”。继承是面向对象的三大特性之一,继承是从已有的类中派生出新的类,新的类能…...
chatGPT快捷键(最新版本)
chatGPT 快捷键,可以用于获取最新的一条回复内容 ChatGPT的API接口相当贵,有了快捷键功能,我们可以使用python的selenium控件模拟点击来实现自动化功能,通过发送快捷键来获取最新的回复内容 快捷键介绍如下: windows…...
77基于matlab的蚁群优化路径算法,二维路径和三维路径优化
基于matlab的蚁群优化路径算法,二维路径和三维路径优化。输出可视化最优路径和距离迭代曲线。数据可更换自己的,程序已调通,可直接运行。 77三维和二维路径可视化 (xiaohongshu.com)...
PyTorch中并行训练的几种方式
❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…...
基于非链式(数组)结点结构的二叉树的层序输入创建以及遍历
点击链接返回标题->基于非链式(数组)结点结构的二叉树的层序、先序、中序、后序输入创建以及层序、先序、中序、后序输出-CSDN博客 层序可谓是最简单的二叉树遍历了。。。。 代码很浅显易懂,相信你能明白的! #include<iostream> using namesp…...
云计算:开辟数字时代的无限可能
云计算是一项革命性的技术,为企业和个人提供了灵活、可扩展和高效的计算资源。本文将介绍云计算的概念、架构和优势,并探讨其在数字化时代的重要性和未来发展趋势。 引言 随着信息技术的日新月异和数字化转型的浪潮席卷全球,云计算作为一种颠…...
Django+Vue项目创建 跑通
参考链接: 【精选】DjangoVue项目构建_django vue-CSDN博客 一、背景 主要介绍如何使用后端Django 前端Vue 的技术栈快速地搭建起一套web项目的框架。 为什么使用Django和Vue? Django是Python体系下最成熟的web框架之一,由于Python语言的易用…...
2023年中职“网络安全“—Linux系统渗透提权②
2023年中职"网络安全"—Linux系统渗透提权② Linux操作系统渗透测试任务环境说明:1. 使用渗透机对服务器信息收集,并将服务器中SSH服务端口号作为flag提交;2. 使用渗透机对服务器信息收集,并将服务器中主机名称作为flag…...
多模态大模型训练数据集汇总介绍
RefCOCO、RefCOCO、RefCOCOg 这三个是从MS-COCO中选取图像得到的数据集,数据集中对所有的 phrase 都有 bbox 的标注。 RefCOCO 共有19,994幅图像,包含142,209个引用表达式,包含50,000个对象实例。RefCOCO 共有19,992幅图像,包含1…...
IDEA中更换java项目JDK
我们打开IDEA 打开项目 然后选择 File 下的 Project Structure 这里 我们下拉选择自己需要的JDK Sources这里 也要设置一下JDK对应版本 然后 上面这个 Project 中 也要设置一下对应jdk的版本 保持一直 然后 我们打开 File 下的 Settings 然后 找到如下图配置 如果JKD版本看…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
