欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

django日志默認打印request請求信息的方法示例

 更新時間:2020年05月17日 16:10:44   作者:歪文  
這篇文章主要給大家介紹了關于django日志默認打印request請求信息的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用django具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

需求

請求view中手動打印日志時中插入request的如下信息(每個request請求都記錄可以使用中間件進行解決,但這里僅僅是在需要的地方手動打?。?/p>

 #統(tǒng)一附加日志內容

ADD_LOG = r'''{"username": request.user, "path": request.path, "request_id": request.id, "login_id": request.login_id}'''

舊的解決辦法

在每次需要打印日志時,通過 logging extra 進行額外的打印信息添加:每次手動添加同樣的extra非常的不優(yōu)雅。

新的解決方案

django 自帶log系統(tǒng)官方文檔

1、熟悉python的logging模塊結構。

2、django中間件存儲request信息。

class RequestLogMiddleware(MiddlewareMixin):
  """
  將request的信息記錄在當前的請求線程上
  """
  def process_request(self, request):
    # 統(tǒng)一附加日志內容
    # ADD_LOG = r'''{"username": request.user, "path": request.path, "request_id": request.id, "login_id": request.login_id}'''
    local.path = request.path
    local.request_id = request.id
    local.login_id = request.login_id
    local.username = request.user.username

3、logging的filters模塊添加request信息。

import logging

class RequestLogFilter(logging.Filter):
  """
  日志過濾器,將當前請求線程的request信息保存到日志的record上下文
  """
  def filter(self, record):
    record.request_id = getattr(local, 'request_id', "none")
    record.path = getattr(local, 'path', "none")
    record.login_id = getattr(local, 'login_id', "none")
    record.username = getattr(local, 'username', "none")
    record.appName = getattr(local, "appName", "none")
    return True

4、實現(xiàn)原理及代碼

通過 local = threading.local()。

middleware-waiwen文件代碼:

import threading
import logging
try:
  from django.utils.deprecation import MiddlewareMixin # Django 1.10.x
except ImportError:
  MiddlewareMixin = object # Django 1.4.x - Django 1.9.x

local = threading.local()
class RequestLogFilter(logging.Filter):
  """
  日志過濾器,將當前請求線程的request信息保存到日志的record上下文
  record帶有formater需要的信息。
  """
  def filter(self, record):
    record.request_id = getattr(local, 'request_id', "none")
    record.path = getattr(local, 'path', "none")
    record.login_id = getattr(local, 'login_id', "none")
    record.username = getattr(local, 'username', "none")
    return True

class RequestLogMiddleware(MiddlewareMixin):
  """
  將request的信息記錄在當前的請求線程上。
  """
  def process_request(self, request):
    # 統(tǒng)一附加日志內容
    # ADD_LOG = r'''{"username": request.user, "path": request.path, "request_id": request.id, "login_id": request.login_id}'''
    local.path = request.path
    local.request_id = request.id
    local.login_id = request.login_id
    local.username = request.user.username

settings 文件配置

MIDDLEWARE = [
  'django.middleware.security.SecurityMiddleware',
  'django.contrib.sessions.middleware.SessionMiddleware',
  'django.middleware.common.CommonMiddleware',
  'django.middleware.csrf.CsrfViewMiddleware',
  'django.contrib.auth.middleware.AuthenticationMiddleware',
  'django.contrib.messages.middleware.MessageMiddleware',
  'django.middleware.clickjacking.XFrameOptionsMiddleware',
 
  'wcloud.middleware-waiwen.RequestLogMiddleware' 
   #使用該中間件
   #將當前的request信息保存到當前線程供日志打印使用
]


LOGGING = {
    # 日志相關
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
      'standard': {
        'format': '{"date": "%(created)f", "level": "%(levelname)s", "funcName": "%(module)s.%(funcName)s:%(lineno)d", "msg": "%(message)s"}'}, # 日志格式
      'custom': {
       #該格式化中包含有過濾器record新增的字段
        'format': '{"date": "%(created)f", "level": "%(levelname)s", "funcName": "%(module)s.%(funcName)s:%(lineno)d", "request_id": "%(request_id)s","login_id": "%(login_id)s", "username": "%(username)s", "path": "%(path)s","msg": "%(message)s"}'
      },
    },
    'filters': {
      #注冊該過濾器
      'request_info': {'()': 'wcloud.middleware-waiwen.RequestLogFilter'}
    },
    'handlers': {
      'log': {
        'level': 'DEBUG',
        'class': 'logging.StreamHandler',
        'formatter': 'custom',
       #在該過handler中使用該過濾器
        'filters': ['request_info'], 
      },
      'console': {
        'level': 'DEBUG',
        'class': 'logging.StreamHandler',
        'formatter': 'standard',
      },
    },
    'loggers': {
      'django': {
        'handlers': ['console'],
        'level': 'ERROR',
        'propagate': False
      },
      'django.request': {
        'handlers': ['console'],
        'level': 'ERROR',
        'propagate': False
      },
      'django.db.backens': {
        'handlers': ['console'],
        'level': 'DEBUG',
        'propagate': False
      },
      'log': {
        'handlers': ['log'],
        'level': 'INFO',
        'propagate': True
      },
      
    }
  }

5、效果

參考:

給Django日志加上request_id

總結

到此這篇關于django日志默認打印request請求信息的文章就介紹到這了,更多相關django日志默認打印request請求信息內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 在python中使用SQLAlchemy查詢PostgreSQL視圖的流程步驟

    在python中使用SQLAlchemy查詢PostgreSQL視圖的流程步驟

    作為軟件開發(fā)人員,查詢 PostgreSQL 視圖是一項常見任務,使用視圖(代表SQL 查詢輸出的虛擬表)被認為是處理關系數(shù)據(jù)庫時的有效方法,本文介紹如何在 Python 中使用 SQLAlchemy 查詢 PostgreSQL 視圖,需要的朋友可以參考下
    2023-09-09
  • Python相關庫設置技巧保護你的C盤

    Python相關庫設置技巧保護你的C盤

    這篇文章主要為大家介紹了Python相關庫設置,保護你的C盤技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • python合并多個excel文件的示例

    python合并多個excel文件的示例

    這篇文章主要介紹了python合并多個excel文件的示例,幫助大家提高辦公效率,感興趣的朋友可以了解下
    2020-09-09
  • python中定時器的高級使用方式詳解

    python中定時器的高級使用方式詳解

    在Python編程中,定時器是一種非常有用的工具,用于執(zhí)行特定任務或函數(shù),本文將介紹一些高級的定時器使用方式,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-02-02
  • 淺析Python打包時包含靜態(tài)文件處理方法

    淺析Python打包時包含靜態(tài)文件處理方法

    這篇文章主要介紹了Python打包時包含靜態(tài)文件處理方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Python模塊與包管理使用pip與virtualenv

    Python模塊與包管理使用pip與virtualenv

    本文深入介紹了使用pipenv管理Python項目的依賴關系和環(huán)境,我們首先從pip和virtualenv開始,介紹了它們的基本功能和用法,然后深入探討了pipenv作為更高級工具的功能和特性,
    2024-03-03
  • python實現(xiàn)異步回調機制代碼分享

    python實現(xiàn)異步回調機制代碼分享

    本文介紹了python實現(xiàn)異步回調機制的功能,大家參考使用吧
    2014-01-01
  • Python可視化神器pyecharts繪制折線圖詳情

    Python可視化神器pyecharts繪制折線圖詳情

    這篇文章主要介紹了Python可視化神器pyecharts繪制折線圖詳情,折線圖和柱狀圖一樣是我們日??梢暬疃嗟囊粋€圖例,當然它的優(yōu)勢和適用場景相信大家肯定不陌生,要想快速的得出趨勢,抓住趨勢二字,就會很快的想到要用折線圖來表示了
    2022-07-07
  • 如何讓利用Python+AI使靜態(tài)圖片動起來

    如何讓利用Python+AI使靜態(tài)圖片動起來

    這篇文章主要介紹了如何讓利用Python+AI使靜態(tài)圖片動起來,基于的GAN生成對抗網(wǎng)絡圍繞主題實現(xiàn)靜態(tài)圖片動起來的效果。具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • Python使用cx_Oracle模塊操作Oracle數(shù)據(jù)庫詳解

    Python使用cx_Oracle模塊操作Oracle數(shù)據(jù)庫詳解

    這篇文章主要介紹了Python使用cx_Oracle模塊操作Oracle數(shù)據(jù)庫,結合實例形式較為詳細的分析了cx_Oracle模塊的下載、安裝及針對Oracle數(shù)據(jù)庫的連接、執(zhí)行SQL語句、存儲過程等相關操作技巧,需要的朋友可以參考下
    2018-05-05

最新評論