Python日志记录:全面指南

基本原理

日志记录是软件开发中的一个核心组成部分,它帮助开发者跟踪程序的运行流程,捕获程序执行期间的重要事件。日志记录可以作为程序运行状态的连续监控,记录用户细节、IP地址访问信息等重要数据。当发生错误时,日志不仅提供堆栈跟踪,还能描绘出错误发生前程序的具体状态,这对于调试和故障排查至关重要。

此外,有策略地记录有用数据有助于:

  • 轻松调试错误。
  • 对应用程序进行性能分析,以制定扩展计划。
  • 理解使用模式,以支持营销策略的开发。

Python的标准库中包含了一个日志记录系统,使得开发者能够快速地将日志记录功能集成到应用程序中。

示例代码

示例1:基本日志记录配置
import logging# 配置日志级别为INFO,日志格式,并将日志输出到控制台
logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(levelname)s - %(message)s',handlers=[logging.StreamHandler()])# 记录不同级别的日志
logging.debug('这是一条DEBUG级别的日志')
logging.info('这是一条INFO级别的日志')
logging.warning('这是一条WARNING级别的日志')
logging.error('这是一条ERROR级别的日志')
logging.critical('这是一条CRITICAL级别的日志')

运行结果:

2023-04-05 10:30:00,000 - INFO - 这是一条INFO级别的日志
2023-04-05 10:30:00,000 - WARNING - 这是一条WARNING级别的日志
2023-04-05 10:30:00,000 - ERROR - 这是一条ERROR级别的日志
2023-04-05 10:30:00,000 - CRITICAL - 这是一条CRITICAL级别的日志
示例2:日志记录到文件
import logging# 配置日志级别为DEBUG,日志格式,并将日志输出到文件
logging.basicConfig(filename='app.log', filemode='w', level=logging.DEBUG,format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')# 记录日志
logging.info('应用程序启动')
logging.debug('加载配置文件')

app.log 文件内容:

2023-04-05 10:35:00,000 - root - INFO - 应用程序启动
2023-04-05 10:35:00,000 - root - DEBUG - 加载配置文件
示例3:使用多个日志处理器
import logging# 创建一个日志记录器
logger = logging.getLogger('myapp')
logger.setLevel(logging.DEBUG)# 创建一个文件处理器和一个控制台处理器
file_handler = logging.FileHandler('myapp.log')
console_handler = logging.StreamHandler()# 为处理器设置日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)# 将处理器添加到日志记录器
logger.addHandler(file_handler)
logger.addHandler(console_handler)# 记录日志
logger.debug('这是一个DEBUG级别的日志')
logger.info('这是一个INFO级别的日志')

myapp.log 文件内容:

2023-04-05 10:40:00,000 - myapp - DEBUG - 这是一个DEBUG级别的日志
2023-04-05 10:40:00,000 - myapp - INFO - 这是一个INFO级别的日志

控制台输出:

2023-04-05 10:40:00,000 - myapp - DEBUG - 这是一个DEBUG级别的日志
2023-04-05 10:40:00,000 - myapp - INFO - 这是一个INFO级别的日志

注意事项

  • 日志级别:日志级别从DEBUG到CRITICAL,DEBUG级别最低,CRITICAL级别最高。通常在生产环境中,只会记录INFO级别及以上的日志。
  • 日志格式:日志格式可以根据需要自定义,常用的字段包括时间戳、日志记录器名称、日志级别和日志消息。
  • 日志处理器:可以添加多个日志处理器来将日志输出到不同的目的地,如文件、数据库或远程服务器。
  • 资源管理:日志记录器在使用完毕后应关闭,以释放资源。使用with语句可以自动管理资源的关闭。

结论

Python的logging模块是一个强大且灵活的日志记录工具,它能够帮助开发者在开发和运维阶段更好地理解和管理程序的行为。通过合理配置和使用日志记录,可以提高程序的可靠性,优化性能,并为问题追踪提供宝贵的信息。

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

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

相关文章

(学习日记)2024.05.12:UCOSIII第六十六节:常用的控制宏介绍 第二部分

之前的章节都是针对某个或某些知识点进行的专项讲解,重点在功能和代码解释。 回到最初开始学μC/OS-III系统时,当时就定下了一个目标,不仅要读懂,还要读透,改造成更适合中国宝宝体质的使用方式。在学完野火的教程后&a…

【LLM】动手部署个人知识库助手

文章目录 动手部署个人知识库助手环境依赖项目运行总结 动手部署个人知识库助手 经过前面章节的学习,理解了LLM、向量知识库等知识,本章节开始实践部署个人知识库助手。 本次部署的项目github地址个人知识库助手项目 环境依赖 技术资源要求 CPU: Int…

MySql#MySql安装和配置

目录 一、卸载不需要的环境 二、安装mysql yum 源 三、开始安装 四、如果保证安装成功呢? 五、MySql 启动! 六、登录mysql 七、配置文件说明 八、设置开机启动! 本次安装是在Linux环境在centos7中完成 首先先将自己切换成root 一、…

分页封装类

加油,新时代打工人! package com.love.starter.common.util;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest; import java.util.Map;/*** 计算页开始及结束位置** author Administrator*/ public c…

MySQL数据库——20.索引

在 MySQL 中,索引是一种特殊的数据结构,用于快速查找数据库表中的数据。索引可以帮助提高查询速度,特别是对于大型数据表而言,使用索引可以大大减少查询的时间复杂度。 索引类 普通索引(Normal Index)&am…

基于springboot实现图书电子商务网站系统项目【项目源码+论文说明】

基于springboot实现图书电子商务网站系统演示 摘要 社会发展日新月异,用计算机应用实现数据管理功能已经算是很完善的了,但是随着移动互联网的到来,处理信息不再受制于地理位置的限制,处理信息及时高效,备受人们的喜爱…

flowable流程跳转或退回到网关上的用户节点后流程走不下去了

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: h…

在Ubuntu上搭建并通过systemctl管理Minecraft Java版服务器

本教程将详细介绍如何在Ubuntu操作系统上搭建一个Minecraft Java版服务器,并使用systemctl服务来管理服务器的启动、停止和重启。同时,我们还将探讨如何通过NGINX设置TCP/UDP转发,使得玩家能够通过域名方便地连接到你的Minecraft服务器。 准…

【JVM】class文件格式,JVM加载class文件流程,JVM运行时内存区域,对象分配内存流程

这篇文章本来只是想讲一下class文件格式,讲着讲着越讲越多。JVM这一块吧,知识比较散比较多,如果深研究下去如死扣《深入理解Java虚拟机》,这本书很深很细,全记住是不可能的,其实也没必要。趁这个机会直接把…

日志中看到来自User Agent go-http-client / 1.1的大量请求(go-http-client 1.1)服务器爆了

在日志中看到来自User Agent go-http-client / 1.1的大量请求 The go-http-client/1.1 User Agent 是Google的Bot / Crawler 这不是真的。这可能是指Go库(根据您提到的来源,由Google开发,但是我找不到可靠的信息)。 之前写过“G…

如何快速找出文件夹里的全部带有中文纯中文的文件

首先,需要用到的这个工具YTool: 度娘网盘 提取码:qwu2 蓝奏云 提取码:2r1z 步骤 1、打开工具,切换到批量复制文件 2、鼠标移到右侧,点击搜索添加 3、设定查找范围、指定为文件、勾选 包含全部子文件夹&…

FP16与BF16区别

二者都是占用16bit空间。 FP16由1个符号位、5个指数位和10个尾数位组成。FP16在表达小数时具有较高的精度,但表示的最大范围相对BF16比较小。相比BF16,在表达较大的数时更容易出现上溢的情况。BF16由1个符号位、8个指数位和7个尾数位组成。相比于FP16&a…

RFC 791 (1)-导论

目录 浅论 IP是啥 IP可以管啥 操作 范例查看 提示:本系列将会开始RFC文档阅读,这里会给出我的一些笔记 浅论 我们这篇RFC文档描述的是IP和ICMP协议,我们都知道,在传统的OSI七层或者是现在被简化的五层:应用层&…

2024年Q1季度果酒行业线上市场数据分析:女性消费力量强劲!

随着短视频推广和健康饮酒理念的盛行,果酒凭借酒精度数低、口味丰富、富含多种营养成分等优势逐渐受到了消费者的青睐。 Q1季度,消费者对果酒需求依旧旺盛。根据鲸参谋数据显示,今年Q1季度,线上电商平台(某猫&#xf…

6S管理,真的有必要吗?

工厂里的物料不知道是什么时间堆放的,不知道这个是谁的,不知道还有没有用,不知道该不该处理掉,越积越多,想要的东西总是找不着,不要的东西总是“碍手碍脚”……可怕的是大家对这一些现象习以为常。 说起6S…

搬运5款小众,无广告,实用性拉满的软件

​ 你是否喜欢一些小众且无广告的软件?如果是的话,我这边有一些给你推荐的。 1.屏幕录制——OBS Studio ​ OBS Studio是一款广泛使用的实时流媒体和屏幕录制软件,适用于Windows、MacOS、Linux平台。它采用C、C和Qt编写,提供高质…

Keepalived实现LVS高可用

6.1 KeepalivedLVS集群介绍 Keepalived和LVS共同构建了一个高效的负载均衡和高可用性解决方案:LVS作为负载均衡器,负责在集群中的多个服务器间分配流量,以其高性能和可扩展性确保应用程序能够处理大量的并发请求;而Keepalived则作…

如何使用DEEPL免费翻译PDF

如何使用DEEPL免费翻译PDF 安装DEEPL取消PDF限制 安装DEEPL 安装教程比较多,这里不重复。 把英文pdf拖进去,点翻译,在下面的框中有已经翻译完毕的文档。 但是存在两个问题 问题1:这些文档是加密的。 问题2:带有DeepL标…

C#知识|上位机UI设计-详情窗体设计思路及流程(实例)

哈喽,你好啊,我是雷工! 上两节练习记录了登录窗体和主窗体的实现过程,本节继续练习内容窗体的实现,以下为练习笔记。 01 详情窗体效果展示: 02 添加窗体并设置属性 在之前练习项目的基础上添加一个Windows窗体,设置名称为:FrmIPManage.cs 设置窗体的边框和标题栏的外…

作用域、延迟加载、数据装配与包扫描的方式创建bean

文章目录 一、作用域二、延迟加载三、类型装配四、包扫描的方式创建bean 一、作用域 容器内部默认使用的是单例模式 两种模式 单例模式 <bean id "SomeService" class"org.example.SomeService" scope"singleton" ></bean> # 备注…