国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:8日期:2022-07-25 11:11:03

需求

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

#統一附加日志內容ADD_LOG = r’’’{'username': request.user, 'path': request.path, 'request_id': request.id, 'login_id': request.login_id}’’’

舊的解決辦法

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

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

新的解決方案

django 自帶log系統官方文檔

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

Loggers Handlers Filters Formatters

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

class RequestLogMiddleware(MiddlewareMixin): ''' 將request的信息記錄在當前的請求線程上 ''' def process_request(self, request): # 統一附加日志內容 # 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 loggingclass 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、實現原理及代碼

通過 local = threading.local()。

middleware-waiwen文件代碼:

import threadingimport loggingtry: from django.utils.deprecation import MiddlewareMixin # Django 1.10.xexcept ImportError: MiddlewareMixin = object # Django 1.4.x - Django 1.9.xlocal = 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 Trueclass RequestLogMiddleware(MiddlewareMixin): ''' 將request的信息記錄在當前的請求線程上。 ''' def process_request(self, request): # 統一附加日志內容 # 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請求信息的方法示例

參考:

給Django日志加上request_id

總結

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

標簽: django request
相關文章:
主站蜘蛛池模板: 国产成人影院一区二区 | 国产精品午夜免费观看网站 | 欧美一级毛片一 | 久久中文字幕免费视频 | 亚洲福利影视 | 国产九区 | 国产亚洲福利 | 91精品手机国产露脸 | 久久免费精品 | 国产一级二级三级毛片 | 亚洲精品www久久久久久久软件 | 黄网在线免费 | 久久91亚洲精品久久91综合 | 亚洲国产精品日韩在线观看 | 久草视频在 | 成人观看视频又黄又免费 | 99久久精品免费观看区一 | 无套内谢孕妇毛片免费看 | 亚洲精品专区一区二区欧美 | chinese农村野战videos | 国产美女作爱视频 | 成人福利网站含羞草 | 精品在线视频一区 | 97高清国语自产拍中国大陆 | 欧美亚洲另类视频 | 一区二区三区免费高清视频 | 久久中文字幕久久久久91 | 亚洲国产一区在线二区三区 | 男女免费观看在线爽爽爽视频 | 91精品最新国内在线播放 | 免费一区二区三区四区五区 | 美女又黄又免费 | 日本美女黄网站 | 91撸视频| 久视频在线观看 | 亚洲国产成人久久精品图片 | 久久精品人人爽人人爽快 | 成人怡红院视频在线观看 | 欧美成人高清在线视频大全 | 色老久久 | 亚洲一区免费在线 |