我想在 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)