gpt4 book ai didi

python - Django 错误记录 : Adding request header, 正文和用户信息

转载 作者:太空狗 更新时间:2023-10-30 02:26:31 34 4
gpt4 key购买 nike

寻找一种方法在我的错误日志中添加标题、正文和用户的电子邮件地址以及在我的 views.py

中的异常堆栈跟踪

在网上搜索了几个小时后,许多人建议我编写自己的中间件,还有一些人建议将此类信息记录到单独的日志中。但是,知道您的代码哪里出了问题可以解决部分问题,确定它影响了哪个可怜的灵魂以及在该异常期间发送了哪些请求数据对于纠正问题大有帮助。将这些信息放在同一个日志文件中对我来说很有意义。

目前在我的 views.py 中,我有这个简单的设置:

from django.db.models import Min, Max, Q, F, Count, Sum
from django.db import connection
from django.conf import settings
from django.http import HttpResponse, HttpResponseRedirect
from myapp.models import *
import logging

logging.basicConfig(filename="errors.log",
level=logging.ERROR,
format='%(asctime)s: %(message)s')


def random_view(request):
if request.user.is_authenticated() and request.user.is_active:
# generic view code goes here.
else:
return HttpResponse(status=401)

此设置在一段时间内运行良好。每次出现异常时,它都会注销时间、异常错误信息和堆栈跟踪。

如何添加 request.META、request.user.id 和 request.body 以及堆栈跟踪?

任何建议都会有所帮助。一个解决的答案,甚至更好!

谢谢

最佳答案

我认为您遇到的日志记录问题的完整解决方案是实现一个中间件。中间件将能够与您拥有的任何类型的 View 实现一起使用,无论它是基于类的 View 、基于函数的 View 还是来自 DRF 的 APIView。

您可以为完整的日志记录定义一个中间件。确保将中间件适本地放在身份验证中间件之后 -

MIDDLEWARE = [
...,
'django.contrib.auth.middleware.AuthenticationMiddleware',
...,
'path.to.your.middleware.LogMiddleware'
]

在日志中间件中,您可以访问请求和响应。您可以通过记录器存储请求、用户(如果经过身份验证)和来自请求的所有 META 属性,或者如果需要,您甚至可以将其存储在数据库中。虽然,请注意存储在数据库中是有代价的。您可以通过浏览 Django middleware documentation 了解如何编写中间件。 .

import traceback

class LogMiddleware():
def __init__(self, get_response):
self.get_response = get_response

def __call__(self, request):
try:
return self.get_response(request)
except:
if request.user.is_authenticated():
# Log the user
path = request.get_full_path() # Get the URL Path
tb = traceback.format_exc() # Get the traceback
meta = request.META # Get request meta information
# Log everything
raise # Raise exception again after catching

您可以从 HttpRequest 的 django 文档中了解所有存在的元属性。 .如果您需要对此进行任何说明,请告诉我。

关于python - Django 错误记录 : Adding request header, 正文和用户信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44712569/

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