Python Academy · Lektion

Grunderna i modulen logging

Konfigurera loggers, ange nivåer och generera meddelanden på rätt sätt.

Lektion 1 av 413 steg

Grunderna i modulen logging är en gratis lektion i Python Academy på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Python Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Python Academy innehåller totalt 4 lektioner.

Varför logging i stället för print?

Modulen logging tillhandahåller allvarlighetsnivåer, konfigurerbara utdatamål, tidsstämplar och möjligheten att tysta utdata utan kodändringar.

import logging

logging.basicConfig(level=logging.DEBUG)
logging.debug("debug message")
logging.info("info message")
logging.warning("warning message")
logging.error("error message")
logging.critical("critical message")

Loggningsnivåer

Python definierar fem standardnivåer i stigande allvarlighetsgrad: DEBUG, INFO, WARNING, ERROR, CRITICAL. Endast meddelanden på eller över den konfigurerade nivån skickas ut.

import logging
# Numeric values:
# DEBUG    = 10
# INFO     = 20
# WARNING  = 30
# ERROR    = 40
# CRITICAL = 50

logging.basicConfig(level=logging.WARNING)
logging.debug("hidden")   # not shown
logging.warning("shown")  # shown

Hämta en logger

Använd logging.getLogger(__name__) i varje modul. Då skapas en hierarki som motsvarar modulstrukturen.

import logging

logger = logging.getLogger(__name__)

def process(data):
    logger.info("Processing %d items", len(data))
    return [x * 2 for x in data]

basicConfig-alternativ

basicConfig konfigurerar snabbt root-loggaren. Vanliga kwargs är level, format, filename och filemode.

import logging

logging.basicConfig(
    level=logging.DEBUG,
    format="%(asctime)s %(levelname)s %(name)s — %(message)s",
    datefmt="%Y-%m-%d %H:%M:%S",
)

Fält i loggformat

Viktiga formatfält är %(levelname)s, %(name)s, %(message)s, %(asctime)s, %(filename)s och %(lineno)d.

import logging

fmt = "%(asctime)s | %(levelname)-8s | %(name)s:%(lineno)d | %(message)s"
logging.basicConfig(level=logging.DEBUG, format=fmt)
logging.info("Server started on port 8080")

Logga undantag

Använd logger.exception() i ett except-block för att logga meddelandet och hela tracebacken.

import logging
logger = logging.getLogger(__name__)

try:
    1 / 0
except ZeroDivisionError:
    logger.exception("Division failed")
    # Logs message + traceback automatically

Extra kontext med extra=

Skicka en ordlista som extra= för att lägga till anpassade fält i loggposten.

import logging
logger = logging.getLogger(__name__)

logging.basicConfig(
    format="%(asctime)s %(levelname)s [%(user)s] %(message)s"
)
logger.info("Login successful", extra={"user": "alice"})

Sen formatering av strängar

Skicka formatargumenten separat – förformatera inte strängar. Då undviker du kostnaden för att bygga strängen när meddelandet filtreras bort.

import logging
logger = logging.getLogger(__name__)

# BAD (always builds the string):
logger.debug(f"Processing {len(data)} items")

# GOOD (only builds if DEBUG is enabled):
logger.debug("Processing %d items", len(data))

Inaktivera loggning

Anropa logging.disable(level) för att globalt undertrycka alla meddelanden upp till den nivån – användbart i tester.

import logging

logging.disable(logging.CRITICAL)  # suppress everything
# All log calls now silently do nothing

logging.disable(logging.NOTSET)    # re-enable

Loggerhierarki

Loggernamn använder punkter som avgränsare. Underordnade loggers skickar vidare poster till överordnade loggers om inte propagate=False har angetts.

import logging

parent = logging.getLogger("myapp")
child = logging.getLogger("myapp.database")

# child propagates to parent by default
child.warning("DB slow")  # also appears in myapp's handlers

Root-loggaren

Root-loggaren (från exempelvis logging.warning()) är alla loggers överordnade. Konfigurera den med basicConfig eller genom att lägga till handlers direkt.

import logging

root = logging.getLogger()  # root logger
root.setLevel(logging.DEBUG)

handler = logging.StreamHandler()
root.addHandler(handler)

Snabbkontroll

Vilken loggningsmetod ska du använda i ett except-block för att automatiskt inkludera hela tracebacken?

Sammanfattning

Använd namngivna loggers med getLogger(__name__), konfigurera via basicConfig, skicka formatargument på ett sent sätt och använd logger.exception() för felens tracebacker. Loggers bildar en hierarki med root-loggaren som rot.

Gratis att börja

Lär dig Python med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
76
Lektioner
320

Vanliga frågor

Är lektionen ”Grunderna i modulen logging” gratis?

Ja – hela texten till ”Grunderna i modulen logging” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Python Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Python Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Grunderna i modulen logging”?

Konfigurera loggers, ange nivåer och generera meddelanden på rätt sätt. Ni övar på Python Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Python Academy?

Du behöver inga förkunskaper. Utbildningen i Python Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”Grunderna i modulen logging”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Python Academy-lektionen?

Ja. Varje Python Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Grunderna i modulen logging
  2. Handlers, formatters och filter
  3. Strukturerad loggning
  4. Felsökning med pdb
← Tillbaka till Python Academy