
import json
import logging
import traceback
from django.http import HttpResponse
from django.utils.deprecation import MiddlewareMixin
class LogMiddle(MiddlewareMixin):
"""
全局错误日志中间件
"""
def process_exception(self, request, exception):
print('发生异常', exception)
logger_error = logging.getLogger('django')
request_body = request.body
request_url = request.get_raw_uri()
request_method = request.method
error_log = traceback.format_exc()
error_msg = f"\nrequest_body: {request_body},\nrequest_url:{request_url}\nrequest_method:{request_method},\nexcept:{exception},\ndetailed_info:{error_log}"
logger_error.error(error_msg)
return HttpResponse(json.dumps(dict(code=500, data={}, msg="Some thing error")),
content_type="application/json")
settings MIDDLEWARE添加
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'journalmanage.middleware.LogMiddle'
]
settings logging配置
#所有的日志默认会存储到all-{}.log里
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
LOG_DIR = os.path.join(BASE_DIR, 'logs') # LOG_DIR是存放日志的路径
if not os.path.exists(LOG_DIR): os.mkdir(LOG_DIR) # 如果不存在这个logs文件夹,就自动创建一个
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
# 日志格式
'standard': {
'format': '[%(asctime)s] [%(filename)s:%(lineno)d] [%(module)s:%(funcName)s] '
'[%(levelname)s]- %(message)s'},
'simple': { # 简单格式
'format': '%(levelname)s %(message)s'
},
},
# 过滤
'filters': {
},
# 定义具体处理日志的方式
'handlers': {
# 默认记录所有日志
'default': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',#根据
'filename': os.path.join(LOG_DIR, 'all-{}.log'.format(time.strftime('%Y-%m-%d'))),
'maxBytes': 1024 * 1024 * 5, # 文件大小
'backupCount': 5, # 备份数
'formatter': 'standard', # 输出格式
'encoding': 'utf-8', # 设置默认编码,否则打印出来汉字乱码
},
# 控制台输出
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'standard'
},
},
# 配置用哪几种 handlers 来处理日志
'loggers': {
# 类型 为 django 处理所有类型的日志, 默认调用
'django': {
'handlers': ['default', 'console'],
'level': 'INFO',
'propagate': True
},
'django.request': {
'handlers': ['default','console'],
'level': 'INFO',
'propagate': False # 是否向上一级logger实例传递日志信息
},
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)