19: Trace

Phlo的跟踪模式是一个运行时插装层,它记录对生成的方法、prop getter、静态或原生函数的每次调用,包括时间和参数。每个请求Phlo会将JSON转储写入data/trace/<id>.json。此功能用于调试和性能分析,不适用于生产环境。

19.1: trace 的作用是什么

启用 trace 后,Phlo 的转译器会在每个生成的方法顶部注入一行代码:

trace('class->method', compact('arg1', 'arg2'))

Phlo 加载 functions.trace.phpfunctions.php 的生成变体),以便原生助手 esc()arr()loop()view()apply() 等所有内容也能进行 trace 调用。结果是:在请求期间发生的事情的完整时间顺序日志。

19.2: 启用

在你的开发入口点:

phlo_app (
	id:    'Example',
	host:  'dev.example.nl',
	build: true,
	debug: true,
	trace: true,
)

下一个构建(任何开发请求或 build::run)会注入 trace() 调用;从那时起,每个调用都会被记录。

追踪输出会发送到 data/trace/。该目录会自动创建。

19.3: 一个 trace 包含了什么

每个请求一个 JSON 文件,内容如下:

字段 内容
id 日期时间 + 随机后缀,亦为文件名
path, method, route 请求上下文
ts, ms, count 开始时间戳,总持续时间,事件数量
active 每个文件 → 类型 → 调用计数的映射(快速概览“哪些被频繁访问”)
sequence 每个文件的首次访问顺序(可视化请求路径通过您的应用)
events 完整日志:见下文

每个 events 中的事件:

{
	"t":    12.345,
	"k":    "call",
	"c":    "user",
	"n":    "byEmail",
	"node": "user->byEmail",
	"f":    "user.phlo",
	"args": {"email": "jordi@example.nl"}
}
字段 说明
t 自请求开始以来的毫秒偏移量
k 类型: call, static, get (属性获取), set (属性设置), function
c, n 类和名称
f 源文件(通过类映射 + 源映射解析)
args 截断的参数,见 X.4

19.4: 参数剪切

完整的参数值会使跟踪变得难以阅读。Phlo 剪裁:

类型 变为
null, bool, int, float 不变
string > 200 个字符 ... 截断至 200
array '[N items]'(仅长度)
带有 id 属性的 object {class: ..., id: ...}
其他 object {class: ...}

这足以看到 哪些 记录被触及,而无需转储整个有效负载。

19.5: 通过 Phlo Control Center 进行阅读

Phlo 控制中心有一个 Trace 选项卡,读取 data/trace/index.json。最新的 trace 在顶部;一个选择框可以打开较旧的 trace。每个 trace 显示 activesequence 和事件流。

index.json 保留最后 100 traces。较旧的 trace 会与它们的 JSON 文件一起自动修剪。

19.6: 维护: `build::traceShadow`

functions.trace.php 是一个生成的文件。每当您在 functions.php 中添加或更改内容时,请重新生成它:

php www/app.php build::traceShadow

这将解析 functions.php 并在每个 function foo($a, $b) 中注入作为第一条语句:

trace('foo', compact('a', 'b'))

然后,您将 functions.trace.php 的内容与源代码对齐。该命令仅与正在处理 Phlo 运行时的人相关,而与应用代码无关。

19.7: 何时使用它,何时不使用它

不要

当您需要时打开 trace: true;完成后关闭它。控制中心会持续显示历史跟踪,直到自动修剪将其清理。

我们使用必要的cookie来使该网站正常工作。在您的许可下,我们还使用分析工具来改善网站。