【问题标题】:Django settings module...not possible to run the logger?Django 设置模块...无法运行记录器?
【发布时间】:2017-09-27 15:18:29
【问题描述】:

我在 my_app/views.py 文件中使用 python logging 模块没有问题。

我尝试在用于我的配置的staging_settings.py 中使用它。但是消息永远不会到达错误日志,而来自views.py 的消息工作正常。

我的staging_settings.py

LOGGING= { ..redacted for space.. } # the logging config-dict 

import logging
logger = logging.getLogger(__name__)
logger.debug(F"this is staging_ setup")

setup.py 中运行记录器是不可能的吗?我猜服务器实际上还没有运行,所以记录器没有任何东西可以发送到?我在 pythonanywhere 上运行它,所以我真的没有控制台来简单地 print() 或其他一些黑客替代方案。

【问题讨论】:

  • 您是否已经检查了名称为__name__ 的记录器的日志级别/处理程序/流?
  • print() on PythonAnywhere 应该会出现在您的服务器日志中(从“Web”选项卡链接。
  • @GilesThomas 是的,谢谢,效果很好。
  • 我更新了答案。

标签: python django logging


【解决方案1】:

在导入设置文件时未配置日志记录,因此您无法从其中的模块级别进行日志记录。顺序是

  1. Django 从您的staging_settings.py 导入设置
  2. Django 从导入的模块中获取带有配置的 LOGGING dict
  3. Django 用配置配置logging
  4. 之后,当您记录任何内容时,logging 然后开始根据您的配置输出内容

您不能期望在第 1 步中记录并获取日志输出。

更新: AFAIK 没有独立于 Django 版本的方式来确定何时配置了日志记录。您可以定义自己的过滤器,该过滤器在实例化时设置一个标志,这将在配置期间发生。无论如何,如果您需要从模块级代码中的设置模块登录,这对您没有帮助。但是,在设置模块中定义并稍后调用的函数(在发生日志记录配置之后)可以进行日志记录。

【讨论】:

  • logging 包在什么时候真正“复活”了?我不知道正确的术语,但似乎在 Django 启动时读取 settings.py 时,日志记录还没有准备好运行。
猜你喜欢
  • 1970-01-01
  • 2018-11-13
  • 2016-04-05
  • 2017-06-08
  • 1970-01-01
  • 2020-02-05
  • 1970-01-01
  • 2020-12-30
  • 2014-08-21
相关资源
最近更新 更多