django 1.3 用于在开发环境中进行调试的日志记录

Posted

技术标签:

【中文标题】django 1.3 用于在开发环境中进行调试的日志记录【英文标题】:django 1.3 logging for debugging in development environment 【发布时间】:2012-05-14 22:58:56 【问题描述】:

我正在使用 django 1.3 中的日志框架,如此处所述 https://docs.djangoproject.com/en/1.3/topics/logging/

在我的 DEV 环境的 settings.py 文件中,我基本上定义了自定义格式化程序、记录器和处理程序,以便我可以将调试输出记录到文件中。

所以现在我的代码中到处都有 logger.debug() 语句。

我的问题是:

    当我在生产中部署时,logger.debug 语句是否有任何(重要) 对性能的影响? (即我需要把它们都拿出来吗?) 更改 settings.py 文件使其不再捕获到文件的最佳方法是什么?目前我只是将处理程序更改为 django.utils.log.NullHandler

【问题讨论】:

***.com/questions/9589870/… 【参考方案1】:
    所有这些调试语句对整体性能的影响非常小 - 如果您在负载较重时尝试将所有这些日志消息写入某个文件,则会出现性能问题。将大量内容写入文件可能会占用大量 CPU 和 IO。如果您将日志级别设置为低(警告),这不会是一个大问题,因为这不会导致记录大量消息。当您想调试/增强该代码时,将调试语句保留在其中会很有帮助。 如果您没有将消息记录到文件或标准输出,则可以使用 null 处理程序。或者,您可以将日志记录级别调低为 WARNING,以便仅通过重要消息。

【讨论】:

谢谢。如果我不想关心输出,最好的做法是设置级别还是使用 null 处理程序? 设置关卡。 NullHandler 仅供库作者添加,用于库用户未配置日志记录的场景。【参考方案2】:

您仍然应该在生产配置中记录大量日志,因为这将是最难找出问题所在的地方,因此请确保您不要删除太多。

在生产/开发设置方面,我的 settings.py 底部总是有这个:

try:
    from local_settings import *
except ImportError:
    pass

然后我有一个 local_settings.py,我没有添加到源代码管理中并且可以覆盖其中的设置。这样您就可以非常轻松地进行单独的生产/开发设置。

我从this blog 那里得到了这个想法,现在已经在很多项目中使用它——非常方便。该博客扩展了链接,并展示了如何将开发和生产设置添加到源代码管理,然后使用 local_settings 来包含其中一个。

【讨论】:

【参考方案3】:

对于生产,您应该始终启用调试 - 正如其他人所提到的,这是您最需要它的地方。

在生产中,我们使用sentry 进行应用程序级别的日志记录,使用splunk 收集系统日志以便于搜索。

从正确的调试语句中获得的总体价值抵消了它们可能对性能产生的任何影响。换一种方式想一想——如果你没有调试,如果你的系统表现不佳,你将无法知道它在哪里窒息。

调试语句是最后我希望提高性能的地方。如果你实现了 memcache 或 redis,你会得到更多的回报;或者只是优化您的查询(因为这是大多数性能问题的开始)。

【讨论】:

以上是关于django 1.3 用于在开发环境中进行调试的日志记录的主要内容,如果未能解决你的问题,请参考以下文章

Django 调试视图,用于管理员的生产环境

当调试关闭时,启用 Django 语言环境的应用程序总是返回 404

公众号开发小技能:解决模板消息(业务通知)的日调用上限问题

用于调试Django项目的IDE [关闭]

64. Django 2 生产环境部署 uwsgi nginx

Fiddler及浏览器开发者工具进行弱网测试