【发布时间】:2020-03-02 05:33:27
【问题描述】:
我希望我正在编写的工具中有多个 DSN。该工具是用户将提供自己的 DSN 以跟踪错误的工具。我还想跟踪我自己的 DSN 中的错误。
here 也有人问过这个问题,但给出的答案是拥有一个全局 DSN,然后通过另一个客户端手动提交事件。
相关且未答复:How to use multiple DSN in Sentry (javascript/browser)
【问题讨论】:
我希望我正在编写的工具中有多个 DSN。该工具是用户将提供自己的 DSN 以跟踪错误的工具。我还想跟踪我自己的 DSN 中的错误。
here 也有人问过这个问题,但给出的答案是拥有一个全局 DSN,然后通过另一个客户端手动提交事件。
相关且未答复:How to use multiple DSN in Sentry (javascript/browser)
【问题讨论】:
查看代码,最方便且可支持的方法似乎是继承 Transport 并制作一个非常轻量级的包装器,
class MultiTransport(sentry_sdk.transport.Transport):
def __init__(self, options=None):
self.transports = []
options.pop('transport', None)
dsn = options.pop('dsn', [])
for d in dsn:
options['dsn'] = d
self.transports.append(
sentry_sdk.transport.HttpTransport(options)
)
super().__init__(options)
def capture_event(self, event):
for t in self.transports:
t.capture_event(event)
def flush(self, timeout, callback=None):
for t in self.transports:
t.flush(timeout, callback)
def kill(self):
for t in self.transports:
t.kill()
你初始化哨兵,
sentry = sentry_sdk.init(
transport=MultiTransport,
dsn=[dsn1, dsn2, dsn3])
我不清楚应该如何处理 for 循环中的异常。或许应该处理和忽略它们,以便下一个 DSN 也会收到警报。
此外,尚不清楚 flush() callback 是否应该只调用一次,还是每个 DSN 调用一次。
如github answer 中所述,请务必为您的用户提供选择退出您的 DSN 的方法,并注意可能转发的信息。
【讨论】: