Naar hoofdinhoud gaan
LogBrew is een observability-platform voor developers en coding agents, met een royaal gratis abonnement en zonder creditcard. Deze handleiding behandelt Python logging met de standaardmodule logging, de 5 loglevels van Python, foutafhandeling in Python en de veelvoorkomende fouttypes in Python. De laatste secties sturen dezelfde logs en crashes naar LogBrew met logbrew-sdk 0.1.29. Elk voorbeeld draaide op Python 3.13 en elk outputblok toont de echte output. Gebruik voor een Flask-app Flask-logging. Die handleiding voegt request-traces toe aan dezelfde logging-setup.

Je eerste Python-log schrijven

Sla dit bestand op als app.py. Roep logging.basicConfig() één keer aan, op het startpunt van het programma. Maak in elke module een logger met een naam.
Voer python3 app.py uit. De output gaat naar standard error.
Het debug-record verschijnt niet, omdat het level INFO is. logger.exception() logt op ERROR en voegt de traceback toe. Roep het alleen aan in een except-blok. Geef waarden mee als argumenten, zoals in "payment retry %d of %d", 2, 3. Python bouwt het bericht pas op als een handler het record accepteert. Het berichtsjabloon blijft bij elke nieuwe poging hetzelfde, dus je kunt erop zoeken.

Loglevels in Python

Een logger verstuurt een record alleen als het level van het record gelijk is aan of hoger is dan het level van de logger. Een handler kan een tweede, hoger level instellen. De root logger begint op WARNING. Een nieuwe logger heeft het level NOTSET (0) en gebruikt het level van de bovenliggende logger. Stel in productie INFO in. Gebruik DEBUG alleen in ontwikkeling of voor een korte diagnose.
De eerste regel toont debug-records voor 1 module. De tweede regel haalt ruis van een library weg.

Loggers, handlers en formatters

  • Een logger ontvangt de aanroep. Gebruik logging.getLogger(__name__), zodat de naam van de logger het modulepad volgt.
  • Een handler stuurt records naar een bestemming, zoals de console, een bestand of LogBrew.
  • Een formatter zet een record om in tekst.
Een library mag logging niet configureren. Ze voegt alleen een logging.NullHandler() toe aan haar eigen logger. De applicatie configureert handlers en levels één keer. Gebruik logging.config.dictConfig() voor een grote configuratie.

Foutafhandeling in Python

Vang de meest specifieke exception af die je kunt afhandelen. Gebruik else voor code die alleen bij succes draait en finally voor code die altijd draait. Gebruik raise ... from error om de oorspronkelijke oorzaak te bewaren. Sla dit bestand op als orders.py.
De output toont beide exceptions in de keten.
Volg deze regels voor elke exception.
  • Log een exception één keer, op de plek waar je hem afhandelt. Log en raise hem niet opnieuw in elke laag, want elke laag voegt dan een dubbel record toe.
  • Schrijf geen except Exception: pass. Negeer je een fout, log hem dan op WARNING of hoger, met de reden.
  • Vang Exception af en niet BaseException. BaseException vangt ook KeyboardInterrupt en SystemExit af, en die stoppen het programma bewust.
  • Definieer eigen exceptionklassen voor fouten die aanroepers moeten afhandelen, zoals OrderError doet.

Meer dan 1 fout melden

Python 3.11 en nieuwer kan een ExceptionGroup raisen. Gebruik die als 1 controle meer dan 1 probleem vindt. Handel elk type af met except*.

Veelvoorkomende fouttypes in Python

Alle ingebouwde fouten die een programma kan afhandelen, erven van Exception. Deze tabel toont de Python-fouten die je het vaakst ziet en de eerste controle voor elke fout. KeyboardInterrupt en SystemExit erven van BaseException en niet van Exception. Het zijn geen fouten in je code.

Python-logs naar LogBrew sturen

LogBrewLoggingHandler is een standaard logging-handler. Hij stuurt elk record dat hij accepteert naar LogBrew. De console-handler blijft hetzelfde.
1

Maak een projectsleutel

Log in met de CLI. Maak een project en sla de ingest-sleutel op in een bestand dat alleen de eigenaar kan lezen.
De CLI print de sleutel niet. Gebruik in productie de secretmanager van je platform.
2

Installeer de SDK

Activeer de virtuele omgeving van de applicatie. Installeer daarna het pakket. Het vereist Python 3.10 of nieuwer.
3

Stel de sleutel en de deploymentidentiteit in

De client voegt de service, de omgeving en de release toe aan elk event.
4

Voeg de handler toe

Sla dit bestand op als worker.py. Roep logging.basicConfig() aan voordat je de client maakt. De client voegt een handler toe aan de root logger, en basicConfig() doet niets als de root logger al een handler heeft.
HttpTransport() verstuurt events op de achtergrond, 1 seconde na het eerste event of bij 50 events. client.shutdown() verstuurt de resterende events en sluit de client.
5

Voer het programma uit

De console-output verandert niet. LogBrew ontvangt 1 log-event per record. Dit is het eerste event, zonder de gedeelde runtimecontext.
Primitieve waarden uit extra={...} worden metadata. Het tweede event heeft exceptionName KeyError en exceptionMessage 'seats'. Maak de handler met include_exception_text=True om de volledige tekst van de traceback te versturen.
6

Lees de logs terug

Zie je de logs terug, dan heeft LogBrew ze opgeslagen. Gebruik een leessleutel van je project om te lezen vanuit CI of een coding agent. Zie Je installatie controleren.

Kiezen welke records naar LogBrew gaan

Geef de handler een eigen level om minder records te versturen. De console krijgt nog steeds INFO en hoger.
Python-levels worden LogBrew-levels. De oorspronkelijke naam en het getal van het level blijven in de metadata.

Python-crashes als issues melden

install_process_error_capture(client) meldt niet-afgevangen exceptions in scripts, workers, opstartcode en threads. Elke crash wordt 1 issue met het exceptiontype, het bericht, de stackframes en de gekoppelde oorzaken. Python print de traceback nog steeds en stopt zoals voorheen. Sla dit bestand op als startup.py en voer het uit.
LogBrew ontvangt een issue met de titel FileNotFoundError, het level critical en het mechanisme python.excepthook. De frames bevatten de bestandsnaam, de regel en de functie, maar niet het volledige pad. Een crash in een thread heeft het level error. Voordat Python stopt, wacht de SDK maximaal 2 seconden op de aflevering.
Het issue bevat het exceptionbericht. Zet geen toegangsgegevens of persoonsgegevens in exceptionberichten of logberichten. Zie Vastgelegde gegevens beheren.

Problemen oplossen

Zie Flask-logging voor webapps. Zie Structured logging om een logformaat te kiezen. Zie SDK-integratie voor andere runtimes.