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