教你快速入门:Python Logging 使用指南

python Logging日志记录模块详解 写在篇前   logging是Python的一个标准库,其中定义的函数和类为应用程序和库的开发实现了一个灵活的事件日志系统。Python logging 的配置由四个部分组成:Logger、Handlers、Filter、Formatter。本篇博客将依次介绍这四个主要部分以及logging的基本应用。   在开始之前,我们有必要先了解一下,什么时候我们才有必要使用logging模块,什么时候抛出... 阅读详情

对程序员来说,Logging 是一种非常重要的功能。无论调试程序还是程序运行时的信息显示,Logging 都很有用。在本文中,我会演示为什么要使用以及如何使用 Python 中的 Logging 模块。

为什么要使用 Logging 而不使用 print()

print 语句跟 Logging 输出存在本质上的不同。一般地,print 语句用于向 stdout(标准输出)写入有用的信息或程序需要输出的信息。然而 Logging 将这些信息写入 stderr(标准错误输出)。

import logging

logging.basicConfig(level=logging.INFO) #We'll talk about this soon!

logging.warning('Something bad could happen!')
logging.info('You are running the program')
logging.error('Aw snap! Everything failed.')

print("This is the program output")
复制代码

如果我运行这段程序,可以看到命令行输出了如下信息。

$ python log_test.py
WARNING:root:Something bad could happen!
INFO:root:You are running the program
ERROR:root:Aw snap! Everything failed.
This is the program output
复制代码

然而对于普通用户来说,信息太多了。虽然这些都在命令行显示,但数据却被分开了。所以用户应当这样运行程序。

 

这里多说一句,小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以进裙930900780领取。

$ python log_test.py > program_output.txt
WARNING:root:Something bad could happen!
INFO:root:You are running the program
ERROR:root:Aw snap! Everything failed.

$ cat program_output.txt
This is the program output
复制代码

在这里,需要输出的信息通过重定向符 > 写入到一个文件。所以我们能看到终端的运行情况,也可以方便地从文件中得到输出信息。现在我们来了解日志等级!

Logging 和日志等级

需要使用 Logging 的原因各有不同。这些原因可以根据严重性的不同分为如下几类。

  • DEBUG: 开发者调试信息,包括经计算得到的值、参数估值、URL、API 调用信息等。
  • INFO: 一般性的信息。
  • WARNING: 关于输入、参数等的警告。
  • ERROR: 报告由于用户操作不当或程序运行时发生的错误。
  • CRITICAL: 最高等级的日志输出,通常用于某些关键问题(取决于具体情况)。

最常用的日志类型有:DEBUG、INFO 和 ERROR。然而,经常会出现因 Python 版本不匹配抛出警告的情况。

 

配置 Logger 和日志处理程序

Logger 可以配置不同的参数,可以配置特定日志等级、日志文件名、文件模式和日志打印的输出格式。

配置 Logger 的参数

Logger 可采用如下配置。

import logging

logging.basicConfig(filename='program.log', filemode='w', level=logging.DEBUG)
logging.warning('You are given a warning!')
复制代码

上面的代码向 program.log 文件输出日志。filemode='w' 用于设置文件读写模式。filemode='w' 表示需要打开一个新文件并覆盖原来的内容。该参数默认设置为 'a',此时会打开相应文件,并追加日志内容,因为有时需要获取历史日志。表示等级的参数 level 用于确定日志的最低等级。例如,当设置 level 为 INFO,程序就不会输出 DEBUG 级别的日志。你可能知道,需要设置 'verbose=debug' 才能获取一些参数。日志等级默认为 INFO。

创建日志处理器

虽然上述方法直接明了,满足了一个简单的应用程序的需求,但对于一个软件产品或服务来说,需要全面的日志处理流程。因为很难在数以百万计的 DEBUG 级日志中找到某个 ERROR 级日志。此外,在整个程序和模块中,我们应当使用单一的 Logger。这样我们就可以正确地把日志添加到同一文件中。所以我们可以使用具有不同配置的 Handler 来处理这种任务。

import logging

logger = logging.getLogger("My Logger")
logger.setLevel(logging.DEBUG)

console_handler = logging.StreamHandler()
file_handler = logging.FileHandler('file.log', mode='w')
console_handler.setLevel(logging.INFO)
file_handler.setLevel(logging.DEBUG)

logger.addHandler(console_handler)
logger.addHandler(file_handler)
复制代码

可以看出,我们首先通过名称获取到一个 Logger。以此可以在程序的其他任意地方使用同一个 Logger。我们把全局的 Logging 等级设为最低的 DEBUG,这样我们就可以在其他日志处理器中设置任意日志等级。

接着,我们创建两个日志处理器,分别用于 console 和 file 形式的输出,并设置各自的日志等级。这可以减少控制台输出的开销,转而在文件中输出。这方便了以后的调试。

 

对输出日志进行格式化

Logging 不是只用来打印我们自己的信息的。有时候我们需要打印其他信息,例如时间、日志等级、进程 ID。因此我们需要对日志进行格式化。我们来看下面的代码。

console_format = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
file_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

console_handler.setFormatter(console_format)
file_handler.setFormatter(file_format)
复制代码

添加 Handler 之前,我们可以像上面的代码那样设置日志输出的格式。可以用于设置日志格式的参数远不止这些,你可以访问(docs.python.org/3/library/l…

可重用的代码

下面是我在许多应用程序中都用到的代码段。它可能会对你有所帮助。

import logging

logger = logging.getLogger('Program Name-Version')
logger.setLevel(logging.DEBUG)

formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')

consoleHeader = logging.StreamHandler()
consoleHeader.setFormatter(formatter)
consoleHeader.setLevel(logging.INFO)

fileHandler = logging.FileHandler(f"{output}/metabcc-lr.log")
fileHandler.setLevel(logging.DEBUG)
fileHandler.setFormatter(formatter)

logger.addHandler(fileHandler)
logger.addHandler(consoleHeader)
复制代码

Logging 与多线程有关的特征

记住,Logging 模块是线程安全的。所以除了极少数例外情况(不在本文讨论范围内)使用 Logging 不需要为多线程编写额外的处理逻辑。

本文虽然短小、简单,但我也希望它对初级程序员有所帮助。


最后多说一句,小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以进裙930900780领取。

 

本文章素材来源于网络,如有侵权请联系删除。

Python日志库logging总结 上面的基本使用可以让我们快速上手 logging 模块,但一般并不能满足实际使用,我们还需要自定义 Logger。一个系统只有一个 Logger 对象,并且该对象不能被直接实例化,没错,这里用到了单例模式,获取 Logger 对象的方法为getLogger。注意:这里的单例模式并不是说只有一个 Logger 对象,而是指整个系统只有一个根 Logger 对象,Logger 对象在执行 info()、error() 等方法时实际上调用都是根 Logger 对象对应的 info()、error() 等方法。 阅读详情

相关推荐

Python: Logging模块实例详解

Logging 模块import loggingQuick Start导入模块后直接logging.waring(),logging.error()简单粗暴地调用即可。默认的level是DEBUG,所以warning会打印出信息,info级别更低,不会输出信息。如果你不知道level等参数的意义请后面解释,淡定,继续往下看。 如果不特别配置,logging模块将日志打印到屏幕上(stdout)。#

米乐乐果的博客 1152

Python-Log-test

Python的博客发布实验-Test print("这是使用Python打印的第一段代码")

wangzhezhishi_的博客 189

Python logging库使用指南

调试,提供生产级日志管理能力,适用于从调试到错误监控的全场景。库,可大幅提升应用的可维护性和故障排查效率。是 Python 标准库中用于。级别,可通过环境变量动态切换。的核心模块,取代了简单的。

记录点滴 777

Python的Logging模块

万字长文带你学透Python的Logging模块,文章通俗易懂且带有相关代码演示,具体案例助你理解

m0_60981735的博客 1万+

RapidScada在windows下的安装(详细)

1.下载地址:RapidScada官网 2.版本说明 有Linux版本和Windows版本,看自己的需求下载,推荐下载最新稳定版本。 3.系统要求 4.安装前的准备(windows10) 首先打开Windows功能: 先关闭 Microsoft .NET Framework3.5的 Windows Communication Foundation 子组件。如下图: Microsoft .NET Framework配置按下图勾选: iis安装的功能: 5.安装 解压..

m0_51275803的博客 4263

Unity AssetBundle解包实战指南:从工具使用到编程解析

在游戏开发与资源管理中,资源打包与加载是核心技术环节。AssetBundle作为Unity引擎官方推荐的资源分发方案,其本质是一个包含头部信息、目录表、数据区及依赖关系的结构化文件系统,通过序列化机制将游戏资源转换为二进制格式。理解AssetBundle的机制对于实现高效的热更新、减少资源冗余、优化加载性能具有重要价值,广泛应用于游戏开发、竞品分析、技术研究等场景。本文聚焦AssetBundle解包这一实践需求,系统介绍如何利用AssetStudio、UABE等主流工具进行资源提取与可视化分析,并深入探讨通

weixin_28192383的博客 347

Python 日志详解(logging)

Python 日志详解(logging)

鱼丸丶粗面 8910

STM32实战:手把手教你移植CanFestival协议栈(附完整代码)

本文提供了一份详尽的STM32平台移植CanFestival协议栈的实战指南。文章从工程搭建、定时器驱动、CAN硬件适配到对象字典配置,手把手讲解核心步骤,并附完整代码示例。重点剖析了时间管理、报文收发等关键环节的实现与常见问题解决方案,旨在帮助开发者深入理解并成功实现CANopen通信。

kiwi8的博客 274

python 中的 logging 详解

什么是 logging.StreamHandler()?它为什么将信息输出到控制台?logging.getLogger().addHandler(console) 到底做了什么?想解答这些问题,探索 logging 更丰富的用法,于是我去查看了官方文档教程,在这里对这次学习进行记录整理。本文不追究文档的细节,对基础的知识也默认已知,主要目的是建立对 logging 整体架构和工作方式的认识。

撒旦先生的博客 4968

Axial Attention 和 Criss-Cross Attention及其代码实现

Axial Attention 和 Criss-Cross Attention及其代码实现 ​ 文章目录Axial Attention 和 Criss-Cross Attention及其代码实现1 Criss - Cross Attention介绍1.1 引言1.2 理论实现1.2.1 获取权重A1.2.2 Affinity操作1.3.3 全部信息获取1.3 代码实现1.3.1 官方实现1.3.2 纯pytorch实现2 Axial Attention 介绍2.1 引言2.2 理论实现2.3 代码实现2.3

fzl的博客 2万+

电动汽车BMS核心技术:AS8510高精度传感器解析

电池管理系统(BMS)是电动汽车的核心组件,其精度直接影响电池安全与续航表现。通过Σ-Δ ADC和斩波稳定等技术,现代BMS传感器可实现±0.5%的电流测量精度,满足汽车级AEC-Q100和ISO 26262标准。AS8510作为行业标杆芯片,采用双通道16位ADC架构,在-40°C至+150°C范围内保持稳定性能,特别适合新能源汽车的严苛环境。这类高精度传感器技术不仅解决了传统BMS的温漂难题,还为智能电池诊断、无线BMS等创新应用奠定了基础,是推动电动汽车技术进步的关键要素。

weixin_30781775的博客 533

教你如何快速入门python_教你快速入门:Python Logging 使用指南

对程序员来说,Logging 是一种非常重要的功能。无论调试程序还是程序运行时的信息显示,Logging 都很有用。在本文中,我会演示为什么要使用以及如何使用 Python 中的 Logging 模块。为什么要使用 Logging 而不使用 print()print 语句跟 Logging 输出存在本质上的不同。一般地,print 语句用于向 stdout(标准输出)写入有用的信息或程序需要输出的...

weixin_39872872的博客 105

AI穿透式智慧粮仓

本报告基于 2025-2026 年全国多地智慧粮储实践案例,系统分析了 "AI + 穿透式" 智慧粮储体系的技术架构、AI 算法应用、提质增效成效、区域差异化特点及未来发展趋势。该体系通过多模态感知、智能算法与管控平台的深度融合,实现粮食存储全流程精准感知、智能预警与科学调控,显著降低储粮损耗与运营成本,大幅提升储粮安全水平与管理效率。报告梳理了各地差异化实践路径,提出针对性发展建议,为推动我国粮食仓储高质量发展、筑牢国家粮食安全防线提供参考。

reset2021的博客 229

Python入门:Python3 logging模块全面学习教程

本文围绕 Python logging 模块展开全面讲解,先对比其相较于 print 语句的优势,如灵活性高、可扩展性强、支持结构化日志及性能更优,接着介绍基础用法,包括导入模块、配置日志级别(含 DEBUG 到 CRITICAL 五级)、记录不同级别日志、自定义输出格式及将日志输出到文件,随后深入高级用法,解析 Logger、Handler、Formatter、Filter 四大核心组件关系,阐述为不同模块创建独立 Logger、用过滤器筛选日志及通过 RotatingFileHandler……

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 7789

03 - AMDGPU驱动架构概览

本文介绍了AMDGPU驱动的整体架构,重点分析其图形驱动(AMDGPU)和计算驱动(KFD)的双重结构。KFD驱动作为HSA架构的核心组件,包含进程管理、设备管理等模块,其中SVM功能在kfd_svm.c实现。文章详细解析了KFD的核心组件、初始化流程及字符设备接口,并阐述了TTM框架在GPU内存管理中的作用。通过架构图和代码片段展示了AMDGPU与KFD的协作机制,为后续深入理解SVM实现奠定基础。

图形/计算GPU的驱动与虚拟化技术分享园地 3371

Arduino ESP8266自定义配置分区表

ESP8266自定义分区表配置 随着项目的不断开发,项目文件也不断在增大,在没有考虑更换主硬件的条件下,最大开发利用有限资源势在必行,所以今天带来ESP8266自定义分区表的配置。 我这里以版本:2.7.4版本为例,后面的版本也是支持的。 注意:自定义分区表特别要注意和你的硬件相对应,flash芯片的大小决定这个分区是否有效,否则有意想不到的事情发现。 自定义分区表的几个重要参数 /* Flash Split for 4M chips */ /* sketch @0x40200000 (~1019K

perseverance51博客 1725

【Python零基础快速入门系列 | 15】常用标准库os、sys、logging快速掌握

本文描述了python最常用的3个标准库:os、sys、logging。

机器未来的博客 1604

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Python logging 模块使用指南

在调试、监控、安全、项目管理和问题追踪等方面都具有重要的意义,风云将 logging 模块的主要功能、使用方法以及适用场景,都做了一个简单的整理,以帮助大家更好地理解和应用该模块。Python 的 logging 模块是一个用于记录日志信息的标准库,是python内置的,不需要另行安装,提供了丰富的功能,可以帮助开发者在应用程序中进行调试、监控和故障排查。它允许你生成各种级别的日志消息,支持日志的输出方式和格式配置,同时还可以将日志写入文件、控制台或远程服务器等多种目标。

网络风云的博客 8023

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Python logging模块使用指南

Python 的 logging 模块是一个功能强大的日志记录工具,广泛应用于调试、监控和问题排查。它提供了多级日志记录、多种输出方式和灵活的格式配置,能够替代简单的 print 语句,支持持久化、级别控制和异步写入。核心组件包括 Logger(记录器)、Handler(处理器)、Filter(过滤器)和 Formatter(格式器),分别负责日志的生成、输出、过滤和格式化。日志级别从低到高分为 DEBUG、INFO、WARNING、ERROR 和 CRITICAL,便于信息过滤。通过 basicConfi

漫谈网络 1402

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Python logging模块用法记录

原文:https://www.cnblogs.com/deeper/p/7404190.html 啄木鸟社区里的Pythonic八荣八耻有一条: 以打印日志为荣 , 以单步跟踪为耻; 很多程序都有记录日志的需求,并且日志中包含的信息既有正常的程序访问日志,还可能有错误、警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,主要用于输出运行日志,...

zywvvd的博客 3万+

【python】logging日志模块使用快速入门

1-5日志级别由低到高,日志级别的设定是一个阈值,设定为某个级别后,这个级别及以上级别的日志才会被记录。比如设定为INFO,那么INFO、WARNING、ERROR、CRITICAL的日志会被记录,DEBUG级别的日志不会被记录。NOSET特殊一些,不属于日志级别的定义,表示不设置级别,继承父记录器的日志级别。logging模块默认将日志输出到标准错误流(sys.stderr),与日志级别设置无关。日志属于程序调试信息,与正常输出理应隔离,不影响正常输出,所以也可以理解为什么这样设计。

atwdy的博客 1066

python之logging模块

python之logging模块

weixin_39926295的博客 1646

详解python的logging模块

使用python文件将输出信息写入到文件中

weixin_46713695的博客 2946

Python-logging模块-快速入门

内容来自官方文档,版本python3.x。 介绍:

lipei_csdn的博客 338

python调试方法logging_Python logging模块用法快速攻略

无论使用哪种编程语言,最常用的调试代码的方式是:使用输出语句(比如 C 语言中使用 printf,Python 中使用 print() 函数)输出程序运行过程中一些关键的变量的值,查看它们的值是否正确,从而找到出错的地方。这种调试方法最大的缺点是,当找到问题所在之后,需要再将用于调试的输出语句删掉。在 Python 中,有一种比频繁使用 print() 调试程序更简便的方法,就是使用 loggin...

weixin_39823459的博客 221

最棒总结,Python日志库 logging 使用指南来了

在部署项目时,不可能直接将所有的信息都输出到控制台中,我们可以将这些信息记录到日志文件中,这样不仅方便我们查看程序运行时的情况,也可以在项目出现故障时根据程序运行时产生的日志快速定位问题出现的位置。下面我将详细给大家介绍一下,欢迎收藏学习,喜欢本文点赞支持1、日志级别Python 标准库 logging 用作记录日志,默认分为六种日志级别(括号为级别对应的数值),NOTSET(0)、DEBUG(10)、INFO(20)、WARNING(30)、

Python学习与数据挖掘 1769
上一篇: 零基础小白必看:教你在python画不同颜色的画布,简单好玩
下一篇: 面试必备:Python内存管理机制(建议收藏)
python阿喵
博客等级 码龄6年 169粉丝 127原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值