Python 日志记录:禁用堆栈跟踪

2023-11-27

有没有一种简单的方法可以在 Python 3 中禁用异常堆栈跟踪的日志记录,无论是在Handler or Formatter?

我需要另一个中的堆栈跟踪Handler,所以设置exc_info=False,在调用中Logger不是一个选择。有没有比定义我自己的更简单的方法Formatter?


最简单的禁用选项每个处理程序回溯输出是添加一个自定义的logging.Filter子类改变记录对象(而不是过滤掉记录)。

过滤器只需设置exc_info记录在案None:

class TracebackInfoFilter(logging.Filter):
    """Clear or restore the exception on log records"""
    def __init__(self, clear=True):
        self.clear = clear
    def filter(self, record):
        if self.clear:
            record._exc_info_hidden, record.exc_info = record.exc_info, None
            # clear the exception traceback text cache, if created.
            record.exc_text = None
        elif hasattr(record, "_exc_info_hidden"):
            record.exc_info = record._exc_info_hidden
            del record._exc_info_hidden
        return True

and 在您的处理程序中添加该过滤器:

# do not display tracebacks in messages handled with this handler,
# by setting the traceback cache to a non-empty string:
handler_with_no_tracebacks.addFilter(TracebackInfoFilter())

However,处理程序不copy日志记录以及传递相同日志记录的任何其他处理程序later on还将忽略回溯的格式。所以你还需要配置任何other处理程序再次恢复信息:

for handler in logger.handlers:
    if not any(isinstance(f, TracebackInfoFilter) for f in handler.filters):
        handler.addFilter(TracebackInfoFilter(clear=False))

如果有人想禁用all回溯输出无处不在,那么向所有处理程序或记录器添加自定义过滤器可能会变得乏味。在这种情况下,另一个选择是注册一个自定义记录工厂logging.setLogRecordFactory()功能;只需设置exc_info记录上的属性None,无条件:

record_factory = logging.getLogRecordFactory()

def clear_exc_text(*args, **kwargs):
    record = record_factory(*args, **kwargs)
    record.exc_info = None
    return record

logging.setLogRecordFactory(clear_exc_text)

请注意,默认工厂只是logging.LogRecord class,但上述函数尽力与任何已设置的自定义工厂配合使用。

当然,您也可以创建自己的Handler子类,其中Handler.handle()设置和清除exc_info属性:

class NoTracebackHandler(logging.Handler):
    def handle(self, record):
        info, cache = record.exc_info, record.exc_text
        record.exc_info, record.exc_text = None, None
        try:
            super().handle(record)
        finally:
            record.exc_info = info
            record.exc_text = cache
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 日志记录:禁用堆栈跟踪 的相关文章

  • Pandas/Google BigQuery:架构不匹配导致上传失败

    我的谷歌表中的架构如下所示 price datetime DATETIME symbol STRING bid open FLOAT bid high FLOAT bid low FLOAT bid close FLOAT ask open
  • 处理 Python 行为测试框架中的异常

    我一直在考虑从鼻子转向行为测试 摩卡 柴等已经宠坏了我 到目前为止一切都很好 但除了以下之外 我似乎无法找出任何测试异常的方法 then It throws a KeyError exception def step impl contex
  • 用枢轴点拟合曲线 Python

    我有下面的图 我想用 2 条线来拟合它 使用 python 我设法适应上半部分 def func x a b x np array x return a x b popt pcov curve fit func up x up y 我想用另
  • 使用字典映射数据帧索引

    为什么不df index map dict 工作就像df column name map dict 这是尝试使用index map的一个小例子 import pandas as pd df pd DataFrame one A 10 B 2
  • YOLOv8获取预测边界框

    我想将 OpenCV 与 YOLOv8 集成ultralytics 所以我想从模型预测中获取边界框坐标 我该怎么做呢 from ultralytics import YOLO import cv2 model YOLO yolov8n pt
  • “隐藏”内置类对象、函数、代码等的名称和性质[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我很好奇模块中存在的类builtins无法直接访问的 例如 type lambda 0 name function of module
  • 如何通过索引列表从 dask 数据框中选择数据?

    我想根据索引列表从 dask 数据框中选择行 我怎样才能做到这一点 Example 假设我有以下 dask 数据框 dict A 1 2 3 4 5 6 7 B 2 3 4 5 6 7 8 index x1 a2 x3 c4 x5 y6 x
  • 加快网络抓取速度

    我正在使用一个非常简单的网络抓取工具抓取 23770 个网页scrapy 我对 scrapy 甚至 python 都很陌生 但设法编写了一个可以完成这项工作的蜘蛛 然而 它确实很慢 爬行 23770 个页面大约需要 28 小时 我看过scr
  • pip 列出活动 virtualenv 中的全局包

    将 pip 从 1 4 x 升级到 1 5 后pip freeze输出我的全局安装 系统 软件包的列表 而不是我的 virtualenv 中安装的软件包的列表 我尝试再次降级到 1 4 但这并不能解决我的问题 这有点类似于这个问题 http
  • import matplotlib.pyplot 给出 AttributeError: 'NoneType' 对象没有属性 'is_interactive'

    我尝试在 Pycharm 控制台中导入 matplotlib pyplt import matplotlib pyplot as plt 然后作为回报我得到 Traceback most recent call last File D Pr
  • 使用特定颜色和抖动在箱形图上绘制数据点

    我有一个plotly graph objects Box图 我显示了箱形 图中的所有点 我需要根据数据的属性为标记着色 如下所示 我还想抖动这些点 下面未显示 Using Box我可以绘制点并抖动它们 但我不认为我可以给它们着色 fig a
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • 如何在 Windows 命令行中使用参数运行 Python 脚本

    这是我的蟒蛇hello py script def hello a b print hello and that s your sum sum a b print sum import sys if name main hello sys
  • 根据列 value_counts 过滤数据框(pandas)

    我是第一次尝试熊猫 我有一个包含两列的数据框 user id and string 每个 user id 可能有多个字符串 因此会多次出现在数据帧中 我想从中导出另一个数据框 一个只有那些user ids列出至少有 2 个或更多string
  • python import inside函数隐藏现有变量

    我在我正在处理的多子模块项目中遇到了一个奇怪的 UnboundLocalError 分配之前引用的局部变量 问题 并将其精简为这个片段 使用标准库中的日志记录模块 import logging def foo logging info fo
  • 实现 XGboost 自定义目标函数

    我正在尝试使用 XGboost 实现自定义目标函数 在 R 中 但我也使用 python 所以有关 python 的任何反馈也很好 我创建了一个返回梯度和粗麻布的函数 它工作正常 但是当我尝试运行 xgb train 时它不起作用 然后 我
  • 将 Python 中的日期与日期时间进行比较

    所以我有一个日期列表 datetime date 2013 7 9 datetime date 2013 7 12 datetime date 2013 7 15 datetime date 2013 7 18 datetime date
  • 使用for循环时如何获取前一个元素? [复制]

    这个问题在这里已经有答案了 可能的重复 Python 循环内的上一个和下一个值 https stackoverflow com questions 1011938 python previous and next values inside
  • 如何应用一个函数 n 次? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 假设我有一个函数 它接受一个参数并返回相同类型的结果 def increment x return x 1 如何制作高阶函数repeat可以
  • 如何计算Python中字典中最常见的前10个值

    我对 python 和一般编程都很陌生 所以请友善 我正在尝试分析包含音乐信息的 csv 文件并返回最常听的前 n 个乐队 从下面的代码中 每听一首歌曲都是一个列表中的字典条目 格式如下 album Exile on Main Street

随机推荐

  • pip 和 virtualenv 将 django 的部分安装在错误的位置

    我已经使用 virtualenv 几个星期了 直到今天才出现任何问题 使用 pip 使用 r requests txt 安装我的环境 它将 Django v1 5 的一部分安装在错误的位置 而不是将整个源代码放入 env lib pytho
  • 为什么 Spark(在 Google Dataproc 上)不使用所有 vcore?

    我正在 Google DataProc 集群上运行 Spark 作业 但看起来 Spark 并没有使用所有vcores在集群中可用 如下所示 基于其他一些问题 例如this and this 我已经设置了要使用的集群DominantReso
  • Doctrine 中的简单 IF 测试语句

    Doctrine 支持 IF 语句吗 我收到以下错误 Expected known function got IF 使用 IF 执行此查询时 qb gt select c id IF c type id LIKE 9 c name c la
  • Azure 函数中针对 Cosmos DB 的 SQL 注入

    我已经实现了由 HttpRequest 触发的 Azure 函数 一个参数称为name作为 HttpRequest 的一部分传递 在Integration部分 我使用以下查询从 CosmosDB 检索数据 作为输入 SELECT FROM
  • 从 PHP 的视图计数器中排除机器人和蜘蛛

    我用 PHP 为一个网站构建了一个非常基本的广告管理器 我说基本是因为它并不像 Google 或 Facebook 广告甚至大多数高端广告服务器那样复杂 不处理付款或任何事情 甚至不针对用户 它的目的是为了我的低流量网站 只是简单地显示随机
  • 针对 documentId 的 Firestore 集合组查询

    在我的场景中 用户可以 喜欢 另一个用户的个人资料 因此 我为每个用户都有一个名为 likedBy 的子集合 我在其中为特定用户创建一个文档 例如 用户 col gt 用户A doc gt likeBy col gt 用户B doc 用户C
  • 当从互联网获取表的数据时,有人可以用 UItableview 来解释 MVC 吗?

    任何人都可以向我解释 MVC 在 UITableView 方面如何工作 特别是从互联网获取数据时 我很想知道 UItableview 的模型 视图和控制器是什么 我编写了以下 ViewController 代码 该代码从互联网获取数据并使用
  • 如何在 JavaScript 中解码字符串?

    这对我不起作用 var foo Collection 3A 9 Bad Interviews With Former GOP Presidential Candidates console log decodeURI foo 它输出 Col
  • 如何将Javascript变量值写入CSS?

    我怎样才能拥有time变量的内容显示为content我的 CSS 中的属性 JavaScript function clock var d new Date var hour d getHours var min d getMinutes
  • Xcode 5 IOS 模拟器黑屏且应用程序安装失败

    我刚刚更新了我的 xcode 以与 ios7 一起使用 现在 每当我制作一个新应用程序时 即使它设置为针对 ios7 构建 运行时我也会在模拟器中收到错误 它说安装失败 即使我刚刚创建了该项目并且还没有向其中编码任何内容 模拟器还显示黑屏
  • Hive 表中 count(*) 的错误结果

    我在 HIVE 中创建了一个表 CREATE TABLE IF NOT EXISTS daily firstseen analysis firstSeen STRING category STRING circle STRING specI
  • SwiftUI 聊天应用程序:颠倒列表和上下文菜单的困境

    我正在 SwiftUI 中构建一个聊天应用程序 要在聊天中显示消息 我需要一个反向列表 在底部显示最新条目并自动滚动到底部的列表 我通过翻转列表及其每个条目制作了一个反向列表 标准的做法 现在我想将上下文菜单添加到消息中 但长按后 菜单显示
  • 你能帮助我了解在 C++ 中使用 rsa.h 进行 openssl 公钥加密吗?

    我正在尝试使用 C 中 rsa 的 openssl 实现来了解公钥加密 你能帮我吗 到目前为止 这是我的想法 如有必要 请纠正 Alice 通过网络连接到 Bob 爱丽丝和鲍勃想要安全通信 Alice 生成公钥 私钥对并将公钥发送给 Bob
  • 向下滚动时隐藏固定标题,向上滚动和悬停时显示

    我有一个固定标题 它在向下滚动时隐藏并在向上滚动时再次显示 这一切都按预期工作 但我也希望当你将鼠标悬停在它的位置时它会出现 有什么想法吗 到目前为止我得到了什么 function var lastScrollTop 0 delta 5 w
  • Objective-C 中的 Mixins 还是多重继承?

    假设我有MyUITextViewSubclass它继承自UITextView and MyUITextFieldSubclass它继承自UITextField这两个子类都包含许多相同的方法和属性 以便为这些 UI 控件添加类似的行为 Sin
  • Django - 跳过数组的第一行

    我有一个相当简单的问题 但我似乎找不到简单的解决方案 我想迭代 Django 模板中的数组 但跳过第一个值 假设我有一个这样的数组 我通过视图传递给我的模板 array 1 2 3 4 5 在我的模板中我这样做 表示数组中的 A 结束 如何
  • iPhone原生数据库,iPhone上的所有数据

    是否有可能在 iPhone 上本地化一个 50MB 的大数据库 以便能够以智能的方式非常快速地搜索到它 使用 SQlite 吗 是的 您可以在 iPhone 上使用 SQLite 由于数据库只是一个文件 因此您可以将 50 MB 的文件添加
  • 如何向 Laravel 查询添加整理

    我需要运行一个查询collate utf8 bin像这样 SELECT FROM table WHERE field value collate utf8 bin 这严格适用于管理脚本 我不想更新表字符集本身 只是为了特定查询 我可以使用
  • 一段时间延迟后从触发器执行存储过程

    我想从触发器调用存储过程 如何在x分钟后执行该存储过程 我正在寻找除此之外的其他东西WAITFOR DELAY thanks 有一个定期运行并从表中提取存储过程参数的 SQL 代理作业 这些行还应指示存储过程的运行时间 因此 SQL 代理作
  • Python 日志记录:禁用堆栈跟踪

    有没有一种简单的方法可以在 Python 3 中禁用异常堆栈跟踪的日志记录 无论是在Handler or Formatter 我需要另一个中的堆栈跟踪Handler 所以设置exc info False 在调用中Logger不是一个选择 有