19: Trace

Phlo's trace mode is een runtime-instrumentatielaag die elke aanroep naar een gegenereerde method, prop getter, static of native functie logt met timing en argumenten. Per verzoek schrijft Phlo een JSON-dump naar data/trace/<id>.json. Bedoeld voor debugging en profiling, niet voor productie.

19.1: Wat trace doet

Met trace ingeschakeld, voegt de transpiler van Phlo één regel toe aan de bovenkant van elke gegenereerde method:

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

En Phlo laadt functions.trace.php (een gegenereerde variant van functions.php) zodat native helpers, esc(), arr(), loop(), view(), apply(), alles, ook een trace-aanroep krijgen. Het resultaat: een complete chronologische log van wat er gebeurde tijdens een verzoek.

19.2: Inschakelen

In je dev entrypoint:

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

De volgende build (elke ontwikkelaarsverzoek, of build::run) injecteert de trace() aanroepen; vanaf dat moment wordt elke aanroep gelogd.

Trace-uitvoer gaat naar data/trace/. De map wordt automatisch aangemaakt.

19.3: Wat een trace bevat

Eén JSON-bestand per verzoek met:

Veld Inhoud
id Datum-tijd + willekeurige suffix, ook de bestandsnaam
path, method, route Verzoekcontext
ts, ms, count Starttijdstempel, totale duur, aantal gebeurtenissen
active Kaart per bestand → soort → aanroep telling (snelle overzicht van "wat vaak is aangeraakt")
sequence Volgorde van eerste aanraking per bestand (visualiseert het verzoekpad door je app)
events Volledige log: zie hieronder

Elke gebeurtenis in events:

{
	"t":    12.345,
	"k":    "call",
	"c":    "user",
	"n":    "byEmail",
	"node": "user->byEmail",
	"f":    "user.phlo",
	"args": {"email": "jordi@example.nl"}
}
Veld Betekenis
t Offset in ms sinds het begin van de aanvraag
k Soort: call, static, get (prop get), set (prop set), function
c, n Klasse en naam
f Brondocument (opgelost via classmap + sourcemap)
args Afgebroken argumenten, zie X.4

19.4: Argument snipping

Volledige argumentwaarden zouden de trace onleesbaar maken. Phlo snijdt:

Type Wordt
null, bool, int, float onveranderd
string > 200 tekens ... afgekapt op 200
array '[N items]' (alleen lengte)
object met een id eigenschap {class: ..., id: ...}
Andere object {class: ...}

Dat is genoeg om te zien welke records zijn aangeraakt zonder de volledige payload te dumpen.

19.5: Lezen via het Phlo Control Center

Het Phlo Control Center heeft een Trace tabblad dat data/trace/index.json leest. De meest recente trace staat bovenaan; een selectievak opent oudere. Per trace zie je active, sequence en de evenementstroom.

index.json houdt de laatste 100 traces bij. Oudere worden automatisch verwijderd samen met hun JSON-bestand.

19.6: Onderhoud: `build::traceShadow`

functions.trace.php is een gegenereerd bestand. Telkens wanneer je iets toevoegt of iets wijzigt in functions.php, genereer het opnieuw:

php www/app.php build::traceShadow

Dit parseert functions.php en injecteert, in elke function foo($a, $b), als de eerste verklaring:

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

Dan align je de inhoud van functions.trace.php met de bron. De opdracht is alleen relevant voor degenen die aan de Phlo-runtime zelf werken, niet voor app-code.

19.7: Wanneer het te gebruiken, wanneer niet

Do:

Don't:

Zet trace: true aan wanneer je het nodig hebt; zet het uit wanneer je klaar bent. Het Control Center blijft de historische traces tonen totdat de auto-prune ze opruimt.

We gebruiken essentiële cookies om deze site te laten werken. Met uw toestemming gebruiken we ook analytics om de site te verbeteren.