我正在使用 Django 创建一个 API。每个 View 都以 JSON 形式响应。我想将每个 HttpResponse JSON 记录到开发服务器输出。
到目前为止我已经添加了一个处理程序:
'console': {
'level':'DEBUG',
'class':'logging.StreamHandler',
}
然后添加一个记录器:
'to_console': {
'handlers': ['console'],
'level': 'DEBUG',
}
在我看来,我得到了记录器logger =logging.getLogger('to_console')
对于每个 json 响应logger.debug(json_str)
对于第一个 View 来说,这很好。但我想知道当我将应用程序部署到生产环境时是否可以关闭调试。看起来像 https://docs.djangoproject.com/en/dev/topics/logging/#django.utils.log.RequireDebugFalse可以工作。但这导致我的代码中充斥着这些日志语句。我从来没有需要记录这样的东西,所以我想知道处理它的最可维护的方法是什么。
处理开发日志记录以便在代码投入生产时可以“关闭”它的正确方法是什么?或者是否有某种内置功能或应用程序我缺少自动将所有 HttpResponse 记录到开发服务器?
最佳答案
可以通过改变您提供的日志记录配置来关闭和打开日志记录功能。您可能认为日志记录语句“乱扔”了您的代码,但是一旦服务器在生产环境中运行,除了日志记录之外,您(通常)几乎没有什么方法可以了解内部发生的情况。
如有必要,您可以向正在运行的服务器发送包含新配置的 JSON 数据的 POST,然后该配置将通过处理 POST 请求的 View 生效。但建议将日志记录语句保留在适当的位置,因为当日志记录级别达到实际不会输出任何内容时,它们的成本非常低(如您所料,写入控制台/文件/套接字等的实际 I/O 占用了大部分时间)时间,但如果级别设置得足够高,则实际输出很少或没有输出)。
当开发和测试中一切运行良好但在生产中莫名其妙地失败时,日志记录有时可能是唯一可用的诊断工具。
我认为对于您描述的场景,使用 RequireDebugFalse 是相当合理的,但是您也可以编写自己的过滤器,它更适合您的特定需求(编写过滤器非常容易做到)。
关于python - Django 开发将 HttpResponses 记录到开发服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9589870/