logging-moduulin perusteet
Määrittäkää lokittimet, asettakaa tasot ja tuottakaa viestejä asianmukaisesti.
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") # shownLokittimen 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 automaticallyLisä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-enableLokittimien 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 handlersJuurilokitin
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.
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
- logging-moduulin perusteet
- Käsittelijät, muotoilijat ja suodattimet
- Rakenteinen lokitus
- Virheenkorjaus pdb:llä