Grunderna i modulen logging
Konfigurera loggers, ange nivåer och generera meddelanden på rätt sätt.
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") # shownHä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 automaticallyExtra 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-enableLoggerhierarki
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 handlersRoot-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.
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
- Grunderna i modulen logging
- Handlers, formatters och filter
- Strukturerad loggning
- Felsökning med pdb