我正在使用Django创建API。每个视图都以JSON响应。我想将每个HttpResponse JSON记录到dev服务器输出。
到目前为止,我添加了一个处理程序:
'console': {
'level':'DEBUG',
'class':'logging.StreamHandler',
}
然后添加了一个记录器:
'to_console': {
'handlers': ['console'],
'level': 'DEBUG',
}
在我看来,我得到了记录器logger = logging.getLogger('to_console')
并为每个json回复logger.debug(json_str)
对于第一个观点,这很好。但我想知道当我将应用程序部署到生产环境时可以关闭调试。看起来https://docs.djangoproject.com/en/dev/topics/logging/#django.utils.log.RequireDebugFalse可以起作用。但后来这导致我的代码乱丢了这些日志记录语句。我从来不需要记录这样的东西,所以我想知道最可维护的方法是什么。
处理开发日志记录的正确方法是什么,以便在代码生产时可以“关闭”?或者是否存在某些我缺少的内置功能或应用程序会自动将所有HttpResponse记录到开发服务器?
答案 0 :(得分:2)
通过改变您为日志记录提供的配置,可以关闭和打开日志记录功能。您可能会认为日志记录语句“乱丢”您的代码,但是一旦服务器在生产中运行,您(通常)很少有方法知道内部发生了什么,而不是记录。
如果需要,您可以向正在运行的服务器发送包含新配置的JSON数据的POST,然后由处理POST请求的视图生效。但是建议保留日志记录语句,因为它们非常便宜,因为日志记录级别实际上没有输出(正如您所料,写入控制台/文件/套接字等的实际I / O占用大部分时间时间,但如果水平设置得足够高,实际输出很少或根本没有。)
如果在开发和测试中一切运行良好但在生产中无法解决,则日志记录有时可能是唯一可用的诊断工具。
我认为使用RequireDebugFalse对于您描述的场景非常合理,但您也可以编写自己的过滤器,使其更符合您的特定需求(编写过滤器非常容易)。