假设我想像这样格式化字符串记录:
%(levelname)s %(asctime)s %(module)s %(funcName)s %(message)s %(user_id)
可以使用这种类型的日志记录命令来完成:
logging.error('获取信息时出错', extra = { 'user_id': 22 } )
这会将当前用户 ID 添加到当前请求的日志消息中。
但是额外的字典需要添加到每个日志调用中。
有没有一种好方法可以在 django 中的常用函数(例如中间件或 View 的索引函数)中添加此上下文,以便设置具有用户 ID 的额外字典,并在当前请求中进一步记录调用同时记录当前用户。
最佳答案
https://github.com/jedie/django-tools/blob/master/django_tools/middlewares/ThreadLocal.py 上有一个 ThreadLocal 中间件这可以帮助您解决问题,使当前请求随处可用。
所以你需要做的是将中间件添加到你的 MIDDLEWARE_CLASSES 设置中,然后在某个地方创建一个函数,如下所示:
from django_tools.middlewares import ThreadLocal
def log_something(levelname, module, funcname, message):
user = ThreadLocal.get_current_user()
# do your logging here. "user" is the user object and the user id is in user.pk
关于python - django 日志记录为每个请求全局设置上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16210101/