中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

django如何捕獲異常和日志系統過程

發布時間:2021-08-19 14:33:14 來源:億速云 閱讀:164 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關django如何捕獲異常和日志系統過程的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

這一塊的內容很少, 異常使用try except即可, 日志只需要幾行配置.

使用裝飾器捕獲方法內的所有異常

我使用裝飾器來整個包裹一個方法, 捕獲方法中的所有異常信息.并將其轉為json返回客戶端.

import functools

def catch_exception(func, code=500, *args, **kwargs):
  '''
  :param func:
  :return:
  '''

  @functools.wraps(func, *args, **kwargs)
  def nefen(request, *args, **kwargs):
    try:
      back = func(request, *args, **kwargs)
      return back
    except Exception as e:
      # string = "捕獲到異常"
      # x = type(e)
      #
      # if x == ValueError:
      #   string = "數值轉換異常:" + str(e)
      return JsonError(error_string=str(e), code=code)

  return nefen

JsonError是之前編寫的json工具.

裝飾器的使用方法如下.

class ReturnJson(APIView):

  coreapi_fields=(
    DocParam("token"),
  )
  
  @catch_exception
  def get(self, request, *args, **kwargs):
    params=get_parameter_dic(request)
    return JsonResponse(data=params)
  
  @catch_exception
  def post(self, request, *args, **kwargs):
    params=get_parameter_dic(request)
    return JsonResponse(data=params)
  
  @catch_exception
  def put(self, request, *args, **kwargs):
    params=get_parameter_dic(request)
    return JsonResponse(data=params)

日志配置

# 首先創建日志存儲路徑.
import logging
import django.utils.log
import logging.handlers

log_path = os.path.join(BASE_DIR, "logs")

if not os.path.exists(log_path):
  os.makedirs("logs")

# DJANGO_LOG_LEVEL=DEBUG

LOGGING = {
  'version': 1,
  'disable_existing_loggers': False,
  'formatters': {
    'verbose': {
      'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
    },
    'simple': {
      'format': '%(levelname)s %(message)s'
    },
    'standard': {
      'format': '%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(levelname)s]- %(message)s'
    },
  },
  'handlers': {
    'default': {
      'level':'DEBUG',
      'class':'logging.handlers.RotatingFileHandler',
      'filename': os.path.join(BASE_DIR,'logs','all.log'), #或者直接寫路徑:'c:\logs\all.log',
      'maxBytes': 1024*1024*5, # 5 MB
      'backupCount': 5,
      'formatter':'standard',
    },
    'console': {
      'level': 'DEBUG',
      'class': 'logging.StreamHandler',
      'formatter': 'standard',
    },
    'file': {
      'level':'INFO',
      'class':'logging.handlers.RotatingFileHandler',
      'filename': os.path.join(BASE_DIR, 'logs','debug.log'), #或者直接寫路徑:'c:\logs\all.log',
      'maxBytes': 1024*1024*5, # 5 MB
      'backupCount': 5,
      'formatter':'standard',
    },
  },
  # DEBUG(測試環境) CRITICAL(項目崩潰)  ERROR(拋出異常未被捕獲) WARNING(例如403) INFO(系統表現相關)
  'loggers': {
    'print': {
      'handlers': ["file"],
      'level': 'INFO',
      'propagate': False
    },
    'ifacerecognition': {
      'handlers': ['default'],
      'level': 'ERROR',
    },
    # 'django': {
    #   'handlers': ['default'],
    #   'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'),
    # },
    'django.request': {
      'handlers': ['default'],
      'level': 'ERROR',
    },
  },
}

日志配置由三部分組成

1.日志格式formatters

2.日志處理方法, 例如保存到xxx.log文件或者別的什么, 甚至可以自動發送電子郵件.

3.日志器, 也就是正式的應用, 你可以獲取一個log, 手動添加log內容.

一個向log文件寫入內容的例子

import logging
class ReturnJson(APIView):

  coreapi_fields=(
    DocParam("token"),
  )

  @catch_exception
  def get(self, request, *args, **kwargs):
    params=get_parameter_dic(request)
    log=logging.getLogger("print")
    log.info("asdf")
    log.error("asdffff")
    return JsonResponse(data=params)

感謝各位的閱讀!關于“django如何捕獲異常和日志系統過程”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

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

AI

汤原县| 旬邑县| 东乡| 信阳市| 伊川县| 灵山县| 渭南市| 嘉义县| 新源县| 乐东| 洪湖市| 涟源市| 社旗县| 商河县| 吉林市| 镇远县| 永康市| 平利县| 谷城县| 吴旗县| 乌拉特后旗| 鲁甸县| 大洼县| 咸宁市| 白水县| 新绛县| 奉化市| 阳西县| 兴业县| 京山县| 高密市| 晋宁县| 湘潭市| 蒙阴县| 靖州| 玉溪市| 汝州市| 财经| 宁阳县| 额敏县| 杨浦区|