百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

深入 Python logging:构建高效、可维护的日志系统

off999 2025-09-12 01:27 33 浏览 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 中实现这些功能变得简单易行。

需要注意的是,日志可能包含敏感信息,因此在生产环境中使用时应该小心处理,避免记录敏感数据。此外,合理地设置日志级别可以避免日志文件过大,同时也能确保重要的日志信息能够被捕获。

好了,今天的内容就分享到这里。若这篇文章能给您带来些许帮助或启发,请不吝关注我的头条号,并给予点赞、留言和转发。您的每一次支持,都是我继续创作的最大动力!感谢您的陪伴,期待与您共同成长。

相关推荐

2017年联想笔记本电脑有几款

17年的笔记本电脑可以勉强安装一下win10系统试试。关键看你的内存有多少,内存大于4个G的话可以安装win10速度不会太慢。最好是安装win7系统,这样能发挥你这台电脑的所有的性能,你用起来也会感觉...

当前显卡排名(当下显卡排行)

101、Irispro5802、Iris62002、Iris52004、UHD630/6205、HD6306、HD5307、HD46008、HD44009、HD420010、HD40...

win10专业版激活变成企业版(win10专业版激活变成企业版怎么办)

win10永久激活密钥很少,一旦网上有分享,等你拿到时就超过期限了,一般是要购买。激活win10系统可以使用激活工具:win10激活工具下载一、win10专业版产品密钥NXRQM-CXV6P-PBGV...

ghostwinxp下载纯净版(ghost win7纯净版下载)

可以下载的,现在官网和其他网站上都可以下载xp原版的。可以通过以下步骤下载我的世界游戏到xp系统中:1.首先打开你的浏览器软件,搜索关键字“我的世界xp版下载”,找到可靠下载地址;2.从下载页面下...

惠普完整版驱动(惠普最新驱动)

惠普官方的标准操作:HP1050安装驱动步骤:一:准备:拿出驱动光盘放入光驱或到HP官网下载完整版驱动。二:不要插USB数据线或插上线打印机电源不要开,安装完整版驱动,当程序提示插入USB数据线时,插...

浏览器最好用的(浏览器最好用的插件)

一、谷歌浏览器谷歌浏览器是公认最好用的,这个可以从市场占有率看出端倪,超过三分之二的用户使用谷歌浏览器。Chrome浏览器以简洁快速著称,不管是普通用户还是开发人员,chrome浏览器都是首选。Chr...

fast路由器6位初始密码(fast路由器的密码)

答:fast路由器初始密码是admin;新款的迅捷无线路由器,管理界面没有初始密码。查看迅捷无线路由器底部标签,标签上标注了admin,说明初始密码就是admin;如果没有,说明该路由器没有初始密码。...

硬盘恢复软件哪个好(硬盘 恢复软件)

迷你兔数据恢复工具:支持恢复硬盘丢失的数据Pc3000数据恢复软件是一款非常专业的硬盘修复工具,能够对电脑硬盘资料数据进行修复,通过使用这个软件可以解决硬盘数据丢失故障,是一个用户进行硬盘资料修复好帮...

十大品牌监控摄像头排名(十大品牌监控摄像头排名第一)

答:1、华为/HUAWEI9.92、小米/MI9.63、罗技/Logitech9.64、海康威视/HIKVISION9.25、乔安/Jooan9.26、普联/TP-LINK9.27、乐橙8.98、萤石...

360手机助手老旧版本大全(360手机助手 老版本)

在设置里面找到历史记录就可能查看360手机助手·换机神器是安卓系统的换机软件,因为苹果的换机软件是爱思。1、打开360手机卫士,登陆账号,点击账号。2、进入个人中心,点击账户安全,在密保工具中,点击解...

系统应用工程师(系统工程的应用)

信息软件系统工程师有前途,毕业以后可以从事软件开发,软件系统的维护,运营等等,和计算机有关的工作内容,因为计算机专业可以说是一个非常热门的专业,很多的大型企业公司基本上都是以计算机研发为主的,薪资福利...

qq恢复系统常见问题(qq恢复系统常见问题及答案)

QQ好友恢复系统一直显示服务器频繁有可能是系统的问题,你的qq重新更新一下,或者你卸载了重新下载一下就有可能好了。您好,很高兴为您解答:您可以试试清空下IE内存,然后关掉不必要的程序,尽量在电脑运...

win10自带的office不见了(win10自带的office在哪个文件夹)

win10系统的office在电脑硬盘office的安装目录里,具体打开安装目录的操作如下:1、首先我们右键点击word,打开方式,选择默认程序打开。2、在默认框打钩,点击【浏览】。3、打开你安装of...

华为官网序列号查询入口(华为官网序列号查询入口手写笔)
  • 华为官网序列号查询入口(华为官网序列号查询入口手写笔)
  • 华为官网序列号查询入口(华为官网序列号查询入口手写笔)
  • 华为官网序列号查询入口(华为官网序列号查询入口手写笔)
  • 华为官网序列号查询入口(华为官网序列号查询入口手写笔)
手机主题美化包(手机主题美化包下载)
  • 手机主题美化包(手机主题美化包下载)
  • 手机主题美化包(手机主题美化包下载)
  • 手机主题美化包(手机主题美化包下载)
  • 手机主题美化包(手机主题美化包下载)

取消回复欢迎 发表评论: