如何忽略python日志记录过程中产生的异常?

2023-12-11

我正在一个大的 python 模块(Python 2.6.6)中工作,并在数千个地方进行日志记录,并且我正在使用 python 的记录器模块。 现在,我想忽略日志记录期间生成的异常。 可能的基本场景之一是

import glob
import logging
import logging.handlers

LOG_FILENAME = '/home/abc/logging_rotatingfile_example.out'
my_logger = logging.getLogger('MyLogger')
my_logger.setLevel(logging.DEBUG)

# Add the log message handler to the logger
handler = logging.handlers.RotatingFileHandler(
              LOG_FILENAME, maxBytes=20, backupCount=5)
my_logger.addHandler(handler)
# Log some messages
for i in range(20):
    my_logger.debug('i = %d' % i)

现在假设,在my_logger.debug('i = %d' % i)一些如何从系统中删除文件或更改权限以及记录器由于磁盘故障、磁盘已满等而无法在日志文件上记录并在屏幕上生成异常。 它是分布式系统,n个进程正在使用记录器模块。请注意,进程不应因日志记录异常(由于磁盘故障、磁盘已满等)而中止。 所以我希望忽略该异常。

笔记: 现在我知道在 python 记录器上创建包装类并使用 try- except 作为记录器函数的方法之一。 但我有不同的要求,我不想使用这种方式,所以,有没有其他方法可以做到这一点,或者 python 记录器的任何属性对我的情况有用?


您不需要忽略异常,因为logging module 已经帮你处理好这些了.

所有文件操作(日志发送、旋转等)都受到保护try..except Exception块。如果出现异常情况,logging.Handler.handeError() method将把异常写入sys.stderr反而。您可以设置logging.raiseExceptions to False使这些静音:

import logging

logging.raiseExceptions = False

引用文档:

当在执行期间遇到异常时,应从处理程序调用此方法emit()称呼。如果模块级属性raiseExceptions is False,异常会被默默地忽略。这是日志系统最想要的 - 大多数用户不会关心日志系统中的错误,他们对应用程序错误更感兴趣。但是,如果您愿意,您可以将其替换为自定义处理程序。指定的记录是发生异常时正在处理的记录。 (默认值为raiseExceptions is True,因为这在开发过程中更有用)。

如果您传递给的文件名RotatingFileHandler无法创建,那么在日志记录期间不会发生引发的异常,但是,它会在创建处理程序时发生。您要么必须立即处理该异常,要么设置delay=True创建处理程序以推迟打开文件直到记录时间:

handler = logging.handlers.RotatingFileHandler(
    LOG_FILENAME, maxBytes=20, backupCount=5, delay=True)

您使用的内容取决于您是否看到提供了错误的路径LOG_FILENAME此时是否存在应用程序错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何忽略python日志记录过程中产生的异常? 的相关文章

随机推荐

  • Python:替换列表列表中的项目

    这是我的代码 data 5 3 0 0 7 0 0 0 0 6 0 0 1 9 5 0 0 0 0 9 8 0 0 0 0 6 0 8 0 0 0 6 0 0 0 3 4 0 0 8 0 3 0 0 1 7 0 0 0 2 0 0 0 6
  • 使用 c# 将字符串分成对

    有没有一种方法可以在不查看索引的情况下将字符串分成对 例如 TVBMCVTVFGTVTB 将被分解为字符串列表 如下所示 电视 BM CV 电视 FG 电视 TB 也许我应该用问题的措辞来说明它们在使用字符串将它们分成组时类似于 strin
  • 我将如何创建 JFreeChart 散点图最佳拟合线

    我有一个要包含在 JFreeChart 散点图中的点数组列表 效果很好 但我现在想要一条最适合的线 经过一番查找 JFreeChart不直接支持这样的计算 所以我想做的是自己计算一下 然后手动在图表中贴一条线 如何在散点图中得到一条线 XY
  • 如何限制泛型类中允许作为“T”的类型?

    我有课Foo
  • Laravel 种子问题,laravel 正在寻找复数表名

    我刚刚开始学习 Laravel 在为测试表生成种子时遇到问题 控制台错误说 未找到基表或视图 1146 表 laravel testms 不存在 我的表名为 testm 我不知道它为什么寻找 testms TestmFactory php
  • 使用 Arduino 库与 C++ 的 stringstream 链接错误

    我正在使用一个esp8266和 一起平台写一个简单的草图 include
  • 通过使用 Vaadin-CDI-Integration Addon 启用 EJB 注入 Vaadin 7 UI

    我无法成功集成官方 Vaadin CDI Integration Addon 因为在完成官方集成说明后 以下内容Exception如果我重新加载已经发布的 URL 则会抛出该错误localhost 8080 App restartAppli
  • Clang 看不到基本标题

    我尝试使用 Clang 在 Fedora 20 上编译简单的 hello world 得到以下输出 d cpp 1 10 致命错误 找不到 iostream 文件 include
  • Angular 2 使用 ngFor 设置并绑定复选框

    我有一个像这样的数组 objectArray name Car name Bike name Boat name Plane 模板是这样的 li a href class small a li
  • 任务不可序列化 - Spark Java

    我在 Spark 中收到任务不可序列化错误 我已经搜索并尝试使用一些帖子中建议的静态函数 但它仍然给出相同的错误 代码如下 public class Rating implements Serializable private SparkS
  • 仅在 WooCommerce 中的特定日期销售某些产品

    我想通过 Woocommerce 出售某些指定的商品仅周日 如果有人试图在周日以外购买 它应该给出一个错误 商店中剩余的商品可以随时购买 这可能吗 任何曲目都非常值得赞赏 Example 我有一款名为 Sunday Tapas 的产品 产品
  • 如何在 bash 脚本中对命令输出进行着色?

    我正在尝试几天来更改 bash 脚本中命令的颜色输出 我尝试了一些工作流程 例如陷阱但没有成功 唯一部分起作用的是这段代码 bin bash GRN e 32m CYN e 36m END e 0m echo e GRN Formating
  • Spring Data JPA 中的订单按日期描述限制

    我试图通过使用限制查询来限制查询结果 如果没有限制 查询将按预期工作 Query SELECT a FROM DrmAdpodTimeSlot a where a startTime gt startTime order by a star
  • 精确的字符串到整数哈希函数

    我想将 char 数组哈希为 int 或 long 结果值必须遵守给定的精度值 我一直在使用的功能如下 int GetHash const char zKey int iPrecision 6 FROM http courses cs vt
  • 添加删除程序图标

    我有一个 WIX 安装程序项目 用于安装我的产品 代码不是我写的 它在添加 删除程序中显示一个图标 我想知道它在源代码中的哪里指定 该图标是我的产品的主要可执行文件 我尝试搜索代码 但在整个代码中找不到任何 ARPProductICON 单
  • 如何调用 .Net 程序集中的嵌入式资源 exe?

    我有一个非 Net 可执行文件 它作为嵌入式资源包含在我的 net 程序集中 有没有一种方法可以运行这个可执行文件 而不需要将其写入磁盘并启动它 这就是 Net 2 0 您可能会尝试将 exe 注入到挂起的进程中 然后唤醒被劫持的进程 但这
  • 无法设置 NSUserDefaults 字段

    我的应用程序初始化 第一次 中有以下代码 NSUserDefaults defaults NSUserDefaults standardUserDefaults NSString uid 1 defaults setObject uid f
  • 如何判断 Android 设备是否具有开放附件模式

    有谁知道如何检查这个 我刚刚购买了三星 Galaxy Tab 2 运行 Android 4 0 3 的 7 英寸版本 打算用它连接到我的 Arduino Mega ADK 板 但我不确定 Galaxy Tab 是否具有此处列出的必要的开放附
  • vbScript 打开 Excel 但不加载宏/模块?

    我的处境很奇怪 我创建了一个 vbs 脚本来打开我的 Excel 文件 我在 WorkBook open 方法中定义了 vba 代码 我认为创建一个 vbs 脚本来打开我的 Excel 将调用我的 workBook open 方法并执行其中
  • 如何忽略python日志记录过程中产生的异常?

    我正在一个大的 python 模块 Python 2 6 6 中工作 并在数千个地方进行日志记录 并且我正在使用 python 的记录器模块 现在 我想忽略日志记录期间生成的异常 可能的基本场景之一是 import glob import