【问题标题】:How to have multiple global DSN in sentry sdk in Python?如何在 Python 的 sentry sdk 中拥有多个全局 DSN?
【发布时间】:2020-03-02 05:33:27
【问题描述】:

我希望我正在编写的工具中有多个 DSN。该工具是用户将提供自己的 DSN 以跟踪错误的工具。我还想跟踪我自己的 DSN 中的错误。

here 也有人问过这个问题,但给出的答案是拥有一个全局 DSN,然后通过另一个客户端手动提交事件。

相关且未答复:How to use multiple DSN in Sentry (javascript/browser)

【问题讨论】:

    标签: python sentry


    【解决方案1】:

    查看代码,最方便且可支持的方法似乎是继承 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 的方法,并注意可能转发的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-14
      • 2010-11-09
      • 1970-01-01
      • 2019-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多