gpt4 book ai didi

python - 在哪里调用 Django 中的 logging.setLoggerClass()

转载 作者:行者123 更新时间:2023-11-28 20:52:38 27 4
gpt4 key购买 nike

我将 Django 1.3 与标准 Python 日志记录一起使用。我已将其配置为将错误记录到文件中:

'loggers': {
'django': {
'handlers': ['logfile'],
'level': 'ERROR',
'propagate': False,
},

我还希望记录当前登录的 Django 用户的用户名。为此,我使用包含“%(username)s”的格式定义了我自己的格式化程序,并创建了我自己的日志记录类(名为 RequestLogger),它填充了额外的 username属性。唯一剩下要做的就是调用:

logging.setLoggerClass(RequestLogger)

问题是:我应该在哪里调用它?我试过将它放入 __init__.py(在项目级别)和 settings.py 。这两个都可以在 Django 开发服务器上正常工作,但是当使用 WSGI 在 Apache 中运行时,我在 Apache 错误日志中收到如下错误:

[error] Traceback (most recent call last):
[error] File "/usr/lib/python2.7/logging/__init__.py", line 842, in emit
[error] msg = self.format(record)
[error] File "/usr/lib/python2.7/logging/__init__.py", line 719, in format
[error] return fmt.format(record)
[error] File "/usr/lib/python2.7/logging/__init__.py", line 467, in format
[error] s = self._fmt % record.__dict__
[error] KeyError: 'username'
[error] Logged from file base.py, line 209

这似乎暗示在 WSGI 中,Django 记录器在我的 logging.setLoggerClass() 调用之前被初始化。 (它肯定会被调用,因为我自己的日志记录有效并包含用户名)。

最佳答案

您可以在处理程序上使用过滤器来执行此操作,而不是使用自定义日志记录类。参见 this post , 和 this part的文档。

关于python - 在哪里调用 Django 中的 logging.setLoggerClass(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6380139/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com