在 Python 中存储 http 请求的痕迹
Store traces of http requests in Python
我想存储为处理 http 请求而执行的 python 代码的踪迹。
我们使用 Python 和 Django。
在此上下文中什么是跟踪?
我想对所有跟踪的 http 请求都使用这个:
- request.META,
- request.POST
- request.GET
对于每个跟踪,代码执行的堆栈跟踪都是 N 倍。在第一步中,将众所周知的 python 回溯存储为字符串就足够了。第一步变量的值不需要存储。
堆栈跟踪可以由主管线程创建,也可以通过源代码中的方法调用显式创建。第一步显式就够了,supervisor线程可以后面做。
跟踪是可选的,仅用于调试和分析。它们不需要处理 http 请求。
如何解决?
这道题是不是理解有欠缺?如果是,请发表评论。
更新
- 我想达到什么目的?我希望有更好的方法来调试生产系统中的错误。我想看看发生错误之前发生了什么。
- 所有 http 请求?我想我想每分钟存储一条轨迹。我估计N周后我会删除数据。
有两种方法可以满足您的需求。一个叫 "tracing",另一个叫 "logging".
跟踪意味着您拥有一些软件(如 trace
module),它允许您创建统计信息,哪些方法被调用的频率、方法参数是什么、谁调用了谁等等。
使用跟踪,您需要配置要跟踪的 method/function 个调用。设置很快,但无法查看 methods/functions 的内部。有点傻
此外,您必须编写自己的工具来分析跟踪文件以理解它们。
日志记录更加手动。您需要配置一个日志记录框架,然后在有趣的地方调用日志方法。这使您可以查看局部变量。您可以用有用的方式格式化逻辑数据结构等。
这意味着日志记录功能更强大,但需要更多的手动设置工作。
还需要一些时间来学习如何进行正确的日志记录(不要太多也不要太少)。但是日志记录已经附带了许多强大的工具(日志查看器、日志文件轮换以避免磁盘已满)。
您可以使用中间件来干扰所有请求,然后记录它们。查看 Rhumbix/django-request-logging 的示例实现。
从评论中移出
您可以查看 https://github.com/getsentry/sentry,它是记录错误的专用解决方案。它还具有使用 raven 客户端手动记录数据的方法。
我想存储为处理 http 请求而执行的 python 代码的踪迹。
我们使用 Python 和 Django。
在此上下文中什么是跟踪?
我想对所有跟踪的 http 请求都使用这个:
- request.META,
- request.POST
- request.GET
对于每个跟踪,代码执行的堆栈跟踪都是 N 倍。在第一步中,将众所周知的 python 回溯存储为字符串就足够了。第一步变量的值不需要存储。
堆栈跟踪可以由主管线程创建,也可以通过源代码中的方法调用显式创建。第一步显式就够了,supervisor线程可以后面做。
跟踪是可选的,仅用于调试和分析。它们不需要处理 http 请求。
如何解决?
这道题是不是理解有欠缺?如果是,请发表评论。
更新
- 我想达到什么目的?我希望有更好的方法来调试生产系统中的错误。我想看看发生错误之前发生了什么。
- 所有 http 请求?我想我想每分钟存储一条轨迹。我估计N周后我会删除数据。
有两种方法可以满足您的需求。一个叫 "tracing",另一个叫 "logging".
跟踪意味着您拥有一些软件(如 trace
module),它允许您创建统计信息,哪些方法被调用的频率、方法参数是什么、谁调用了谁等等。
使用跟踪,您需要配置要跟踪的 method/function 个调用。设置很快,但无法查看 methods/functions 的内部。有点傻
此外,您必须编写自己的工具来分析跟踪文件以理解它们。
日志记录更加手动。您需要配置一个日志记录框架,然后在有趣的地方调用日志方法。这使您可以查看局部变量。您可以用有用的方式格式化逻辑数据结构等。
这意味着日志记录功能更强大,但需要更多的手动设置工作。 还需要一些时间来学习如何进行正确的日志记录(不要太多也不要太少)。但是日志记录已经附带了许多强大的工具(日志查看器、日志文件轮换以避免磁盘已满)。
您可以使用中间件来干扰所有请求,然后记录它们。查看 Rhumbix/django-request-logging 的示例实现。
从评论中移出
您可以查看 https://github.com/getsentry/sentry,它是记录错误的专用解决方案。它还具有使用 raven 客户端手动记录数据的方法。