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')