编辑
2023-08-20
测试平台
00
请注意,本文编写于 252 天前,最后修改于 252 天前,其中某些信息可能已经过时。

目录

1、背景
2、Django增加trace_id
2.1 安装依赖
2.2 配置
2.3 trace_id实战
前端展示trace_id
根据trace_id定位日志
3、最后

1、背景

在日常开发中,日志是问题排查最为常见的手段。

那么怎么样打日志,才能快速的筛选出来想要的信息呢?

这个时候,需要引入trace_id的概念了。

在每一行日志增加trace_id作为标识符,筛选的时候,只需要通过trace_id来过滤,就能快速筛选出来需要的信息。

2、Django增加trace_id

2.1 安装依赖

shell
# 我使用的Django版本是2.2 pip install django-log-request-id~=2.0.0

Github地址 https://github.com/dabapps/django-log-request-id

2.2 配置

配置字段有点多,耐心点看完哦

python
# settings.py # 中间件配置 MIDDLEWARE = [ "log_request_id.middleware.RequestIDMiddleware", # 放在列表的第一个 ... ] # 按照库的文档配置就好,或者直接照抄 LOG_REQUEST_ID_HEADER = "HTTP_X_REQUEST_ID" GENERATE_REQUEST_ID_IF_NOT_IN_HEADER = True REQUEST_ID_RESPONSE_HEADER = "TRACE-ID" # 日志配置 "formatters": { "color": { "()": "colorlog.ColoredFormatter", # 日志格式,重点是%(request_id)s, 其他按照自己喜好来 "format": "%(green)s%(asctime)s [%(request_id)s] %(name)s %(log_color)s%(levelname)s [pid:%(process)d] " "[%(filename)s->%(funcName)s:%(lineno)s] %(cyan)s%(message)s", } }, "filters": { # 过滤器增加下面这行 "request_id": {"()": "log_request_id.filters.RequestIDFilter"}, }, "handlers": { "default": { ... # handler增加下面这一行 "filters": ["request_id"], },

2.3 trace_id实战

前端展示trace_id

模拟接口500报错,直接把响应header里面的trace_id展示出来。 前端实现也是非常简单,axios拦截器中取出trace_id就行

image.png

image.png

image.png

根据trace_id定位日志

只需要grep一下trace_id,能快速定位到报错信息啦~ docker logs 容器名 | grep trace_id

image.png

3、最后

  • 日常开发中,日志要输出关键的入参和出参,方便生产问题排查,而不要依赖本地debug
  • Django中间件是个好东西,适合全局性统一处理,无需入侵业务代码
  • 日志截图中,邮件告警同样是使用中间件实现,并且也是非常简单

本文作者:花菜

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!