django异常日志_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项目所需要的组成部分基本齐全了. 剩下的工作只是业务逻辑的编写.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值