欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

DJango错误日志生成

程序员文章站 2022-05-03 22:36:27
0922自我总结 DJango错误日志生成 setting.py设置 exception.py(抛错设置) logging.py ......

0922自我总结

django错误日志生成

setting.py设置

logging = {
    'version': 1,
    'disable_existing_loggers': false,
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s'
        },
        'simple': {
            'format': '%(levelname)s %(module)s %(lineno)d %(message)s'
        },
    },
    'filters': {
        'require_debug_true': {
            '()': 'django.utils.log.requiredebugtrue',
        },
    },
    'handlers': {
        'console': {
            'level': 'debug',
            'filters': ['require_debug_true'],
            'class': 'logging.streamhandler',
            'formatter': 'simple'
        },
        'file': {
            # 实际开发建议使用warning
            'level': 'info',
            'class': 'logging.handlers.rotatingfilehandler',
            # 日志位置,日志文件名,日志保存目录必须手动创建,注:这里的文件路径要注意base_dir
            'filename': os.path.join(os.path.dirname(base_dir), "logs/luffy.log"),
            # 日志文件的最大值,这里我们设置300m
            'maxbytes': 300 * 1024 * 1024,
            # 日志文件的数量,设置最大日志数量为10
            'backupcount': 10,
            # 日志格式:详细格式
            'formatter': 'verbose',
            # 编码
            'encoding': 'utf-8'
        },
    },
    # 日志对象
    'loggers': {
        'django': {
            'level': 'info',
            'handlers': ['console', 'file'],
            'propagate': true,  # 是否让日志信息继续冒泡给其他的日志处理系统
        },
    }
}

exception.py(抛错设置)

# rest_framework.views 下的 exception_handler 处理了所有 drf可控范围内的异常
from rest_framework.views import exception_handler as drf_exception_handler
# drf的异常还是交给 drf_exception_handler,我们只需要处理 drf未处理的异常
from rest_framework.response import response
from .response import apiresponse
# 自定义异常句柄的原因:要通过 logging 记录异常日志
from .logging import logger
def exception_handler(exc, context):
    response = drf_exception_handler(exc, context)

    if response is none:
        # drf处理不了的异常
        error_info = '【%s】【%s】' % (context['view'], exc)
        logger.error(error_info)
        # return response({
        #     'exception': '服务器异常',
        # }, status=500)
        return apiresponse(1, '服务器异常', status=500)

    response.exception = true
    return response

logging.py

import logging
logger = logging.getlogger('django')