Django实现文件上传、文件列表查看、修改、限流和日志记录5
Django实现文件上传、文件列表查看、修改、限流和日志记录5
日志是一个应用和项目排查问题和记录操作的重要手段,可以回溯复盘问题所在,也是甩锅的重要依据
配置中间件middleware
创建了一个名为 StatusCodeMiddleware 的中间件类。在该类中,我们在中间件的 __call__ 方法中记录了响应的状态码到日志中。
### ### file_upload/file_upload_app/middleware.py # -*- coding: utf-8 -*- # @Author: wei # @Env: python 3.8.10 import logging from django.http import HttpResponse logger = logging.getLogger(__name__) class StatusCodeMiddleware: def __init__(self, get_response): self.get_response = get_response # 创建自定义的日志格式化器 # formatter = logging.Formatter('%(asctime)s [%(levelname)s] 状态码: %(status_code)s - %(message)s') formatter = logging.Formatter('%(asctime)s [%(levelname)s] %(message)s') # 创建处理器并设置格式化器 handler = logging.StreamHandler() handler.setFormatter(formatter) # 将处理器添加到日志记录器 logger.addHandler(handler) def __call__(self, request): response = self.get_response(request) # 记录状态码到日志中 status_code = response.status_code logger.info('状态码: %d', status_code) return response
添加中间件列表
然后,我们将中间件添加到 Django 的中间件列表中。可以在 Django 项目的 settings.py 文件中的 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', 'file_upload_app.middleware.StatusCodeMiddleware', ]
当你调用视图函数并返回响应时,中间件会自动记录状态码到日志中。
调用日志模块
import logging #查看视图 @login_required def view_file(request, file_name): ... logging.info('用户 {} 在 {} 查看文件内容'.format(request.user.username, datetime.now())) return render(request, 'view_file.html', context)
日志记录内容
2023-08-13 16:56:54,832 [INFO] Authentication (publickey) successful! 2023-08-13 16:56:54,919 [INFO] [chan 0] Opened sftp connection (server version 3) 2023-08-13 16:56:54,927 [ERROR] 用户 admin 在 2023-08-13 16:56:54.927243 查看文件内容失败 2023-08-13 16:56:54,946 [INFO] 状态码: 200
至此日志功能已经配置完成,相关的状态码和异常报错也可以在日志文件中获得,若是不需要这么复杂的调用和获取状态码可以采用其他方式进行定义引用日志格式,以上日志的优点就是不需要再每个需要打印日志的地方定义日志等级和状态码并且可以捕获异常报错到日志文件中。