gpt4 book ai didi

python - django-sentry 的日志记录有哪些轻量级替代品?

转载 作者:太空狗 更新时间:2023-10-29 20:46:24 26 4
gpt4 key购买 nike

有没有django-sentry 的轻量级替代品用于 Django 环境中的错误记录?

我之前使用过 django-db-log,现在称为 django-sentry。我发现的一些其他人几乎已经死了,因为他们在过去两年几乎没有提交。

谢谢。

最佳答案

Sentry 被矫枉过正而 Djangodblog 被弃用,我推出了自己的,从两者中蚕食了必要的部分。

它的工作原理是捕捉错误信号。然后它使用 Django 的内置异常报告器生成 Django 在启用调试时显示的花式 500 错误页面。我们将其存储在数据库中并在管理控制台中呈现。

这是我的实现:

型号:

class Error(Model):
"""
Model for storing the individual errors.
"""
kind = CharField( _('type'),
null=True, blank=True, max_length=128, db_index=True
)
info = TextField(
null=False,
)
data = TextField(
blank=True, null=True
)
path = URLField(
null=True, blank=True, verify_exists=False,
)
when = DateTimeField(
null=False, auto_now_add=True, db_index=True,
)
html = TextField(
null=True, blank=True,
)

class Meta:
"""
Meta information for the model.
"""
verbose_name = _('Error')
verbose_name_plural = _('Errors')

def __unicode__(self):
"""
String representation of the object.
"""
return "%s: %s" % (self.kind, self.info)

管理员:

class ErrorAdmin(admin.ModelAdmin):
list_display = ('path', 'kind', 'info', 'when')
list_display_links = ('path',)
ordering = ('-id',)
search_fields = ('path', 'kind', 'info', 'data')
readonly_fields = ('path', 'kind', 'info', 'data', 'when', 'html',)
fieldsets = (
(None, {
'fields': ('kind', 'data', 'info')
}),
)

def has_delete_permission(self, request, obj=None):
"""
Disabling the delete permissions
"""
return False

def has_add_permission(self, request):
"""
Disabling the create permissions
"""
return False

def change_view(self, request, object_id, extra_context={}):
"""
The detail view of the error record.
"""
obj = self.get_object(request, unquote(object_id))

extra_context.update({
'instance': obj,
'error_body': mark_safe(obj.html),
})

return super(ErrorAdmin, self).change_view(request, object_id, extra_context)

admin.site.register(Error, ErrorAdmin)

助手:

class LoggingExceptionHandler(object):
"""
The logging exception handler
"""
@staticmethod
def create_from_exception(sender, request=None, *args, **kwargs):
"""
Handles the exception upon receiving the signal.
"""
kind, info, data = sys.exc_info()

if not issubclass(kind, Http404):

error = Error.objects.create(
kind = kind.__name__,
html = ExceptionReporter(request, kind, info, data).get_traceback_html(),
path = request.build_absolute_uri(),
info = info,
data = '\n'.join(traceback.format_exception(kind, info, data)),
)
error.save()

初始化:

from django.core.signals import got_request_exception

from modules.error.signals import LoggingExceptionHandler

got_request_exception.connect(LoggingExceptionHandler.create_from_exception)

关于python - django-sentry 的日志记录有哪些轻量级替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7130985/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com