Python Academy · leksjon

Grunnleggende om logging-modulen

Konfigurer loggere, angi nivåer og send ut meldinger på riktig måte.

Leksjon 1 av 413 trinn

Grunnleggende om logging-modulen er en gratis leksjon i Python Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Python Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Python Academy inneholder totalt 4 leksjoner.

Hvorfor logging fremfor print?

logging-modulen tilbyr alvorlighetsnivåer, konfigurerbare utdataområder, tidsstempler og muligheten til å slå av utdata uten kodeendringer.

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")

Loggnivåer

Python definerer fem standardnivåer i stigende alvorlighetsgrad: DEBUG, INFO, WARNING, ERROR, CRITICAL. Bare meldinger på eller over det konfigurerte nivået sendes 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

Hente en logger

Bruk logging.getLogger(__name__) i hver modul. Dette oppretter et hierarki som samsvarer med modulstrukturen.

import logging

logger = logging.getLogger(__name__)

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

Alternativer for basicConfig

basicConfig konfigurerer rotloggeren raskt. Vanlige kwargs er: level, format, filename, filemode.

import logging

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

Felt i loggformatet

Viktige formatfelt: %(levelname)s, %(name)s, %(message)s, %(asctime)s, %(filename)s, %(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")

Logge unntak

Bruk logger.exception() i en except-blokk for å logge meldingen og hele tracebacken.

import logging
logger = logging.getLogger(__name__)

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

Ekstra kontekst med extra=

Send en dict som extra= for å legge til egendefinerte felt i loggoppføringen.

import logging
logger = logging.getLogger(__name__)

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

Forsinket strengformatering

Send formateringsargumentene separat – ikke forhåndsformater strengene. Da unngår De kostnaden ved å bygge strengen når meldingen filtreres 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))

Deaktivere logging

Kall logging.disable(level) for å undertrykke alle meldinger på eller under dette nivået globalt – nyttig i tester.

import logging

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

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

Loggerhierarki

Loggernavn bruker punktum som skilletegn. Underordnede loggere videresender til overordnede loggere med mindre propagate=False.

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

Rotloggeren

Rotloggeren (fra for eksempel logging.warning()) er opphavet til alle loggere. Konfigurer den med basicConfig eller ved å legge til handlere direkte.

import logging

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

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

Hurtigsjekk

Hvilken logging-metode bør De bruke i en except-blokk for automatisk å ta med hele tracebacken?

Oppsummering

Bruk navngitte loggere med getLogger(__name__), konfigurer via basicConfig, send formateringsargumenter uten forhåndsformatering og bruk logger.exception() for feiltracebacker. Loggerne danner et hierarki med rotloggeren som utgangspunkt.

Gratis å komme i gang

Lær deg Python med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
76
Leksjoner
320

Ofte stilte spørsmål

Er leksjonen «Grunnleggende om logging-modulen» gratis?

Ja – hele teksten i «Grunnleggende om logging-modulen» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Python Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Python Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Grunnleggende om logging-modulen»?

Konfigurer loggere, angi nivåer og send ut meldinger på riktig måte. Du øver på Python Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Python Academy?

Ingen tidligere erfaring er nødvendig. Python Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «Grunnleggende om logging-modulen»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Python Academy-leksjonen?

Ja. Alle Python Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Grunnleggende om logging-modulen
  2. Håndterere, formatterere og filtre
  3. Strukturert logging
  4. Feilsøking med pdb
← Tilbake til Python Academy