给Django日志加上request_id
来源:互联网 发布:php forreach 编辑:程序博客网 时间:2024/05/16 16:02
用来标识同一个请求的日志,方便检索和分析。
request_id用uuid自动生成。如果请求头有X-Request-ID,就用请求头的,这样一个请求涉及多个服务调用的时候可以把request_id带过去,标识为同一个请求的request_id.
下面是代码示例。
在一个文件中自定义Middleware和Logging Filter.
import loggingimport threadingimport uuidfrom django.utils.deprecation import MiddlewareMixinlocal = threading.local()class RequestIDFilter(logging.Filter): def filter(self, record): record.request_id = getattr(local, 'request_id', "none") return Trueclass RequestIDMiddleware(MiddlewareMixin): def process_request(self, request): local.request_id = request.META.get('HTTP_X_REQUEST_ID', uuid.uuid4().hex) def process_response(self, request, response): if hasattr(request, 'request_id'): response['X-Request-ID'] = local.request_id try: del local.request_id except AttributeError: pass return response
然后在settings.py中引用.
LOGGING配置示例
LOGGING = { 'filters': { 'request_id': { # 自定义的filter '()': 'xxx.middlewares.RequestIDFilter' } }, 'formatters': { 'standard': { 'format': '%(levelname)s [%(asctime)s] [%(request_id)s] %(name)s: %(message)s' # 这里使用filter request_id里的request_id字段 }, }, 'handlers': { 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', 'filters': ['request_id'], # 这里使用上面的filter: request_id 'formatter': 'standard', # 这里使用上面的formatter: standard }, }, 'loggers': { 'xxx': { 'handlers': ['console'], # 这里使用上面的handler: console 'level': 'DEBUG', 'propagate': False, }, }}
ok, 现在代码里用logging打的日志就会带上request_id了.
阅读全文
1 0
- 给Django日志加上request_id
- 给聊天记录加上日志
- 给django view加上 import file mixin
- 给shell脚本中加上执行日志
- 给django admin加上在线编辑运行python代码的功能
- 给图片加上水印
- 给图片加上水印
- 给工具栏加上背景图片
- 给xml加上头
- 给Listview加上进度条
- 给菜单加上图片
- 给figure加上title
- 给UIView加上背景图
- 给图片加上倒影
- 给程序加上皮肤
- 给ThemeButton加上图标
- 给表单加上验证
- 给iframe加上loading~
- 14个你可能不知道的JavaScript调试技巧
- 手把手教你webpack3(3)入口(多入口)entry
- 前端学习心得-javascript设计模式与开发实践-命令封装模式
- SqlServer代理作业
- 大数据平台建设经验
- 给Django日志加上request_id
- 对于Java后端技术自己做的还不够好!更多Java学习平台请看这里!
- Openwrt 之 Makefile框架分析
- 关于Java手机号验证
- Css的样式的引入与选择器
- img加载错误设置默认图片
- 【arm】ubuntu mate下配置qt与opencv最快捷的方法
- 解密Redis的持久化和主从复制机制
- macOSX使用通知实现窗口切换