我正在从事 Django 项目。我创建了一个模型来保存最近发生的 50 个错误。
models.py
class Error(models.Model):
ERROR_TYPE_CHOICES = [
('ERROR', 'ERROR'),
('WARNING', 'WARNING'),
]
user_mail = models.CharField(max_length=500, blank=True, null=True)
error_type = models.CharField(max_length=7, choices=ERROR_TYPE_CHOICES)
error_message = models.CharField(max_length=1000, blank=True, null=True)
error_message_detail = models.CharField(max_length=500, blank=True, null=True)
created_at = models.DateTimeField(default=timezone.now)
# Static field for maximum errors limit
max_errors = 50
def __str__(self):
return f"{self.error_type}: {self.error_message}"
class Meta:
ordering = ['-created_at'] # Order by descending creation date
@classmethod
def check_and_trim(cls):
# # Obtain all errors ordered by creation date
errors = cls.objects.all().order_by('-created_at')
# If there are more than 50 errors, delete the older ones
if errors.count() > cls.max_errors:
errors_to_delete = errors[cls.max_errors:]
for error in errors_to_delete:
error.delete()
admin.py
class ErrorAdmin(admin.ModelAdmin):
list_display = ('user_mail', 'error_type', 'error_message', 'error_message_detail', 'created_at')
admin.site.register(Error, ErrorAdmin)
正如您所看到的,当错误超过 50 个时,最旧的错误将被删除,以便保存新的错误。
将来可能需要保存超过 50 个错误,所以我现在不想更改代码,而是想添加一个功能,这样在
localhost:8000/admin/Error
中,您可以输入要保存的错误数量。
您不能在此处执行此操作,并且此处理会查看数据库中的记录,并根据您删除最旧的记录来放置新错误,因此您的记录不会超过 50 条。
这需要保存在您的设置文件中,并允许工作人员更改它,请使用 django-constance 包来管理它。
顺便说一句,Sentry 在这方面会更好,它提供了很多有关请求和变量的见解。此外,如果您不想发送用户数据,您可以自行托管(免费)您的基础设施。