将附加内容传递给用于catch_exception和capture_message的新的sendry-python SDK方法的最佳方法是什么?
以前,我会:
sentry_id = sentry.captureException(extra=extra)
基于docs和此github问题(https://github.com/getsentry/sentry-python/issues/113),它看起来像以下选项之一是可比的,但我想不出办法。
即将关闭 capture_exception ...
except Exception as e:
sentry_id = capture_exception(e, extra=extra) # Error
...但是不允许再加上第二个参数:(
使用 python日志记录集成非常接近...
except Exception as e:
sentry_id = logging.error(e, exc_info=True, extra=extra)
...但不返回哨兵ID:(
使用 python日志记录集成和capture_exception 都已关闭...
except Exception as e:
logging.error(e, exc_info=True, extra=extra)
sentry_id = capture_exception(e)
...但是在哨兵中导致两个单独的错误条目:(
将 capture_exception与push_scope 配合使用已结束...
except Exception as e:
with push_scope() as scope:
scope.set_extra(extra) # Error
sentry_id = capture_exception(e)
...但是不接受字典:(
解决方案是否使用最后一种方法,并带有一个辅助函数,该函数将多余的字典分解为许多scope.set_extra(key, val)
调用?
感谢您的帮助!
答案 0 :(得分:1)
except Exception as e:
with push_scope() as scope:
for k, v in extra.items():
scope.set_extra(k, v)
sentry_id = capture_exception(e)
但是,我认为您在错误的时间点设置了extra
。理想情况下,您应该立即设置额外的上下文数据,并将其与当前正在执行的代码相关联。将作用域仅推为调用capture_exception
表示对set_extra
的调用的结构方式存在问题。
代替此:
logger.error("Event via logging", extra={"foo": 42})
try:
1/0
except Exception:
with push_scope() as scope:
scope.set_extra("foo", 42)
capture_exception()
执行以下操作:
with push_scope() as scope:
scope.set_extra("foo", 42)
logger.error("Event via logging")
try:
1/0
except Exception:
capture_exception()