如何在Django代码中使用logging.DEBUG?
在Django中,我们有一个叫做settings.py
的文件,它为整个项目定义了DEBUG
的设置。
现在,我的调试级别是在settings.py
中独立配置的。
我应该如何使用logging.DEBUG?
方法一:
if settings.DEBUG:
logging.debug("Debug message")
方法二:
# Without checking settings.DEBUG
logging.debug("Debug message")
什么是好的实践?
我认为我们应该使用方法二,因为日志级别已经决定了消息是否会被记录。但有些人说方法一是标准做法。
2 个回答
1
第二种方法是可以的,实际上我一直在使用它。
我之所以在这里回答,是因为几年前我们在一个工作项目中做过类似的事情。结果发现,虽然我们在生产环境中没有把调试级别的信息记录到文件里,但生成这些调试信息本身的成本却很高,影响了性能。
也就是说:
- (1) 在生产环境中,根本不生成调试级别的信息,只是做了一个布尔值的检查。
- (2) 在生产环境中,调试信息是生成并传播的,但就是不记录到文件里(当然,这取决于你是怎么设置日志的)。
这个项目是一个相当大的计算平台,每一点性能都很重要。自那以后我就没有遇到过这样的情况,也许你也不会,但我觉得还是提一下比较好。
4
我觉得过于依赖像DEBUG这样的全局设置并不好,因为它会改变你整个应用的行为。
比如说,如果你想在生产环境中审计代码和记录日志,你不会把DEBUG设置为真来做到这一点吧?你可能更倾向于调整你的日志过滤器。
从风格上来看,让两个设置(DEBUG和日志级别)影响同一个行为其实没什么意义,也不是很符合Python的风格。
简单来说,我认为第二种方法在技术和风格上都更好。