在 Python 中存储 http 请求的跟踪



我想存储python代码的痕迹,该代码被执行以处理http请求。

我们使用Python和Django。

在这种情况下,什么是跟踪?

我想为所有跟踪的 http 请求提供这个:

  • 请求。元
  • 请求。发布
  • 请求。获取

对于每个跟踪,代码执行的堆栈跟踪数是 N 倍。在第一步中,将众所周知的 python 回溯存储为字符串就足够了。第一步中,不需要存储变量的值。

堆栈跟踪可以由主管线程创建,也可以通过源代码中的方法调用显式创建。第一步显式就足够了,主管线程可以在以后完成。

跟踪是可选的,仅用于调试和分析。它们不需要来处理 http 请求。

如何解决这个问题?

理解这个问题是否缺少什么?如果是,是的,请发表评论。

更新

  • 我想要实现什么目标?我希望有一种更好的方法来调试生产系统中的错误。我想看看在发生错误之前发生了什么。
  • 所有 http 请求?我想我想每分钟存储大约一条痕迹。我想我会在 N 周后删除数据。

您可以使用中间件干扰所有请求,然后记录它们。查看 Rhumbix/django-request-logging 以获取示例实现。

从评论中移出

您可以查看 https://github.com/getsentry/sentry 哪个是记录错误的专用解决方案。此外,它还具有使用raven客户端手动记录数据的方法。

有两种方法可以做你想做的事情。一个称为"跟踪",另一个称为"日志记录"。

跟踪意味着您有一些软件(如trace模块),它允许您创建统计信息,哪些方法调用频率,方法参数是什么,谁调用谁等。

使用跟踪时,您需要配置要跟踪的方法/函数调用。它设置起来很快,但无法查看方法/函数的内部。有点傻。

此外,您必须编写自己的工具来分析跟踪文件以理解它们。

日志记录更加手动。您需要配置日志记录框架,然后在感兴趣的位置调用日志方法。这允许您查看局部变量。您可以通过有用的方式格式化逻辑数据结构等。

这意味着日志记录功能更强大,但设置起来需要更多的手动工作。 学习如何进行正确的日志记录也需要一些时间(不要太多,也不能太少)。但是日志记录已经附带了许多强大的工具(日志查看器,日志文件轮换以避免磁盘已满)。

最新更新