深入 Python logging:构建高效、可维护的日志系统
off999 2025-09-12 01:27 27 浏览 0 评论
Python 的 logging 模块是 Python 标准库的一部分,它为应用程序提供了一个灵活的记录日志的框架。日志记录是软件开发中的一个重要部分,它帮助开发者了解应用程序的运行情况,特别是在调试和监控生产环境中。
日志级别
在 Python 的 logging 模块中,日志信息分为不同的级别,以表示日志消息的严重性。这些级别按从低到高的顺序是:
- DEBUG:最详细的日志信息,通常用于调试。
- INFO:用于常规信息的输出,比如程序运行状态。
- WARNING:表示有潜在问题的情况。
- ERROR:由于严重问题,程序的某些功能无法正常执行。
- CRITICAL:非常严重的问题,可能表示程序即将崩溃或已经崩溃。
日志配置
使用 logging 模块之前,通常需要进行一些配置,比如设置日志级别、日志文件、日志格式等。
示例代码:
import logging
# 配置日志
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
filename='app.log', # 也可以使用 filename='app.log' 来写入文件
filemode='w') # 'a' 表示追加模式
# 记录日志
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')在这个例子中,我们使用 basicConfig 函数来配置日志系统。我们设置了日志级别为 DEBUG,这意味着所有 DEBUG 及以上级别的日志都会被捕获。我们还定义了日志的格式和时间格式,并将日志输出到 app.log 文件中。
日志器、处理器和格式器
logging 模块的设计非常灵活,它使用三个主要组件来处理日志:
- Logger:负责捕获日志消息。
- Handler:负责将日志消息发送到不同的地方,比如控制台、文件等。
- Formatter:负责定义日志的布局和格式。
示例代码:
import logging
# 创建一个 logger
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG) # 设置 logger 的级别
# 创建一个 handler,用于写入日志文件
file_handler = logging.FileHandler('my_app.log')
file_handler.setLevel(logging.ERROR) # 设置 handler 的级别
# 创建一个 formatter
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
# 给 handler 设置 formatter
file_handler.setFormatter(formatter)
# 给 logger 添加 handler
logger.addHandler(file_handler)
# 记录不同级别的日志
logger.debug('This is a debug message') # 不会被记录,因为 file_handler 的级别是 ERROR
logger.info('This is an info message') # 同上
logger.warning('This is a warning message') # 同上
logger.error('This is an error message') # 会被记录
logger.critical('This is a critical message') # 会被记录在这个例子中,我们创建了一个 logger,并且给它添加了一个 handler 和一个 formatter。我们为 handler 设置了级别为 ERROR,这意味着只有 ERROR 和 CRITICAL 级别的日志会被写入到文件中。
过滤器
logging 模块还支持过滤器(Filters),可以根据特定的条件来过滤日志记录。
示例代码:
import logging
# 创建一个 logger
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)
# 创建一个 handler
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.WARNING)
# 创建一个 filter
class MyFilter(logging.Filter):
def filter(self, record):
return record.levelno == logging.WARNING
console_handler.addFilter(MyFilter())
# 创建一个 formatter
formatter = logging.Formatter('%(levelname)s - %(message)s')
# 给 handler 设置 formatter
console_handler.setFormatter(formatter)
# 给 logger 添加 handler
logger.addHandler(console_handler)
# 记录日志
logger.debug('This will not be shown')
logger.info('This will not be shown')
logger.warning('This will be shown')
logger.error('This will be shown')
logger.critical('This will be shown')在这个例子中,我们创建了一个过滤器 MyFilter,它只允许警告级别的日志通过。然后我们将这个过滤器添加到 console_handler 中。
配置文件
除了使用代码进行配置外,logging 模块还支持使用配置文件来设置日志系统。可以使用 fileConfig 或 dictConfig 函数来加载配置。
示例配置文件(logging.conf):
[loggers]
keys=root,my_logger
[handlers]
keys=consoleHandler,fileHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler
[logger_my_logger]
level=DEBUG
handlers=fileHandler
qualname=my_logger
propagate=0
[handler_consoleHandler]
class=StreamHandler
level=WARNING
formatter=simpleFormatter
args=(sys.stdout,)
[handler_fileHandler]
class=FileHandler
level=ERROR
formatter=simpleFormatter
args=('my_app.log', 'a')
[formatter_simpleFormatter]
format=%(asctime)s - %(levelname)s - %(message)s
datefmt=%Y-%m-%d %H:%M:%S然后,在代码中加载这个配置文件:
import logging.config
logging.config.fileConfig('logging.conf')
logger = logging.getLogger('my_logger')
# 现在 logger 将按照配置文件中的设置来记录日志结论
Python 的 logging 模块提供了一个强大而灵活的方式来记录日志。通过配置日志级别、处理器、格式器和过滤器,我们可以精确地控制日志记录的行为。日志记录对于调试、监控和维护应用程序至关重要,而 logging 模块使得在 Python 中实现这些功能变得简单易行。
需要注意的是,日志可能包含敏感信息,因此在生产环境中使用时应该小心处理,避免记录敏感数据。此外,合理地设置日志级别可以避免日志文件过大,同时也能确保重要的日志信息能够被捕获。
好了,今天的内容就分享到这里。若这篇文章能给您带来些许帮助或启发,请不吝关注我的头条号,并给予点赞、留言和转发。您的每一次支持,都是我继续创作的最大动力!感谢您的陪伴,期待与您共同成长。
相关推荐
- u盘莫名其妙要格式化(u盘总是要格式化什么意思)
-
如果您在使用U盘时突然收到提示需要格式化的消息,这可能是由于以下原因之一引起的:U盘感染病毒:U盘中可能存在恶意病毒,这些病毒可能会导致U盘无法正常使用。当您尝试打开U盘时,系统会提示您进行格式化操作...
- win7家庭版原版(win7家庭版价格)
-
你的win7旗舰版应该是个盗版软件,在你使用的过程中你可能触碰到了后台升级,升级完以后就变成了家庭版了,在你不知不觉中被改变的,厄这个软件属于盗版的,厄升级完以后没什么大区别,这个旗舰版家庭版在家里面...
- win10自动更新失败怎么办(win10自动升级失败)
-
安装更新失败有许多原因。WindowsUpdate需要能够扫描您的计算机以了解需要哪些更新,并能够下载和安装这些更新。如果某个阶段遇到问题,则可能阻止某个更新安装到计算机中。有关错误或失败的详细信...
- 截图的几种方法(截图的几种方法有哪些)
-
第一种截图方式:按printScreen键。按一下键盘上的printScreen键以后,整个屏幕会被截取下来,截图会默认保存在剪贴板中。第二种截图方式:使用微信截图。进入聊天界面,我们会发...
- 电脑装了两个系统怎么切换(电脑安装2个系统怎么更换启动)
-
1.点击运行打开电脑点击左下角的开始菜单栏选项,右击鼠标在序列栏中选择运行打开。2.输入msconfig接着在运行的输入框中输入msconfig点击确定即可打开系统配置。3.点击引导打开系统配置的页面...
- linux系统哪个版本好用(最好linux系统版本)
-
个人比较推荐Debian这个发行版本。DebianGNU/Linux于1993年首次公布,至今已经有近30年历史了。当然其他版本比如openSUSE,Slackware,ArchLinux,Ubu...
- win10激活在哪里查看(win10激活时间在哪里看)
-
在Windows10中,您可以通过以下方法查看激活状态:方法1:使用“设置”应用1.点击屏幕左下角的“开始”按钮,然后点击“设置”(齿轮图标)。2.在设置窗口中,点击“系统”图标。3.在“系统...
- 官方win10dll文件修复工具(官方win7dll文件修复工具)
-
当电脑丢失dll文件时,可以采用以下几种方法进行一键修复:从回收站还原:如果是不小心误删了一些计算机文件,导致电脑出现异常的情况时,首先就可以去回收站找回dll文件,如果文件还在,就可以通过还原操作来...
- qq所有历史旧版本大全(qq历史版本一览表)
-
有2种方法。一种是:你是QQ会员。你可以把旧版打开,聊天记录上传。然后打开新的QQ,下载。第2种是:你在硬盘上装了QQ软件,然后你就点卸载(uninst),把原来的卸了。然后按原位置覆盖,装上06版。...
- 电脑显示器分辨率怎么调(显示分辨率无法调整)
-
1、以win7为例,首先右键点击桌面,在右键菜单中直接显示了屏幕分辨率的选项,用鼠标点击一下这个选项。2、在分辨率设置选项页面中,有一个分辨率的选项,点击一下这个选项,上面默认显示的数值是你现在的屏幕...
- 8系统(8系统点检控制包含什么)
-
WIndows8系统是微软目前最新的操作系统,Moto的图形界面设计,使很多已经习惯于早期windows系统的用户难以接受,Windows8是一个向平板和桌面系统妥协的产物,存在着相当多的利弊。...
- 电脑软件管家(电脑软件管家在哪里找到)
-
电脑管家有着最大的安全云库,全新的杀毒引擎,深度清理电脑垃圾,为电脑重回巅峰状态,更有账号宝专版,10倍提升QQ防盗号能力,是很好用的。就自己而言,在电脑上用的是腾讯电脑管家这个第三方系统安全软件,管...
- 迅雷种子搜索器(迅雷种子搜索器手机版下载)
-
迅雷种子搜索方法: 1.在开始菜单栏或者到文件的安装路径文件夹中找到P2P种子搜索器。&nb...
- 手机怎么解压文件(苹果手机怎么解压文件)
-
手机解压文件方法:1、首先,在手机中找到文件管理,打开文件管理。2、打开文件管理之后找到压缩包,然后打开。3、打开安装包之后,选择需要的文件,。4、接下来找到“解压至”,点击“解压至”。5、点击之后,...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
慕ke 前端工程师2024「完整」
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
