python - django 日志记录为每个请求全局设置上下文?

标签 python django logging

假设我想像这样格式化字符串记录:

%(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/

相关文章:

python - cherrypy Python3 兼容了吗?

javascript - @sentry/node 集成将 Bunyan 日志调用包装为面包屑

performance - 如何通过 IIS 日志查找服务器处理时间?

python - turtle 创建了一个额外的屏幕(不需要)

python - 在 Google 应用引擎上批量获取子实体?

python - Altair(Python)中的世界地图+ slider

django - 更改 Django 管理列表中的行颜色

django - 如何在 Django 中删除缓存的模板片段?

css - Django 不在 css 中显示图像

logging - Elasticsearch:将日志存储一周