Ga naar hoofdinhoud

Logging in Python Tutorial

Leer de basisprincipes van Logging in Python.
Bijgewerkt 2 okt 2026  · 9 min lezen

Verken met AI

ChatGPTClaudePerplexity

Als je net begint met Python en meer wilt leren, volg dan DataCamp’s cursus Introduction to Data Science in Python.

Niveaus van logging
Niveaus van logging

In het algemeen is logging een manier om een logboek bij te houden dat wordt gegenereerd door een computerprogramma. Een logbestand bevat meestal een reeks records van gebeurtenissen die zich voordoen in je code (bijvoorbeeld een Python-code) of in een besturingssysteem. Deze gebeurtenissen of berichten worden naar een logbestand geschreven; een bericht of gebeurtenis kan ook communicatie tussen verschillende gebruikers zijn.

Het hangt meestal van de ontwikkelaars af hoe ze logs willen genereren. Misschien willen ze elke bewerking van een applicatie die ze hebben ontwikkeld loggen, alleen loggen wanneer er een fout optreedt, of essentiële acties van een gebruiker monitoren en vastleggen. Een essentiële actie kan bijvoorbeeld zijn om te controleren door welke eindgebruiker of vanaf welk IP-adres de applicatie of de server is benaderd. En als het om een mislukte poging ging, kan de ontwikkelaar de logs raadplegen en betere inzichten krijgen dan alleen een stacktrace.

Een goed voorbeeld is wanneer je op Linux iets probeert te installeren als sudo-gebruiker terwijl je dat niet bent. Je ziet dan het bericht "Xyz is not in the sudoers file. This incident will be reported", dat in een logbestand wordt geschreven.

Het goede nieuws is dat Python een ingebouwde loggingmodule heeft die je direct kunt gebruiken zonder installatie.

Hoe verschilt logging van een Print-functie?

Logging lijkt qua idee op een Print Function. Een print-functie mist echter veel informatie die voor een ontwikkelaar nuttig kan zijn. Logging kan daarentegen tijdstempels en het regelnr. vastleggen waarop de fout optrad. Het kan fouten of andere informatie naar bestanden, sockets, enz. schrijven, en het biedt je vijf niveaus van ernst op basis waarvan je je logging kunt onderscheiden.

Vijf niveaus van logging zoals hier weergegeven, zijn:

  • Debug (10): Handig voor het diagnosticeren van problemen in de code.

  • Info (20): Kan dienen als bevestiging dat er geen bugs in de code zitten. Een goed use-case voor Info-level logging is de voortgang van het trainen van een machinelearningmodel.

  • Warning (30): Wijst op een probleem dat in de toekomst kan optreden. Bijvoorbeeld een waarschuwing voor een module die mogelijk wordt beëindigd, of een melding dat het RAM-geheugen bijna vol is.

  • Error (40): Een serieuze bug in de code, zoals een syntaxfout, out-of-memory-fout of exceptions.

  • Critical (50): Een fout waardoor het programma mogelijk stopt met functioneren of abrupt kan afsluiten.

Genoeg theorie, toch?

Laten we nu bekijken hoe je logging in Python-code kunt implementeren.

Maar eerst: hier is de tabel met loggingattributen. Je zult enkele van de onderstaande loggingattributen in deze tutorial gebruiken.

tabel met loggingattributen
Logging Attributes</a
import logging

Nu roep je de methode basicConfig() aan, die je helpt een basisconfiguratie te maken zodat het loggingsysteem soepel werkt.

Hiermee kun je de volgende parameters instellen:

  • de ernst van de logging: de vijf niveaus van logging.
  • de gebeurtenissen in een bestand loggen.
  • alleen de huidige logs vastleggen door de oude te overschrijven via filemode.
  • het bestandsformaat waarin logs worden opgeslagen.

Onthoud dat de methode basicConfig() optioneel is, en dat je die eventueel kunt overslaan.

logging.basicConfig()

Laten we nu de vijf ernstniveaus aanroepen.

logging.debug("A Debug Logging Message")
logging.info("A Info Logging Message")
logging.warning("A Warning Logging Message")
WARNING:root:A Warning Logging Message
logging.error("An Error Logging Message")
ERROR:root:An Error Logging Message
logging.critical("A Critical Logging Message")
CRITICAL:root:A Critical Logging Message

Zoals je in de bovenstaande outputs ziet, zijn alleen de berichten met een ernstniveau groter dan 20 gelogd, omdat dat de standaardconfiguratie van logging in Python is.

Zoals hierboven besproken, kun je de ernstniveaus aanpassen met de methode basicConfig(). Hier verander je het ernstniveau naar 20, wat betekent dat logniveaus met een ernst groter dan 10 worden gelogd.

Let op: Start de kernel opnieuw voordat je de onderstaande cellen uitvoert, om de juiste output te zien.

import logging
logging.basicConfig(level=logging.INFO)
logging.debug("A Debug Logging Message")
logging.info("A Info Logging Message")
INFO:root:A Info Logging Message
logging.warning("A Warning Logging Message")
WARNING:root:A Warning Logging Message
logging.error("An Error Logging Message")
ERROR:root:An Error Logging Message
logging.critical("A Critical Logging Message")
CRITICAL:root:A Critical Logging Message

Laten we nu de bovenstaande outputs in een logbestand vastleggen. Hiervoor gebruik je de methode basicConfig().

import logging
logging.basicConfig(level = logging.INFO, filename = 'datacamp.log')
logging.debug("A Debug Logging Message")
logging.info("A Info Logging Message")
logging.warning("A Warning Logging Message")
logging.error("An Error Logging Message")
logging.critical("A Critical Logging Message")
output

Zoals je ziet, worden de logs nu gegenereerd in het logbestand datacamp.log. Als je de bovenstaande cellen meerdere keren uitvoert, zul je merken dat de logs telkens aan het logbestand worden toegevoegd. Standaard staat het bestand in append-modus.

output

Je kunt het sleutelwoord filemode gebruiken om te voorkomen dat het logbestand meerdere kopieën van logs bevat, oftewel de append-modus. De filemode kan worden gewijzigd naar write-modus, die de vorige logs overschrijft en alleen de huidige bewaart. Omdat de filemode is ingesteld op w, betekent dit dat het logbestand elke keer dat basicConfig() wordt uitgevoerd, in write mode wordt geopend, wat het bestand uiteindelijk zal overschrijven.

De filemode-functionaliteit in logging lijkt op de standaard bestandsafhandeling die Python biedt.

import logging
logging.basicConfig(level = logging.INFO, filename = 'datacamp.log', filemode = 'w')
logging.debug("A Debug Logging Message")
logging.info("A Info Logging Message")
logging.warning("A Warning Logging Message")
logging.error("An Error Logging Message")
logging.critical("A Critical Logging Message")

Laten we de bovenstaande code meerdere keren uitvoeren. Je zult merken dat dit keer alleen de huidige logregels worden opgeslagen en de vorige worden overschreven, zoals hieronder weergegeven.

output

Laten we naar nog wat loggingattributen kijken, zoals datum, tijd en het regelnr. waarop een waarschuwing of fout is gegenereerd. Je zult het nu waarschijnlijk met me eens zijn dat dit allemaal voordelen zijn ten opzichte van een eenvoudige print-functie en dat logging veel meer kan dan alleen printen.

Om dit te bereiken geef je de loggingattributen asctime en lineno mee. Ook geef je het attribuut message mee, dat een placeholder is voor het bericht dat je voor de logs wilt weergeven. Al deze attributen worden doorgegeven aan de methode format.

import logging
logging.basicConfig(format='Date-Time : %(asctime)s : Line No. : %(lineno)d - %(message)s', \
                    level = logging.DEBUG)
logging.debug("A Debug Logging Message")
logging.info("A Info Logging Message")
logging.warning("A Warning Logging Message")
logging.error("An Error Logging Message")
logging.critical("A Critical Logging Message")
Date-Time : 2020-03-18 23:58:12,429 : Line No. : 1 - A Debug Logging Message
Date-Time : 2020-03-18 23:58:12,436 : Line No. : 2 - A Info Logging Message
Date-Time : 2020-03-18 23:58:12,437 : Line No. : 3 - A Warning Logging Message
Date-Time : 2020-03-18 23:58:12,440 : Line No. : 4 - An Error Logging Message
Date-Time : 2020-03-18 23:58:12,441 : Line No. : 5 - A Critical Logging Message

Laten we de definities van elk attribuut bekijken, rechtstreeks uit deze tabel.

  • asctime: Menselijk leesbare tijd waarop de LogRecord is gegenereerd. Standaard heeft dit de vorm 2020-03-18 22:24:42,670 (de getallen na de komma zijn milliseconden). Aangezien dit attribuut een string is, gebruik je erna het sleutelwoord s.

  • lineno: Regelnr. in de broncode waar de loggingaanroep is gedaan. Omdat dit attribuut een geheel getal is, gebruik je erna het sleutelwoord d.

  • message: Het gelogde bericht, berekend als msg % args. Dit wordt ingesteld wanneer Formatter.format() wordt aangeroepen. Als je dit attribuut niet opgeeft bij het gebruik van de parameter format(), worden de berichten die je wilt loggen niet gegenereerd. Net als bij het message-attribuut gebruik je s omdat het een string is.

  • funcName: Geeft de module- of functienaam weer waarin de log is gegenereerd. Dit is handig wanneer je veel functies in je code hebt en de logs wilt scheiden op basis van de functie of methode waartoe ze behoren.

Laten we een eenvoudig voorbeeld nemen en zien hoe je de logging debug-functie kunt inzetten in plaats van de print-functie.

import logging

logging.basicConfig(format='%(asctime)s :: %(levelname)s :: %(funcName)s :: %(lineno)d \
:: %(message)s', level = logging.INFO)

def addition(x, y):
    add = x + y
    return add


def subtract(x, y):
    sub = x - y
    return sub


def multiply(x, y):
    mul = x * y
    return mul


def divide(x, y):
    div = x / y
    return div

def exponent(x, y):
    exp = x ** y
    return exp


num1 = 20
num2 = 2

def main():
    add_result = addition(num1, num2)
    logging.info('Add: {} + {} = {}'.format(num1, num2, add_result))

    sub_result = subtract(num1, num2)
    logging.info('Sub: {} - {} = {}'.format(num1, num2, sub_result))

    mul_result = multiply(num1, num2)
    logging.info('Mul: {} * {} = {}'.format(num1, num2, mul_result))

    div_result = divide(num1, num2)
    logging.info('Div: {} / {} = {}'.format(num1, num2, div_result))

    exp_result = exponent(num1, num2)
    logging.info('Exp: {} ** {} = {}'.format(num1, num2, exp_result))


main()
2020-03-19 00:01:27,372 :: INFO :: main :: 35 :: Add: 20 + 2 = 22
2020-03-19 00:01:27,376 :: INFO :: main :: 38 :: Sub: 20 - 2 = 18
2020-03-19 00:01:27,377 :: INFO :: main :: 41 :: Mul: 20 * 2 = 40
2020-03-19 00:01:27,378 :: INFO :: main :: 44 :: Div: 20 / 2 = 10.0
2020-03-19 00:01:27,379 :: INFO :: main :: 47 :: Exp: 20 ** 2 = 400

Conclusie

Gefeliciteerd met het afronden van de tutorial.

Je kunt andere loggingattributen uitproberen en ontdekken hoe je die in je code kunt benutten.

Stel gerust vragen over deze tutorial in de reacties hieronder.

Als je net begint met Python en meer wilt leren, volg dan DataCamp’s cursus Introduction to Data Science in Python.

Onderwerpen
Python

Python-cursussen

Cursus

Introductie tot Python

4 uur
7.1M
Leer de basis van data-analyse met Python in 4 uur. Deze online cursus laat je kennismaken met de Python-interface en populaire pakketten.
Bekijk detailsRight Arrow
Start Cursus
Meer bekijkenRight Arrow
Gerelateerd

blog

AI vanaf nul leren in 2026: een complete gids van de experts

Ontdek alles wat je moet weten om in 2026 AI te leren, van tips om te beginnen tot handige resources en inzichten van industrie-experts.
Adel Nehme's photo

Adel Nehme

15 min

Meer BekijkenMeer Bekijken