django 1.3在开发环境中进行日志调试

时间:2012-05-05 19:06:49

标签: python django logging django-settings

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

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

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

我的问题是:

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

3 个答案:

答案 0 :(得分:1)

  1. 所有这些调试语句对整体性能的影响非常小 - 如果您在负载较重的情况下尝试将所有这些日志消息写入某个文件,则会出现性能问题。将大量内容写入文件可能是CPU和IO密集型的。如果将日志级别设置为低(警告),这不会成为一个问题,因为这不会导致记录大量消息。当您想要调试/增强该代码时,将调试语句保存在那里将会有所帮助。
  2. 如果没有记录到文件或std的消息,请使用null处理程序。或者,您可以将日志记录级别降低到警告,以便只传递重要消息。

答案 1 :(得分:1)

你的生产配置中仍然应该有相当多的日志记录,因为这是最难找出问题所在的地方,所以请确保你不要过多地删除。

就生产/开发设置而言,我总是在settings.py:

的底部
try:
    from local_settings import *
except ImportError:
    pass

然后我有一个local_settings.py,我没有添加到源代码控制中,可以覆盖设置。这样你就可以很容易地拥有单独的生产/开发设置。

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

答案 2 :(得分:0)

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

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

从正确的调试语句中获得的总体价值否定了它们对性能可能产生的任何影响。想想另一种方式 - 如果你没有调试,如果你的系统运行不好,你将无法知道它在哪里窒息。

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