需求
请求view中手动打印日志时中插入request的如下信息(每个request请求都记录可以使用中间件进行解决,但这里仅仅是在需要的地方手动打印):
#统一附加日志内容 ADD_LOG = r'''{"username": request.user, "path": request.path, "request_id": request.id, "login_id": request.login_id}'''
旧的解决办法
在每次需要打印日志时,通过 logging extra 进行额外的打印信息添加:每次手动添加同样的extra非常的不优雅。
新的解决方案
django 自带log系统官方文档
1、熟悉python的logging模块结构。
- Loggers
- Handlers
- Filters
- Formatters
2、django中间件存储request信息。
class RequestLogMiddleware(MiddlewareMixin): """ 将request的信息记录在当前的请求线程上 """ def process_request(self, request): # 统一附加日志内容 # ADD_LOG = r'''{"username": request.user, "path": request.path, "request_id": request.id, "login_id": request.login_id}''' local.path = request.path local.request_id = request.id local.login_id = request.login_id local.username = request.user.username
3、logging的filters模块添加request信息。
import logging class RequestLogFilter(logging.Filter): """ 日志过滤器,将当前请求线程的request信息保存到日志的record上下文 """ def filter(self, record): record.request_id = getattr(local, 'request_id', "none") record.path = getattr(local, 'path', "none") record.login_id = getattr(local, 'login_id', "none") record.username = getattr(local, 'username', "none") record.appName = getattr(local, "appName", "none") return True
4、实现原理及代码
通过 local = threading.local()。
middleware-waiwen文件代码:
import threading import logging try: from django.utils.deprecation import MiddlewareMixin # Django 1.10.x except ImportError: MiddlewareMixin = object # Django 1.4.x - Django 1.9.x local = threading.local() class RequestLogFilter(logging.Filter): """ 日志过滤器,将当前请求线程的request信息保存到日志的record上下文 record带有formater需要的信息。 """ def filter(self, record): record.request_id = getattr(local, 'request_id', "none") record.path = getattr(local, 'path', "none") record.login_id = getattr(local, 'login_id', "none") record.username = getattr(local, 'username', "none") return True class RequestLogMiddleware(MiddlewareMixin): """ 将request的信息记录在当前的请求线程上。 """ def process_request(self, request): # 统一附加日志内容 # ADD_LOG = r'''{"username": request.user, "path": request.path, "request_id": request.id, "login_id": request.login_id}''' local.path = request.path local.request_id = request.id local.login_id = request.login_id local.username = request.user.username
settings 文件配置
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'wcloud.middleware-waiwen.RequestLogMiddleware' #使用该中间件 #将当前的request信息保存到当前线程供日志打印使用 ] LOGGING = { # 日志相关 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'standard': { 'format': '{"date": "%(created)f", "level": "%(levelname)s", "funcName": "%(module)s.%(funcName)s:%(lineno)d", "msg": "%(message)s"}'}, # 日志格式 'custom': { #该格式化中包含有过滤器record新增的字段 'format': '{"date": "%(created)f", "level": "%(levelname)s", "funcName": "%(module)s.%(funcName)s:%(lineno)d", "request_id": "%(request_id)s","login_id": "%(login_id)s", "username": "%(username)s", "path": "%(path)s","msg": "%(message)s"}' }, }, 'filters': { #注册该过滤器 'request_info': {'()': 'wcloud.middleware-waiwen.RequestLogFilter'} }, 'handlers': { 'log': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', 'formatter': 'custom', #在该过handler中使用该过滤器 'filters': ['request_info'], }, 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', 'formatter': 'standard', }, }, 'loggers': { 'django': { 'handlers': ['console'], 'level': 'ERROR', 'propagate': False }, 'django.request': { 'handlers': ['console'], 'level': 'ERROR', 'propagate': False }, 'django.db.backens': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False }, 'log': { 'handlers': ['log'], 'level': 'INFO', 'propagate': True }, } }
5、效果
参考:
给Django日志加上request_id
总结
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com
暂无评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
2024年09月21日
2024年09月21日
- 黑神话悟空上品鼠禁卫精魄获取方法一览|上品鼠禁卫精魄收集攻略
- 优美的旋律至真的情怀《品茶轻音乐·极品典藏Vol.1CD1》[WAV+CUE]
- 曾嵘《峥嵘岁月DSD(试音碟)》WAV+CUE
- 小提琴天碟AlfredoCampoli坎波利-贝多芬D大调小提琴协奏曲与普罗米修斯作品选FLAC
- 博主称本周游戏业内动荡无比:高价PS5 Pro、Xbox裁员等
- 米哈游也搞AI?米哈游AI大模型Glossa完成备案
- G胖变G瘦后:玩家担心其健康状况:如果他出事 游戏业将发生巨变
- 群星.1995-SUMMER.PASSION.REMIX【宝丽金】【WAV+CUE】
- 王栎鑫.2008-天生一对(EP)【种子音乐】【WAV+CUE】
- 曾淑勤.1993-金选集【点将】【WAV+CUE】
- 《命运2》新枪涉嫌抄袭Bungie响应正在调查
- 《刺客信条:影》引发争议日本预购表现低迷
- 黑神话悟空上品狸侍长精魄获取方法一览|上品狸侍长精魄收集攻略
- 大自然环保音乐系列《风花雪月》4CD/DTS[WAV分轨]
- 模拟之声慢刻CD甄妮《86精选[日本母带]》[低速原抓WAV+CUE]