Planet Python 中文 关注 Graham Dumpleton:带包裹的零代码追踪 本文描述了如何使用"wrapture"工具在不修改源代码的前提下观察和追踪 Python 程序。最初,追踪涉及编辑程序的入口点,这对于继承或共享的代码而言并不理想。一种更灵活的方法是使用独立的配置文件wrapture.toml来指定观察目标以及追踪数据的输出位置。该配置文件定义了观察目标及其关联的方法,以及数据脱敏规则。wrapture.toml 文件允许针对模块中的特定方法名或通配符模式进行匹配。该工具通过python -m wrapture后接程序脚本来运行,在程序执行前应用配置。此方法生成的追踪输出与修改源代码的方法相同,但将观察逻辑外部化。对于长时间运行的应用程序,追踪输出可重定向至文件(如trace.jsonl),采用 JSON Lines 格式。该文件格式捕获详细的事件信息,包括参数、结果、异常和耗时,使其易于通过常用工具(如jq)进行处理。关于保持追踪激活的安全考量包括:使用有界队列以防止阻塞,以及对参数进行摘要处理以避免保留活动对象。当无法直接通过命令行执行时,可使用autowrapt通过环境变量在解释器启动时注入 wrapture。这种引导机制通常旨在用于开发或调试环境,而非生产环境。一旦注入追踪,即可通过wrapture.bootstrap提供的功能动态控制——暂停、恢复或完全回退,而无需重启应用程序。wrapture 的下一步工作是将此追踪能力应用于更复杂的应用单元,例如 Web 应用程序中常见的单元。 Graham Dumpleton: Zero-code tracing with wrapture grahamdumpleton.me Planet Python 中文 RSS thenote.app
wrapture.toml来指定观察目标以及追踪数据的输出位置。该配置文件定义了观察目标及其关联的方法,以及数据脱敏规则。wrapture.toml文件允许针对模块中的特定方法名或通配符模式进行匹配。该工具通过python -m wrapture后接程序脚本来运行,在程序执行前应用配置。此方法生成的追踪输出与修改源代码的方法相同,但将观察逻辑外部化。对于长时间运行的应用程序,追踪输出可重定向至文件(如trace.jsonl),采用 JSON Lines 格式。该文件格式捕获详细的事件信息,包括参数、结果、异常和耗时,使其易于通过常用工具(如jq)进行处理。关于保持追踪激活的安全考量包括:使用有界队列以防止阻塞,以及对参数进行摘要处理以避免保留活动对象。当无法直接通过命令行执行时,可使用autowrapt通过环境变量在解释器启动时注入 wrapture。这种引导机制通常旨在用于开发或调试环境,而非生产环境。一旦注入追踪,即可通过wrapture.bootstrap提供的功能动态控制——暂停、恢复或完全回退,而无需重启应用程序。wrapture 的下一步工作是将此追踪能力应用于更复杂的应用单元,例如 Web 应用程序中常见的单元。