Django 日志中间件

Django 日志中间件,第1张

中间件
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实例传递日志信息
        },
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/569331.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存