python - Django 开发将 HttpResponses 记录到开发服务器

标签 python django logging

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

相关文章:

python - 使用自定义文件名进行 Airflow 记录?

python - 根据 y 轴中的值对条形图中的条形进行排序

python - NoneType 即使定义了属性也会出错?

python - 将 Pandas 数据框转换为固定大小的段数组

django - 模型验证 : can I access ValidationError code?

logging - 企业库6 LogCallHandler抛出异常 "The LogWriter has not been set for the Logger static class"

python - 在没有类实例的情况下访问类级别成员

python - Django:搜索短语中单个单词的首字母?

django - 使用 DRF 中序列化器字段的子集反序列化 POST 请求

Python 日志记录。消息具有相同的日期