Täielik Python’i logimise juhend: algajalt edasijõudnutele

1. Täielik juhend Pythonis logimise kohta | Silumisest tootmisse

Kui arendad programme Pythonis, on logimine oluline vigade tuvastamiseks ja käitumise kontrollimiseks.
See artikkel selgitab kõike alates põhilistest kontseptsioonidest kuni praktiliste tehnikateni, et Python’i algajad saaksid logimist tõhusalt kasutada.

2. Mis on Python’i logimine? Põhikontseptsioonid ja miks see vajalik on

Logimine on mehhanism, millega salvestatakse teavet ja vigu, mis tekivad programmi käivitamisel. Logimise korrektne kasutamine pakub järgmisi eeliseid:

Logimise eelised

  1. Lihtsam veaanalüüs – aitab täpselt määrata, kus vead tekkisid ja mis need põhjustasid.
  2. Programmi käitumise jälgimine – näed, millised osad töötavad õigesti ja kus esinevad probleemid.
  3. Operatiivse monitooringu võimaldamine – loob aluse süsteemi tervise pidevaks jälgimiseks tootmiskeskkonnas.

Erinevus print()-ga

Algajate poolt sageli kasutatav print()‑funktsioon on mugav silumiseks, kuid tõsise arenduse puhul on sellel järgmised piirangud:

  • Ei saa paindlikult määrata väljundi sihtkohta (nt failid või välised teenused).
  • Ei võimalda hallata logimise tasemeid (olukordade tõsidusastmeid).

Neid probleeme saab lahendada, kasutades Python’i standardset logging‑moodulit.

RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

3. Kuidas alustada logimisega Python’i sisseehitatud logging‑mooduliga

Python sisaldab sisseehitatud logging‑moodulit, mis teeb logide väljastamise lihtsaks. See jaotis selgitab põhilist kasutamist.

Logimise tasemed ülevaade

logging‑moodul võimaldab määrata “logimise taseme”, mis näitab logisõnumi tõsidust. Peamised tasemed on:

  • DEBUG – silumisinfo. Kasulik arendamise ajal.
  • INFO – informatiivsed sõnumid. Näitab programmi edenemist.
  • WARNING – hoiatused. Näitab võimalikke probleeme.
  • ERROR – vead. Näitab, et programm ei tööta korrektselt.
  • CRITICAL – kriitilised vead. Näitab süsteemi kokkujooksmist.

Põhiline kasutamine

Allpool on lihtne näide logimise kasutamisest logging‑mooduliga.

import logging

# Basic logging configuration
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

# Example output for each log level
logging.debug('This is debug information.')
logging.info('This is an info message.')
logging.warning('This is a warning message.')
logging.error('This is an error message.')
logging.critical('This is a critical error message.')

Koodi selgitus

  • basicConfig – konfigureerib logimise väljundi. Parameeter level võimaldab määrata minimaalset logimise taset, mis väljastatakse.
  • Vormingu määratlus – parameeter format võimaldab kohandada logisõnumite vormingut.
  • Näide: %(asctime)s tähistab ajatemplit, %(levelname)s logimise taset ja %(message)s sõnumi sisu.

4. Kuidas väljastada logid failidesse ja konsooli Pythonis

Logisid saab salvestada mitte ainult ekraanile, vaid ka failidesse või välistes süsteemidesse. See jaotis selgitab, kuidas konfigureerida erinevaid väljundi sihtkohti.

Logimine konsooli

logging‑mooduli vaikeseaded väljastavad logid konsooli.

import logging

logging.basicConfig(level=logging.INFO)
logging.info('Example of logging to the console')

Logimine faili

Logide salvestamiseks faili tuleb basicConfig‑funktsioonis määrata parameeter filename.

import logging

logging.basicConfig(filename='app.log', level=logging.INFO, format='%(asctime)s - %(message)s')
logging.info('This is an example of logging to a file.')

Logimine nii konsooli kui ka faili

Kui konfigureerid mitu väljundi sihtkohta, kasuta logging‑mooduli handler‑eid.

import logging

# Create a logger
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)

# Console handler
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)

# File handler
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.INFO)

# Configure the handler format
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)

# Add handlers to the logger
logger.addHandler(console_handler)
logger.addHandler(file_handler)

logger.info('Example log that will be output to both the console and the file.')

5. Efektiivsed logimise tehnikad Python projektides

See jaotis tutvustab logimise parimaid tavasid, mis on kasulikud reaalses maailmas projektides. Õpi tehnikaid tõhusaks silumiseks ja logihalduse parandamiseks.

Järjekindel logimise konfiguratsioon

Suuremahulistes projektides on järjekindel logimise konfiguratsioon oluline. Kui mitu moodulit või meeskonnaliiget koostööd teevad, muudab ühtsete vormingute ja logitasemete seadistamine analüüsi ja tõrkeotsingu lihtsamaks.
Allpool on näide järjekindlast logimise konfiguratsioonist.

import logging

# Common logging configuration function
def setup_logger(name, log_file, level=logging.INFO):
    handler = logging.FileHandler(log_file)
    handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))

    logger = logging.getLogger(name)
    logger.setLevel(level)
    logger.addHandler(handler)
    return logger

# Create loggers for each module
app_logger = setup_logger('app_logger', 'app.log')
db_logger = setup_logger('db_logger', 'db.log')

# Example of log output
app_logger.info('Application log message')
db_logger.error('Database error message')

Vea käsitlemise ja logimise kombineerimine

Vea käsitlemisel (erindite käsitlemisel) võimaldab korralik logimine teavet kiiresti mõista probleemide üksikasju.
Allpool on näide logimisest, kui erind tekib.

import logging

logging.basicConfig(filename='error.log', level=logging.ERROR, format='%(asctime)s - %(levelname)s - %(message)s')

try:
    # Example code that raises an error
    1 / 0
except ZeroDivisionError as e:
    logging.error(f'A division-by-zero error occurred: {e}')

Konteksti teabe lisamine logisõnumitesse

Sõltuvalt projektist võimaldab logisõnumitesse lisada täiendavat konteksti teavet (nt kasutaja ID, tehingu ID) üksikasjalikumat analüüsi.

import logging

logging.basicConfig(filename='context.log', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

user_id = 12345
transaction_id = 'txn_001'

logging.info(f'User ID: {user_id}, Transaction ID: {transaction_id} - Operation succeeded.')

Õige logifiltreerimine

Kui genereeritakse suures koguses logisid, on tõhus kasutada filtreerimist, et väljastada ainult vajalikud logid. Allpool on näide kohandatud filtrist.

import logging

class DebugFilter(logging.Filter):
    def filter(self, record):
        return record.levelno == logging.DEBUG

logger = logging.getLogger('filtered_logger')
handler = logging.StreamHandler()
handler.addFilter(DebugFilter())

logger.addHandler(handler)
logger.setLevel(logging.DEBUG)

logger.debug('This is a debug log.')
logger.info('This will not be displayed.')

6. Kolm soovitatud teeki Python logimise täiustamiseks

Lisaks Pythoni sisseehitatud logging moodulile on mitmeid kasulikke logimise teeke. See jaotis toob esile kolm eriti populaarset.

Loguru: Lihtne logimise teek algajatele

Funktsioonid:

  • Lihtne paigaldus ja seadistamine.
  • Intuitiivsem süntaks kui standardne logging.

Paigaldus:

pip install loguru

Põhiline kasutamine:

from loguru import logger

logger.info('This is log output using Loguru.')
logger.error('Error messages can be logged easily, too.')

Logzero: Kergekaaluline, lihtsalt kasutatav logimise teek

Omadused:

  • Kergesti kohandatav.
  • Sisseehitatud logi rotatsioon.

Paigaldus:

pip install logzero

Põhiline kasutamine:

from logzero import logger

logger.info('Log output using Logzero')
logger.warning('This is a warning message.')

Structlog: Teek, mis on spetsialiseerunud struktureeritud logimisele

Omadused:

  • Väljastab logid kergesti JSON-formaadis.
  • Sobib hästi jaotatud süsteemidele ja pilvkeskkondadele.

Paigaldus:

pip install structlog

Põhiline kasutamine:

import structlog

logger = structlog.get_logger()
logger.info('event', user='12345', action='login')

7. Pythoni logimise küsimuste lahendamine!

K1. Miks logid ei väljasta?

Vastus: Kontrollige, kas logi tase on sobivalt seatud. Vaikimisi väljastatakse ainult WARNING taseme või kõrgema logid.

K2. Mis siis, kui logifail kasvab liiga suureks?

Vastus: Saate kasutada RotatingFileHandler logifailide rotatsiooniks, kui need saavutavad teatud suuruse.

K3. Kuidas valida kolmanda osapoole teeke?

Vastus: Valige oma projekti suuruse ja nõuete põhjal. Väikeste projektide jaoks sobib Loguru; kui vajate struktureeritud logimist, on Structlog sobivam.

8. Valda Pythoni logimist arendusefektiivsuse tõstmiseks

See artikkel katab kõik alates Pythoni logimise põhitõdedest kuni arenenud tehnikate ja kasulike kolmanda osapoole teekideni. Sobiv logimine võib oluliselt parandada silutamisefektiivsust ja süsteemi jälgimise täpsust. Proovige alustada juba täna!

RUNTEQ(ランテック)|超実戦型エンジニア育成スクール