在日常开发中,日志是问题排查最为常见的手段。
那么怎么样打日志,才能快速的筛选出来想要的信息呢?
这个时候,需要引入trace_id的概念了。
在每一行日志增加trace_id作为标识符,筛选的时候,只需要通过trace_id来过滤,就能快速筛选出来需要的信息。
shell# 我使用的Django版本是2.2
pip install django-log-request-id~=2.0.0
Github地址 https://github.com/dabapps/django-log-request-id
配置字段有点多,耐心点看完哦
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"],
},
模拟接口500报错,直接把响应header里面的trace_id展示出来。 前端实现也是非常简单,axios拦截器中取出trace_id就行
只需要grep一下trace_id,能快速定位到报错信息啦~
docker logs 容器名 | grep trace_id
本文作者:花菜
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!