DJango錯誤日誌生成

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')
相關文章
相關標籤/搜索