91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

django如何利用request id便于定位及給日志加上request_id

發布時間:2021-06-17 15:26:25 來源:億速云 閱讀:461 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“django如何利用request id便于定位及給日志加上request_id”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“django如何利用request id便于定位及給日志加上request_id”這篇文章吧。

簡介

在開發大型系統的時候,往往是進行微服務化,變成了多個系統之間的交互。快速迭代你會發現線上的系統很多很復雜,這時候一個用戶請求過來會經過很多內部系統,如果這時候發生錯誤,我們去查看日志的時候,根本不知道,哪個錯誤來自哪一個用戶,這時候我們給每一個請求加上一個Request ID就可以很好的區分了。

django-log-request-id

這個項目為我們提供了輪子,直接使用即可

github: https://github.com/dabapps/django-log-request-id (本地下載)

安裝

pip install django-log-request-id

添加middleware

需要加在其它middleware前面

MIDDLEWARE_CLASSES = (
 'log_request_id.middleware.RequestIDMiddleware',
 # ... other middleware goes here
)

header中添加RequestID

LOG_REQUEST_ID_HEADER = "HTTP_X_REQUEST_ID"
GENERATE_REQUEST_ID_IF_NOT_IN_HEADER = True
REQUEST_ID_RESPONSE_HEADER = "RESPONSE_HEADER_NAME"

日志中添加RequestID

LOGGING = {
 'version': 1,
 'disable_existing_loggers': False,
 'filters': {
 'request_id': {
  '()': 'log_request_id.filters.RequestIDFilter'
 }
 },
 'formatters': {
 'standard': {
  'format': '%(levelname)-8s [%(asctime)s] [%(request_id)s] %(name)s: %(message)s'
 },
 },
 'handlers': {
 'console': {
  'level': 'DEBUG',
  'class': 'logging.StreamHandler',
  'filters': ['request_id'],
  'formatter': 'standard',
 },
 },
 'loggers': {
 'myapp': {
  'handlers': ['console'],
  'level': 'DEBUG',
  'propagate': False,
 },
 }
}

給Django日志加上request_id

用來標識同一個請求的日志,方便檢索和分析。

request_id用uuid自動生成。如果請求頭有X-Request-ID,就用請求頭的,這樣一個請求涉及多個服務調用的時候可以把request_id帶過去,標識為同一個請求的request_id.

下面是代碼示例。

在一個文件中自定義Middleware和Logging Filter.

import logging
import threading
import uuid

from django.utils.deprecation import MiddlewareMixin

local = threading.local()


class RequestIDFilter(logging.Filter):
 def filter(self, record):
 record.request_id = getattr(local, 'request_id', "none")
 return True


class 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了.

以上是“django如何利用request id便于定位及給日志加上request_id”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

七台河市| 九龙坡区| 和龙市| 新平| 萨迦县| 保山市| 安阳县| 泾阳县| 衡南县| 大名县| 道真| 兴仁县| 余姚市| 闸北区| 玉溪市| 苍南县| 桂东县| 顺平县| 德兴市| 崇左市| 延川县| 油尖旺区| 浦东新区| 龙南县| 青州市| 禹州市| 大悟县| 资中县| 永顺县| 江西省| 怀远县| 广宗县| 吴忠市| 淅川县| 榆树市| 麟游县| 横峰县| 景谷| 土默特右旗| 北海市| 英吉沙县|