Dhr*_*hak 22 python django logging
可以说我想像这个格式化字符串一样记录:
%(levelname)s %(asctime)s %(module)s %(funcName)s %(message)s %(user_id)
Run Code Online (Sandbox Code Playgroud)
可以使用这种类型的日志记录命令来完成:
logging.error('Error fetching information', extra = { 'user_id': 22 } )
这会将当前用户ID添加到当前请求的日志消息中.
但额外的dict需要添加到每个日志记录调用.
是否有一种很好的方法可以在django中的公共函数中添加此上下文(例如,中间件或视图的索引函数),以便设置具有用户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
Run Code Online (Sandbox Code Playgroud)