小编son*_*ind的帖子

Django 会话:如何在每个日志记录中包含会话 ID?

我想在 Django 的每个日志条目中包含会话 ID(至少是其中的一部分)。这将帮助我将每个用户会话的日志组合在一起,以防多个用户同时与我的 Django API 交互。

我知道我可以从 Request 对象(当它存在时)检索会话 ID,但我必须为整个框架中的每个 logger.info() 这样做。相反,最好在 settings.py 中以某种方式提供 Request ,以便我可以在 LOGGING 配置中将 ID 添加到格式化程序的格式字符串中。

这将确保会话 ID 包含在每个日志条目中,我不需要在每个视图或序列化程序等中考虑它。

但是我还没有找到如何在 settings.py 中使请求或会话可用的方法。

编辑:

进一步解释。我有以下信号来捕获用户登录并在它发生时记录此事件。我想在此消息中添加会话 ID。但我希望 Django 默认为系统中的任何消息执行此操作 - 我不想在 log_user_login 函数和我的代码中的任何其他函数中获取会话 ID。

所以在下面的代码中,我想启动记录器事件,但没有指定会话 ID。

import logging
from django.dispatch import receiver
from django.contrib.auth.signals import user_logged_in

logger = logging.getLogger(__name__)

@receiver(user_logged_in)
def log_user_login(sender, user, request, **kwargs):
    logger.info(f"User {user.username} logged in.")
Run Code Online (Sandbox Code Playgroud)

我希望 Django 通过 settings.py 中的配置自动添加会话 ID,以使用以下代码进行说明:

def add_session_id(record):
    record.attrs = record.__dict__.keys()
    return True


LOGGING = {
    'version': 1, …
Run Code Online (Sandbox Code Playgroud)

python django session logging

5
推荐指数
1
解决办法
1163
查看次数

标签 统计

django ×1

logging ×1

python ×1

session ×1