亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2018年08月26日 14:21:01   作者:carey  
這篇文章主要介紹了django利用request id便于定位及給日志加上request_id的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧

簡(jiǎn)介

在開發(fā)大型系統(tǒng)的時(shí)候,往往是進(jìn)行微服務(wù)化,變成了多個(gè)系統(tǒng)之間的交互??焖俚銜?huì)發(fā)現(xiàn)線上的系統(tǒng)很多很復(fù)雜,這時(shí)候一個(gè)用戶請(qǐng)求過來會(huì)經(jīng)過很多內(nèi)部系統(tǒng),如果這時(shí)候發(fā)生錯(cuò)誤,我們?nèi)ゲ榭慈罩镜臅r(shí)候,根本不知道,哪個(gè)錯(cuò)誤來自哪一個(gè)用戶,這時(shí)候我們給每一個(gè)請(qǐng)求加上一個(gè)Request ID就可以很好的區(qū)分了。

django-log-request-id

這個(gè)項(xiàng)目為我們提供了輪子,直接使用即可

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

用來標(biāo)識(shí)同一個(gè)請(qǐng)求的日志,方便檢索和分析。

request_id用uuid自動(dòng)生成。如果請(qǐng)求頭有X-Request-ID,就用請(qǐng)求頭的,這樣一個(gè)請(qǐng)求涉及多個(gè)服務(wù)調(diào)用的時(shí)候可以把request_id帶過去,標(biāo)識(shí)為同一個(gè)請(qǐng)求的request_id.

下面是代碼示例。

在一個(gè)文件中自定義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, 現(xiàn)在代碼里用logging打的日志就會(huì)帶上request_id了.

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 詳解Python的文件處理

    詳解Python的文件處理

    這篇文章主要為大家介紹了Python的文件處理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • python3中的eval和exec的區(qū)別與聯(lián)系

    python3中的eval和exec的區(qū)別與聯(lián)系

    這篇文章主要介紹了python3中的eval和exec的區(qū)別與聯(lián)系,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Python tkinter 下拉日歷控件代碼

    Python tkinter 下拉日歷控件代碼

    這篇文章主要介紹了Python tkinter 下拉日歷控件代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python3匿名函數(shù)lambda介紹與使用示例

    Python3匿名函數(shù)lambda介紹與使用示例

    這篇文章主要給大家介紹了關(guān)于Python3匿名函數(shù)lambda與使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python3具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • python如何判斷網(wǎng)絡(luò)是否通

    python如何判斷網(wǎng)絡(luò)是否通

    這篇文章主要介紹了python如何判斷網(wǎng)絡(luò)是否通?具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python使用VIF實(shí)現(xiàn)檢測(cè)多重共線性

    Python使用VIF實(shí)現(xiàn)檢測(cè)多重共線性

    多重共線性是指多元回歸模型中有兩個(gè)或兩個(gè)以上的自變量,它們之間具有高度的相關(guān)性,本文主要介紹了如何使用VIF實(shí)現(xiàn)檢測(cè)多重共線性,需要的可以參考下
    2023-12-12
  • Python3.5實(shí)現(xiàn)的三級(jí)菜單功能示例

    Python3.5實(shí)現(xiàn)的三級(jí)菜單功能示例

    這篇文章主要介紹了Python3.5實(shí)現(xiàn)的三級(jí)菜單功能,涉及Python針對(duì)json格式數(shù)據(jù)的讀取、遍歷、查找、判斷等相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03
  • Python base64編碼解碼實(shí)例

    Python base64編碼解碼實(shí)例

    這篇文章主要介紹了Python base64編碼解碼實(shí)例,本文直接給出實(shí)例代碼,使用也很簡(jiǎn)單,需要的朋友可以參考下
    2015-06-06
  • Python使用multiprocessing實(shí)現(xiàn)多進(jìn)程的詳細(xì)步驟記錄

    Python使用multiprocessing實(shí)現(xiàn)多進(jìn)程的詳細(xì)步驟記錄

    multiprocessing包是Python中的多進(jìn)程管理包,與threading.Thread類似,它可以利用multiprocessing.Process對(duì)象來創(chuàng)建一個(gè)進(jìn)程,下面這篇文章主要給大家介紹了關(guān)于Python使用multiprocessing實(shí)現(xiàn)多進(jìn)程的詳細(xì)步驟,需要的朋友可以參考下
    2024-08-08
  • Python中的二分查找Bisect庫使用實(shí)戰(zhàn)

    Python中的二分查找Bisect庫使用實(shí)戰(zhàn)

    在算法和數(shù)據(jù)結(jié)構(gòu)中,二分查找是一種高效的搜索算法,可用于有序數(shù)據(jù)集合的查找,Python的bisect庫為我們提供了便捷的二分查找實(shí)現(xiàn),本文將深入探討B(tài)isect庫的使用方法、性能優(yōu)勢(shì),并通過豐富的示例代碼展示其在實(shí)際應(yīng)用中的靈活性和效果
    2024-01-01

最新評(píng)論