Python Academy · Oppitunti

logging-moduulin perusteet

Määrittäkää lokittimet, asettakaa tasot ja tuottakaa viestejä asianmukaisesti.

Oppitunti 1/413 vaihetta

logging-moduulin perusteet on ilmainen Python Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Python Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Python Academy-kurssilla on yhteensä 4 oppituntia.

Miksi logging eikä print?

logging-moduuli tarjoaa vakavuustasot, määritettävät tulostuskohteet, aikaleimat sekä mahdollisuuden vaimentaa tuloste ilman koodimuutoksia.

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

Lokitasot

Python määrittelee viisi vakiotasoa vakavuuden kasvaessa: DEBUG, INFO, WARNING, ERROR ja CRITICAL. Vain määritettyä tasoa vastaavat tai sitä vakavammat viestit välitetään.

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

Lokittimen hakeminen

Käyttäkää jokaisessa moduulissa kutsua logging.getLogger(__name__). Se luo moduulirakennetta vastaavan hierarkian.

import logging

logger = logging.getLogger(__name__)

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

basicConfig-asetukset

basicConfig määrittää juurilokittimen nopeasti. Yleisiä avainsana-argumentteja ovat level, format, filename ja filemode.

import logging

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

Lokimuodon kentät

Tärkeitä muotokenttiä ovat %(levelname)s, %(name)s, %(message)s, %(asctime)s, %(filename)s ja %(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")

Poikkeusten lokitus

Käyttäkää logger.exception()-metodia except-lohkon sisällä, jotta viesti JA täydellinen pinonjäljitys kirjataan.

import logging
logger = logging.getLogger(__name__)

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

Lisäkonteksti extra=-määritteellä

Välittäkää sanakirja muodossa extra=, jotta lokitietueeseen lisätään mukautettuja kenttiä.

import logging
logger = logging.getLogger(__name__)

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

Merkkijonojen laiska muotoilu

Välittäkää muotoiluargumentit erillään — älkää muotoilko merkkijonoja etukäteen. Näin vältätte merkkijonon muodostamisen kustannukset, kun viesti suodatetaan pois.

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

Lokituksen poistaminen käytöstä

Kutsukaa logging.disable(level)-funktiota vaimentaaksenne maailmanlaajuisesti kaikki kyseiseen tasoon asti olevat viestit — tämä on hyödyllistä testeissä.

import logging

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

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

Lokittimien hierarkia

Lokittimien nimissä käytetään pisteitä erottimina. Lapsilokittimet välittävät viestit ylälokittimille, ellei asetuksena ole 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

Juurilokitin

Juurilokitin, jota esimerkiksi logging.warning() käyttää, on kaikkien lokittimien esi-isä. Määrittäkää se basicConfig-funktiolla tai lisäämällä käsittelijöitä suoraan.

import logging

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

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

Pikatarkistus

Mitä lokitusmetodia tulee käyttää except-lohkon sisällä, jotta täydellinen pinonjäljitys sisällytetään automaattisesti?

Kertaus

Käyttäkää nimettyjä lokittimia kutsulla getLogger(__name__), määrittäkää ne basicConfig-funktiolla, välittäkää muotoiluargumentit laiskasti ja käyttäkää logger.exception()-metodia virheiden pinonjäljityksiin. Lokittimet muodostavat juurilokittimeen perustuvan hierarkian.

Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
76
Oppitunnit
320

Usein kysytyt kysymykset

Onko oppitunti ”logging-moduulin perusteet” ilmainen?

Kyllä – oppitunnin ”logging-moduulin perusteet” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Python Academy-kurssin, päivitä CoddyKit PROhon. Python Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”logging-moduulin perusteet”?

Määrittäkää lokittimet, asettakaa tasot ja tuottakaa viestejä asianmukaisesti. Harjoittelet Python Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Python Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Python Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”logging-moduulin perusteet”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Python Academy-oppitunnilla?

Kyllä. Jokainen Python Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. logging-moduulin perusteet
  2. Käsittelijät, muotoilijat ja suodattimet
  3. Rakenteinen lokitus
  4. Virheenkorjaus pdb:llä
← Takaisin: Python Academy