You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django中为每个用户生成独立的登录/登出日志文件

实现按用户昵称生成独立登录登出日志文件

要让每个用户的登录登出日志存入专属昵称命名文件,需要自定义日志处理器来动态生成文件名,具体步骤如下:

1. 编写用户专属日志处理器

在项目中新建utils/logging.py文件,自定义一个继承自logging.FileHandler的处理器,通过日志记录的额外参数获取用户昵称,动态设置日志文件路径:

import logging
import os

class UserSpecificFileHandler(logging.FileHandler):
    def emit(self, record):
        # 从日志记录的extra参数取用户昵称,无数据时用'unknown_user'兜底
        username = getattr(record, 'username', 'unknown_user')
        # 确保日志目录存在,不存在则创建
        log_dir = 'loggers/log_in_out'
        os.makedirs(log_dir, exist_ok=True)
        # 设置以用户昵称命名的日志文件路径
        self.baseFilename = os.path.join(log_dir, f'{username}.log')
        # 调用父类方法写入日志
        super().emit(record)

2. 修改settings.py的日志配置

替换原有日志处理器为自定义的处理器,保留格式器等其他配置:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'log_in_out_format': {
            'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}',
            'style': '{',
        },
    },
    'handlers': {
        'user_specific_log': {
            'level': 'INFO',
            # 指定自定义处理器的路径
            'class': 'utils.logging.UserSpecificFileHandler',
            'formatter': 'log_in_out_format',
        },
    },
    'loggers': {
        'authentication': {
            'handlers': ['user_specific_log'],
            'level': 'INFO',
            'propagate': False,
        }
    },
}

3. 更新views.py的日志调用

记录日志时,通过extra参数传递当前用户的昵称:

# 登录日志
login(request, user)
logger.info(f'{request.user.email} logged in', extra={'username': request.user.username})

# 登出日志
logger.warning(f'{request.user.email} logged out', extra={'username': request.user.username})
logout(request)

配置完成后,每个用户的登录登出日志会自动生成在loggers/log_in_out/目录下,文件名对应用户昵称,比如alice.log、bob.log。

内容的提问来源于stack exchange,提问作者Kirill_N

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 02:48:16