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

17.1: Welke trace doet

Met trace ingeschakeld, injecteert de compiler van Phlo één regel 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 tijdens een verzoek is gebeurd.

17.2: Inschakelen

In uw ontwikkelingsinstap:

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

Voer vervolgens build::run uit zodat de gegenereerde PHP de trace() injecties bevat. Vanaf het volgende verzoek wordt elke oproep gelogd.

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

17.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 Starttimestamp, totale duur, aantal gebeurtenissen
active Kaart per bestand → soort → aanroepcount (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 de start van het verzoek
k Soort: call, static, get (prop get), set (prop set), function
c, n Klasse en naam
f Bronbestand (opgelost via classmap + sourcemap)
args Afgebroken argumenten, zie X.4

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

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

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

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

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