python logging包的用法

Python的logging模块是一个功能强大且灵活的日志记录工具,用于在程序中输出运行时的信息、警告、错误等。它能够帮助开发者跟踪代码的执行过程、调试问题,并记录运行中的重要事件。

1. 基本用法

import logging# 设置日志的基本配置
logging.basicConfig(level=logging.DEBUG)# 打印不同级别的日志
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.")

输出:

DEBUG:root:This is a debug message.
INFO:root:This is an info message.
WARNING:root:This is a warning message.
ERROR:root:This is an error message.
CRITICAL:root:This is a critical message.

logging.basicConfig(level=logging.DEBUG)设置了日志的最低级别为DEBUG,所以从DEBUGCRITICAL 的所有日志都会被记录。
默认情况下,只有WARNING级别及以上的日志会显示在控制台。如果要显示更低级别(如 DEBUGINFO),需要通过basicConfig设置日志级别。

2. 日志级别

logging模块提供了5个标准的日志级别,从低到高分别为:

DEBUG:用于调试,详细信息,通常只出现在诊断问题时。
INFO:用于确认一切按预期工作。
WARNING:表示某些问题,但并不影响程序运行。
ERROR:严重问题,程序部分功能无法正常运行。
CRITICAL:非常严重的错误,可能导致程序崩溃。

3. 配置日志格式

可以自定义日志的输出格式,包括时间、日志级别、模块名等信息。

import logging# 配置日志级别及格式
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')# 打印不同级别的日志
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.")

输出:

2024-10-03 15:38:45,690 - DEBUG - This is a debug message.
2024-10-03 15:38:45,690 - INFO - This is an info message.
2024-10-03 15:38:45,690 - WARNING - This is a warning message.
2024-10-03 15:38:45,690 - ERROR - This is an error message.
2024-10-03 15:38:45,690 - CRITICAL - This is a critical message.

%(asctime)s:记录日志的时间。
%(levelname)s:日志的级别名(如DEBUGINFO,等)。
%(message)s:日志消息。

4. 将日志输出到文件

可以通过filename参数将日志输出到文件,而不是控制台。

import logging# 将日志输出到文件
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s', filename='train.log')# 注意,每执行一次logging.debug(info/warning/error/critical)操作都是往之前的train.log中追加信息,程序重新运行也是追加信息(已有信息不会清空)
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.")

这个示例中,所有日志信息都会被写入名为train.log的文件,而不是在控制台输出。

5. 日志记录器(Logger)与处理器(Handler)

import logging# 创建训练log
train_logger = logging.getLogger("train_logger")
train_logger.setLevel(logging.DEBUG)# 创建一个控制台处理器
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.WARNING)  # 最终输出的日志级别由train_logger和console_handler综合的最严格的级别执行# 创建一个文件处理器
file_handler = logging.FileHandler(filename='train.log')
file_handler.setLevel(logging.DEBUG)  # 最终输出的日志级别由train_logger和file_handler综合的最严格的级别执行# 设置日志格式
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)# 将处理器添加到train_logger
train_logger.addHandler(console_handler)   # 如果不添加这句,控制台不会有任何日志输出
train_logger.addHandler(file_handler)# 使用 Logger 记录日志
train_logger.debug("This is a debug message.")
train_logger.info("This is an info message.")
train_logger.warning("This is a warning message.")
train_logger.error("This is an error message.")
train_logger.critical("This is a critical message.")

控制台输出:

2024-09-30 16:08:17,986 - train_logger - WARNING - This is a warning message.
2024-09-30 16:08:17,986 - train_logger - ERROR - This is an error message.
2024-09-30 16:08:17,986 - train_logger - CRITICAL - This is a critical message.

生成的日志文件train.log中的内容:

2024-09-30 16:09:39,996 - train_logger - DEBUG - This is a debug message.
2024-09-30 16:09:39,996 - train_logger - INFO - This is an info message.
2024-09-30 16:09:39,996 - train_logger - WARNING - This is a warning message.
2024-09-30 16:09:39,996 - train_logger - ERROR - This is an error message.
2024-09-30 16:09:39,996 - train_logger - CRITICAL - This is a critical message.

6. 日志中的异常信息

except语句中记录日志时,logging可以自动捕获异常的详细信息。
exc_info=True 会记录异常的详细堆栈信息,帮助调试程序中的错误。

import loggingtry:result = 10/0
except ZeroDivisionError:logging.error("ZeroDivisionError", exc_info=True)

输出:

ERROR:root:ZeroDivisionError
Traceback (most recent call last):File "E:\02.Projects\13.PyTorch\08.logging.py", line 77, in <module>result = 10/0~~^~
ZeroDivisionError: division by zero

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

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

相关文章

C++继承的默认方式到底是public还是private?

先说结论&#xff0c;C继承的默认方式&#xff1a; 1、对于类(class)来说默认是private 2、对于结构体(struct)来说默认是public [ACCESS] 的默认值 类继承的基本语法&#xff1a; class Rectangle: [ACCESS] Polygon { /* … */ } 冒号&#xff08;:&#xff09;后的[ACCES…

github命令行管理工具推荐

GitHub 管理工具推荐 背景 在使用 GitHub 管理仓库时&#xff0c;需要在 Web 端创建远程仓库&#xff0c;在本地创建本地仓库&#xff0c;然后再用 git remote add origin url 进行关联。这个过程相对繁琐&#xff0c;而且还有优化的空间。如果频繁创建仓库&#xff0c;就更能…

Paddlets时间序列集成模型回测实战:MLPRegressor、NHiTSModel与RNNBlockRegressor

好的,我们继续深入理解代码的每个部分。以下是每个主要模块的详细解释: 1. 导入模块和库 import json import os import glob import pandas as pd from tqdm import tqdm from paddlets.datasets import TSDataset from paddlets.transform import StandardScaler from pa…

WaterCloud:一套基于.NET 8.0 + LayUI的快速开发框架,完全开源免费!

前言 今天大姚给大家分享一套基于.NET 8.0 LayUI的快速开发框架&#xff0c;项目完全开源、免费&#xff08;MIT License&#xff09;且开箱即用&#xff1a;WaterCloud。 可完全实现二次开发让开发更多关注业务逻辑。既能快速提高开发效率&#xff0c;帮助公司节省人力成本&…

HTML+CSS 基础第三季课堂笔记

一、CSS基础概念 CSS有两个重要的概念&#xff0c;分别是样式和布局 CSS的样式分为两种&#xff0c;一种是文字的样式&#xff0c;一种是盒模型的样式 CSS的另一个重要的特性就是辅助页面布局&#xff0c;完成HTML不能完成的功能&#xff0c;比如并排显示&#xff0c;比如精…

国内访问OpenAI API

最近在学习LLM。绕不过去的肯定要学习OpenAI。 国内想直接使用官方API十分麻烦。就到处查资料及网友的分享。发现了这个代理可以在国内很方便的使用OpenAI API。 代理的地址如下&#xff1a; https://referer.shadowai.xyz/r/1014150 经过一段实际体验下来&#xff0c;这个…

JAVA全球互联同城速达国际版同城跑腿快递代取帮买帮送一体化服务系统源码

全球互联&#xff0c;便捷生活新篇章&#xff01; &#x1f31f; 开篇&#xff1a;跨越国界的即时服务革命 在这个快节奏的时代&#xff0c;你是否也曾为忙碌的生活而烦恼&#xff1f;购物、取件、送物……这些日常琐事似乎总在不经意间占据了我们宝贵的时间。但现在&#xf…

expressjs 中的mysql.createConnection,execute 怎么使用

在 Express.js 应用中使用 MySQL 数据库&#xff0c;你通常会使用 mysql 或 mysql2 这样的库来创建和管理数据库连接&#xff0c;并执行查询。然而&#xff0c;mysql.createConnection 并不直接提供 execute 方法。相反&#xff0c;你可以使用 query 方法来执行 SQL 语句。 以…

论文的研究工具有什么?推荐5款AI论文写作网站

在当今的学术研究和写作领域&#xff0c;AI工具已经成为不可或缺的助手。这些工具不仅能够提高写作效率&#xff0c;还能帮助研究者生成高质量的论文。以下是一些值得推荐的AI论文写作工具&#xff1a; 千笔-AIPassPaper 千笔-AIPassPaper是一款基于深度学习和自然语言处理技…

51单片机学习第六课---B站UP主江协科技

DS18B20 1、基本知识讲解 2、DS18B20读取温度值 main.c #include<regx52.h> #include"delay.h" #include"LCD1602.h" #include"key.h" #include"DS18B20.h"float T; void main () {LCD_Init();LCD_ShowString(1,1,"temp…

64 注意力机制_by《李沐:动手学深度学习v2》pytorch版

系列文章目录 文章目录 系列文章目录注意力机制&#xff08;或叫注意力池化&#xff09;[**生成数据集**]平均汇聚非参数注意力汇聚[**带参数注意力汇聚**]批量矩阵乘法定义模型训练 小结练习 注意力机制&#xff08;或叫注意力池化&#xff09; 卷积、全连接、池化层都只考虑…

Mac制作Linux操作系统启动盘

前期准备 一个 Mac 电脑 一个 U 盘&#xff08;8GB 以上&#xff09; 下载好 Linux 系统镜像&#xff08;iso 文件&#xff09; 具体步骤 挂载 U 盘 解挂 U 盘 写系统镜像到 U 盘 完成 一、挂载 U 盘 首先插入 U 盘&#xff0c;打开终端输入下面的命令查看 U 盘是否已经 m…

HarmonyOS NEXT:实现电影列表功能展示界面

时至今日HarmonyOS NEXT早已发布运行了&#xff0c;等其正式推出并大规模商用后&#xff0c;HarmonyOS的历史使命就完成并将退出历史舞台&#xff0c;为用户提供丰富的应用选择。但是Harmony NEXT是在HarmonyOS基础上剔除安卓&#xff08;AOSP&#xff09;后的产品&#xff0c;…

自动驾驶系列—自动驾驶MCU架构全方位解析:从单核到多核的选型指南与应用实例

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

图说几何学2300年重大错误:附着在直线z上的直线段必是z的一部分

黄小宁 用泡沫塑料和油漆制成的铅球与真正的铅球&#xff0c;两者有不同的内部形状。同样&#xff0c;数学有长度相同但内部形状不同的伪≌直线段。 几何学有史2300年来一直认定附着在直线z上的直线段一定是z的一部分。其实这是2300年肉眼直观错觉——百年病态集论的症结。 …

工作笔记【四】

对于这种&#xff0c;样式一样&#xff0c;但是图片和字体颜色不一样&#xff0c;动态渲染。 代码&#xff1a; <template><view class"page"><view class"rows" v-for"item in data"><view class"v0"><v…

代码随想录算法训练营第四八天| 739. 每日温度 496.下一个更大元素 I 503.下一个更大元素II

今日任务 739. 每日温度 496.下一个更大元素 I 503.下一个更大元素II 739. 每日温度 题目链接&#xff1a; . - 力扣&#xff08;LeetCode&#xff09; class Solution {public int[] dailyTemperatures(int[] temperatures) {Stack<Integer> stack new Stack<Int…

基于解压缩模块的JPEG同步重压缩检测论文学习

一、论文基本信息&#xff1a; 论文题目&#xff1a;基于解压缩模块的JPEG同步重压缩检测 作者&#xff1a;王金伟1 &#xff0c;胡冰涛1 &#xff0c;张家伟1 &#xff0c;马 宾2 &#xff0c;罗向阳3 &#xff08;1.南京信息工程大学计算机学院、网络空间安全学院&#xf…

Footprint Growthly Quest 工具:赋能 Telegram 社区实现 Web3 飞速增长

作者&#xff1a;Stella L (stellafootprint.network) 在 Web3 的快节奏世界里&#xff0c;社区互动是关键。而众多 Web3 社区之所以能够蓬勃发展&#xff0c;很大程度上得益于 Telegram 平台。正因如此&#xff0c;Footprint Analytics 精心打造了 Growthly —— 一款专为 Tel…

阿里大模型算法岗面试,上来就手撕代码啊

最近已有不少大厂都在秋招宣讲了&#xff0c;也有一些在 Offer 发放阶段。 节前&#xff0c;我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对新手如何入门算法岗、该如何准备面试攻略、面试常考点、大模型技术趋势、算法项目落地经验分享等热门话题进行了…