METANOUS 29 MAART 2022 LR 58

Enkele gedachten over traces

Onlangs werd mij gevraagd om een stuk code te debuggen waarbij ik voordien niet betrokken was. Omdat het probleem zich alleen leek voor te doen in de productieomgeving, ben ik onze traces gaan raadplegen om mijn zoektocht naar de bug te starten.

Terwijl ik me door de traces werkte (en probeerde ze te koppelen aan de code), besefte ik opnieuw hoe belangrijk goede tracing is. Het vinden van deze bug kostte me meerdere dagen zoeken, terwijl ik ze waarschijnlijk in minder dan een halve dag had kunnen vinden als er degelijke traces aanwezig waren geweest.

Voorzie voldoende traces

Een van de belangrijkste voordelen van het gebruik van traces in de broncode is dat ze een gedetailleerd overzicht geven van de uitvoering van het programma. Dit is vooral nuttig bij complexe programma's die meerdere threads of processen bevatten, omdat het kan helpen om potentiële bronnen van fouten en inconsistenties te identificeren.

Een ander voordeel van het gebruik van traces is dat ze kunnen helpen de algehele prestaties van je programma te verbeteren. Door een gedetailleerd overzicht van de uitvoering te bieden, kunnen traces helpen knelpunten te ontdekken en de code dienovereenkomstig te optimaliseren.

Naast deze voordelen helpt het toevoegen van voldoende traces om een gedetailleerd overzicht van de uitvoering van een programma te bieden en zo beter te begrijpen hoe de code werkt – zeker wanneer je te maken hebt met code die door iemand anders is geschreven.

Vermijd betekenisloze traces

Traces die geen nuttige informatie of inzichten over het gedrag van het programma bieden, moeten vermeden worden. Betekenisloze traces vormen om meerdere redenen een probleem. Ten eerste maken ze de tracelogboeken rommelig, waardoor het moeilijk wordt om de informatie te vinden en te interpreteren die daadwerkelijk relevant is voor het gedrag van het programma.

Ten tweede kunnen betekenisloze traces ook de algehele effectiviteit van trace-statements verminderen. Wanneer tracelogboeken gevuld zijn met irrelevante informatie, wordt het moeilijker om de berichten te identificeren en te begrijpen die daadwerkelijk waardevolle inzichten bieden in het gedrag van het programma.

Toon werkelijke waarden van variabelen

Het is belangrijk om de werkelijke waarden van variabelen te tonen, omdat dit waardevolle informatie geeft over de toestand van het programma op een bepaald moment. Door de werkelijke waarden van variabelen te tonen, kunnen tracelogboeken een gedetailleerd overzicht bieden van het gedrag van het programma en ontwikkelaars helpen te begrijpen wat er echt binnen de code gebeurt.

Ryan Putra Zszf3u2ri9m Unsplash

Gebruik beknopte en consistente traces

Enkele tips om je traces beter leesbaar te maken:

  • Gebruik een consistent formaat: Bij het schrijven van trace-statements is het belangrijk een consistent formaat voor de berichten te gebruiken. Dit helpt de tracelogboeken leesbaarder en gemakkelijker te interpreteren te maken. Bijvoorbeeld, je kunt een standaardformaat gebruiken dat de tijd, de functienaam en het trace-bericht bevat.

  • Wees specifiek en beknopt: Vermijd vage of algemene berichten en concentreer je op het geven van duidelijke, beknopte informatie over wat het programma op een bepaald moment doet.

  • Gebruik trace-niveaus: Trace-statements kunnen verschillende niveaus krijgen, zoals "info" of "warning". Bij het schrijven van trace-berichten is het belangrijk deze niveaus consistent te gebruiken en het juiste niveau voor elk bericht te kiezen.

  • Vermijd betekenisloze traces: Zoals eerder genoemd, kunnen betekenisloze traces een probleem vormen omdat ze de tracelogboeken rommelig maken en het moeilijker maken om de informatie te vinden en te interpreteren die daadwerkelijk relevant is voor het gedrag van het programma.

Vermijd geheimen in de traces

Tijdens het doornemen van de traces was ik verrast om wachtwoorden, connection strings, gebruikersnamen, enz. in de tracelogboeken tegen te komen. Er zijn enkele belangrijke stappen die ontwikkelaars kunnen nemen om te voorkomen dat geheime informatie in traces wordt geschreven:

  • Zorg ervoor dat gevoelige gegevens niet in trace-berichten worden opgenomen. Dit omvat zaken zoals wachtwoorden, API-sleutels of andere vertrouwelijke gegevens.

  • Gebruik maskers voor gevoelige gegevens: Als het noodzakelijk is om gevoelige gegevens in trace-berichten op te nemen, overweeg dan het gebruik van maskers om deze gegevens te verbergen.

  • Gebruik aparte tracelogboeken voor gevoelige gegevens: Als het om een bepaalde reden nodig is om gevoelige gegevens te traceren, overweeg dan een apart tracelogboek te gebruiken om deze gegevens op te slaan. De juiste gebruikersrechten voor het lezen van dit logboek kunnen dan worden ingesteld.

  • Gebruik encryptie voor tracelogboeken: Om gevoelige gegevens in tracelogboeken extra te beschermen, kan encryptie worden gebruikt om de logs te beveiligen.

Hulp nodig bij je softwareontwikkeling?

We kunnen je helpen met je maatwerksoftware of het redden van een project. Laten we erover praten!

Contacteer ons

kristof.png

Gebruik een platform voor logbeheer en analyse

Om de traces die je zoekt gemakkelijk terug te vinden (en niet een hele dag te hoeven besteden aan het vinden van de juiste credentials voor de productieomgeving om toegang te krijgen tot de logbestanden), raad ik aan een logbeheersysteem te gebruiken. Zo’n systeem maakt het mogelijk om de tracelogboeken centraal op te slaan en de juiste gebruikersrechten toe te kennen.

Seq stelt ons in staat loggegevens te verzamelen, op te slaan en te analyseren vanuit verschillende bronnen, waaronder applicaties, servers en andere systemen. Een van de belangrijkste kenmerken van Seq is dat het realtime inzicht biedt in het gedrag van softwareapplicaties. Dit wordt bereikt door loggegevens realtime te verzamelen en tools te bieden om deze gegevens te doorzoeken, filteren en analyseren.

Seq is bovendien zeer schaalbaar, waardoor het grote hoeveelheden loggegevens kan verwerken zonder prestatieverlies. Dit maakt het uitermate geschikt voor gebruik in omgevingen met veel verkeer, zoals webapplicaties of gedistribueerde systemen.

Herbekijk traces in veelvuldig aangeroepen methodes

Traces in functies die extreem vaak worden aangeroepen, kunnen om meerdere redenen een probleem vormen.

  • Deze traces kunnen een grote hoeveelheid loggegevens genereren, wat het moeilijk maakt om de informatie te vinden en te interpreteren die daadwerkelijk relevant is voor het gedrag van het programma.

  • Traces in veelvuldig aangeroepen functies kunnen ook een negatieve invloed hebben op de prestaties van het programma. Wanneer een trace-statement wordt uitgevoerd, voegt dit extra overhead toe aan de functie, en deze overhead kan snel oplopen als de functie vaak wordt aangeroepen.

Overweeg zorgvuldig of de trace-statements in deze functies echt nodig zijn, en verwijder alle traces die geen waardevolle informatie bieden. Overweeg het gebruik van trace-filters om de hoeveelheid gegenereerde loggegevens te beperken. Log alleen de informatie die relevant is voor de bug die je zoekt.

Enkele tips voor het loggen van exceptions

  • Log de volledige exception stacktrace, inclusief het type exception en het bijbehorende bericht.

  • Gebruik een apart logniveau voor exceptions, zoals ERROR of FATAL, om het gemakkelijker te maken de exception-berichten in je logbestanden te vinden en te filteren.

  • Voeg contextuele informatie toe aan je logberichten, zoals de request-URL, gebruikers-ID en relevante gegevens uit de request of de applicatiestatus. Dit helpt je te begrijpen in welke context de exception is opgetreden en wat eraan voorafging.

  • Houd je logs in de gaten voor exceptions en andere fouten, en stel alerts of meldingen in om je te waarschuwen wanneer een fout optreedt.