【问题标题】:How to handle the object before logging?记录前如何处理对象?
【发布时间】:2020-02-19 03:01:54
【问题描述】:

而不是这个:

def log_error(obj):
  msg = do_someprocess(obj)
  logging.error(msg)

我想添加do_someprocess 作为日志记录的挂钩。当我调用logging.error(obj) 时,它会在记录之前执行do_someprocess


背景:该对象是错误object,它包含错误id和消息,使用logging.error(error_obj)记录错误。 do_someprocess 用于格式化对象的错误信息。


@mrEvgenX 的评论让我觉得我不必将其作为logging 的一部分。所以我要在我的错误类中添加def __str__(self)

@Sam 的回答也可以作为另一种解决方案,处理程序是StreamHandler

【问题讨论】:

  • 我什至不知道你的上下文,很抱歉这么说。如果obj 是一个奇特的对象,其他开发人员(甚至一个月后的你)可能会感到困惑“这是什么魔法?”。非常简单的文本和堆栈跟踪——这就是这里应该有的一切。复杂的处理太多了。
  • 所以,你可以简单地写logging.error(do_someprocess(obj)),比将它隐藏在自定义LoggingHandler后面更好。

标签: python logging python-logging


【解决方案1】:

您将需要创建自己的处理程序(创建继承自 python 处理程序之一的新类)并将其添加到您的记录器(这可以在初始化时使用 AddHandler 完成一次)。

请看 以Python's cookbook 为例。

【讨论】:

    猜你喜欢
    • 2010-09-08
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多