2

我正在使用 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
4

3 回答 3

1
  1. 所有这些调试语句对整体性能的影响非常小——如果您在负载较重时尝试将所有这些日志消息写入某个文件,则会出现性能问题。将大量内容写入文件可能会占用大量 CPU 和 IO。如果您将日志级别设置为低(警告),这不会成为一个大问题,因为这不会导致记录大量消息。当您想要调试/增强该代码时,将调试语句保留在那里将很有帮助。
  2. 如果您没有将消息记录到文件或标准输出,则使用 null 处理程序。或者,您可以将日志记录级别降低到 WARNING 以便只有重要消息通过。
于 2012-05-05T21:08:38.803 回答
1

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

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

try:
    from local_settings import *
except ImportError:
    pass

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

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

于 2012-05-05T21:28:26.183 回答
0

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

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

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

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

于 2012-05-06T04:35:58.057 回答