django通過中介軟體記錄日誌

2021-10-17 19:05:34 字數 3709 閱讀 7099

django中介軟體解析:

新建檔案log_middleware.py

import time

import json

import urllib.parse

# 獲取日誌logger

import logging

logger = logging.getlogger(__name__)

class middlewaremixin(object):

def __init__(self, get_response=none):

self.get_response = get_response

super(middlewaremixin, self).__init__()

def __call__(self, request):

response = none

if hasattr(self, 'process_request'):

response = self.process_request(request)

if not response:

response = self.get_response(request)

if hasattr(self, 'process_response'):

response = self.process_response(request, response)

return response

class logmiddle(middlewaremixin):

# 日誌處理中介軟體

def process_request(self, request):

# 存放請求過來時的時間

request.init_time = time.time()

return none

def process_response(self, request, response):

try:

# 耗時

localtime = time.strftime("%y-%m-%d %h:%m:%s", time.localtime())

# 請求路徑

path = request.path

# 請求方式

method = request.method

# 響應狀態碼

status_code = response.status_code

# 響應內容

content = response.content

# 記錄資訊

content = str(content.decode('utf-8'))

content = urllib.parse.unquote(content)

content = (json.loads(content))

logger.info("start")

except exception as e:

localtime = time.strftime("%y-%m-%d %h:%m:%s", time.localtime())

# 請求路徑

path = request.path

# 請求方式

method = request.method

# 響應狀態碼

status_code = response.status_code

# 響應內容

try:

content = response.content

message = '%s %s %s %s %s %s' % (localtime, path, method, status_code,e, content)

logger.error(message)

except exception as e:

print(e)

content = response.streaming_content

return response

settings.py裡中介軟體配置最後一行加入你新寫的中介軟體

middleware_classes = (

'django.contrib.sessions.middleware.sessionmiddleware',

'django.middleware.common.commonmiddleware',

'django.middleware.csrf.csrfviewmiddleware',

'django.contrib.auth.middleware.authenticationmiddleware',

'django.contrib.auth.middleware.sessionauthenticationmiddleware',

'django.contrib.messages.middleware.messagemiddleware',

'django.middleware.clickjacking.xframeoptionsmiddleware',

'django.middleware.security.securitymiddleware',

'yourdirname.log_middleware.logmiddle',

)

推薦settings.py下方加入log的配置

base_log_dir = os.path.join(base_dir, "logs")

# 如過位址不存在,則自動建立log資料夾

if not os.path.isdir(base_log_dir):

os.mkdir(base_log_dir)

logging =

},'handlers': ,

'console':

},'formatters':

}}

views功能函式裡也可以寫入log

import logging

logger = logging.getlogger("collect") # 與loggers裡自己定義的名稱對應

def index(requset):

try:

***except exception as e:

logger.error(e)

開啟伺服器,進行訪問,即可在log檔案看到日誌

單個py檔案記錄日誌

from logging.handlers import rotatingfilehandler

# logging

log_formatter = logging.formatter('%(asctime)s %(levelname)s %(funcname)s(%(lineno)d) %(message)s')

logfile = 'console.log'

my_handler = rotatingfilehandler(logfile, mode='a', maxbytes=5*1024*1024,backupcount=5, encoding=none, delay=0)

my_handler.setformatter(log_formatter)

my_handler.setlevel(logging.info)

while true:

try:

pass

except exception as e:

print(e)

continue

django異常日誌 Django中介軟體的四種方法

request是httprequest物件。view func是django即將使用的檢視函式。它是實際的函式物件,而不是函式的名稱作為字串。view args是將傳遞給檢視的位置引數的列表.view kwargs是將傳遞給檢視的關鍵字引數的字典。view args和view kwargs都不包含第...

Django 中介軟體

django中的中介軟體是乙個輕量級 底層的外掛程式系統,可以介入django的請求和響應處理過程,修改django的輸入或輸出。中介軟體的執行過程如下圖所示 django在中介軟體中預置了五個方法,這五個方法的區別在於不同的階段執行,對輸入或輸出進行干預,方法如下 def init self pa...

Django中介軟體

給檢視函式加裝飾器判斷使用者是否登入,把沒有登入的請求跳轉到登入頁面,我們通過給幾個特定檢視函式加裝飾器實現了這個需求,但是這樣做比較繁瑣,用django中的中介軟體會比較簡潔 什麼是中介軟體 中介軟體是幫助我們再檢視函式執行之前和執行之後都可以做一些額外的操作,它本質上就是乙個自定義類,類中定義了...