17: Trace

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

17.1: 什么是 trace

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

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

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

17.2: 启用

在您的开发入口点中:

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

然后运行 build::run,以便生成的 PHP 包含 trace() 注入。从下一个请求开始,每个调用都会被记录。

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

17.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

17.4: 参数剪切

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

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

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

17.5: 通过 Phlo Control Center 进行阅读

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

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

17.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 运行时的人相关,而与应用代码无关。

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

不要

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

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