2013-04-11 37 views
9

Sentry có thể phát hiện dữ liệu bổ sung liên quan đến một ngoại lệ như:Làm thế nào để bạn nâng cao một ngoại lệ python và bao gồm dữ liệu bổ sung cho Sentry?

enter image description here

Làm thế nào để bạn nâng cao như một ngoại lệ từ Python (đó là một ứng dụng Django) với additional data lĩnh vực riêng của bạn ?.

+0

'raise' mất bất kỳ lớp hoặc ví dụ. Bạn có thể rõ ràng hơn về những gì bạn đang yêu cầu không? –

+0

Bạn muốn thêm dữ liệu bổ sung nào? – mgilson

+0

offtopic - nhưng ảnh chụp màn hình của bạn từ đâu? tại sao tôi không có ngoại lệ khá như vậy trong django? - chỉnh sửa: xin lỗi, nó là sentry. – user1688936

Trả lời

9

tôi đăng nhập ngoại lệ sử dụng thư viện logging như vậy sau khi gỡ lỗi mã một chút, tôi nhận thấy các extra tham số:

import logging 
logger = logging.getLogger('my_app_name') 

def do_something(): 

    try: 
     #do some stuff here that might break 

    except Exception, e: 
     logger.error(e, exc_info=1, extra={'extra-data': 'blah', }) 

Đi qua exc_info = 1 là giống như gọi logger.exception. Tuy nhiên, exception() không chấp nhận kwargs, bắt buộc để sử dụng thông số extra.

Các giá trị này sẽ hiển thị trong phần 'Dữ liệu bổ sung' của trang tổng quan Lỗi Sentry.

+0

Đây là nó. Nếu bạn đang sử dụng máy khách Raven, bạn có thể: ["chuyển nó thành dữ liệu trong mệnh đề phụ của bạn"] (http://raven.readthedocs.org/en/latest/config/logging.html) 'ví dụ: logger.error ('Có một số lỗi điên', exc_info = True, extra = {'data': {'username': request.user.username}}) ' – AJP

+1

Điều này không thực sự trả lời câu hỏi. 'logger.error (...)' sẽ không tăng lại ngoại lệ, vì vậy nó sẽ nuốt nó và tiếp tục. Làm cách nào bạn thực sự tăng ngoại lệ với dữ liệu bổ sung? – dAnjou

1

Bạn có thể thử một trong hai phương pháp sau đây:

>>> # Raise the exception with the data you want. 
>>> raise Exception('extra information') 
Traceback (most recent call last): 
    File "<pyshell#64>", line 1, in <module> 
    raise Exception('extra information') 
Exception: extra information 
>>> # Catch an exception and add extra arguments. 
>>> try: 
    raise Exception() 
except Exception as error: 
    error.args += ('extra information',) 
    raise 

Traceback (most recent call last): 
    File "<pyshell#68>", line 2, in <module> 
    raise Exception() 
Exception: extra information 
>>> 

Bạn có thể thêm bao nhiêu lĩnh vực dữ liệu bổ sung như bạn muốn bằng cách bổ sung thêm đối số.

1

Sentry handler thêm thông tin đó vào ảnh chụp màn hình của bạn khi chụp thông báo cho một ngoại lệ và lấy thông tin đó từ traceback, không phải ngoại lệ.

Bạn có thể thêm trường bổ sung bằng cách chuyển đối số từ khóa bổ sung cho .capture(); Ví dụ: Django client sẽ làm như vậy cho bạn nếu bạn chuyển đối tượng request.

Hiện tại, không có dữ liệu nào khác được lấy từ trường hợp ngoại lệ. Bạn sẽ phải mở rộng ngoại lệ xử lý bản thân để thêm một cơ sở như vậy.

1

wes' answer không giúp tôi bởi vì tôi muốn thực sự tăng một ngoại lệ, không chỉ đăng nhập nó.

Đây là những gì tôi đã làm (client là khách hàng Raven Sentry):

client.extra_context({'foo': 'bar'}) 
raise RuntimeError('Whoops, something went wrong!') 
0

Không ai trong số các câu trả lời hiện có phục vụ trường hợp sử dụng chính xác của tôi tốt (đó là thêm bối cảnh bổ sung từ các đối tượng django Request vào sentry dữ liệu). Những gì đã kết thúc làm việc rất tốt cho điều đó sau khi một số đào được ghi đè khách hàng bằng cách sử dụng SENTRY_CLIENT setting.

Dưới đây là hoàn tất một trường hợp sử dụng đơn giản:

from raven.contrib.django.raven_compat import DjangoClient 

class CustomSentryClient(DjangoClient): 

    def get_data_from_request(self, request): 
     result = super(EToolsSentryClient, self).get_data_from_request(request) 
     if getattr(request, 'custom_field', None): 
      if 'extra' not in result: 
       result['extra'] = {} 
      result['extra']['custom_field'] = request.custom_field 
     return result 

và sau đó trong settings.py bạn sẽ chỉ cần thêm

SENTRY_CLIENT = 'myapp.CustomSentryClient' 
Các vấn đề liên quan