Pythoni logging-moodul: Kuidas logida tõhusalt

1. Mis on Pythoni logging-moodul?

Pythoni logging-moodul on standardne tööriist programmi tööoleku ja veateabe salvestamiseks, mida kasutatakse silumisel ja tööaegsel jälgimisel. Erinevalt print-lausest on logging-moodul multifunktsionaalne ning võimaldab logitasemeid, väljundkohti ja formaate täpselt kontrollida. See võimaldab arendajatel tõhusalt tuvastada programmi anomaaliaid ja olekuid.

Logitasemete tüübid ja kasutusotstarbed

     

  • DEBUG: Üksikasjalik silumisteave. Kasutatakse peamiselt arendusetapis.
  •  

  • INFO: Üldine tööinfo. Kasutatakse normaalse töö kinnitamiseks.
  •  

  • WARNING: Väikesed probleemid ja hoiatused. Ei mõjuta programmi tööd, kuid viitavad potentsiaalsetele probleemidele.
  •  

  • ERROR: Veateade, kui mõni funktsioon ei tööta korralikult. Osutab olukorrale, mis takistab programmi täitmist.
  •  

  • CRITICAL: Kriitiline viga. Osutab fataalsele probleemile, mis takistab programmi kogu täitmise jätkamist.

Logitasemeid sobivalt kasutades on võimalik parandada logist saadava teabe kvaliteeti ning võimaldada tõhusat silumist ja jälgimist.

2. Loggingu põhikasutus

Vaatame logging-mooduli kasutamise põhilisi meetodeid logide väljastamiseks.

import logging

# Määra logitase ja formaat
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')

# Väljasta logid igal tasemel
logging.debug('Silumisteave: Üksikasjalik diagnostikainfo')
logging.info('Teabemärguanne: Normaalse töö kinnitus')
logging.warning('Hoiatusmärguanne: Tähelepanu vajav olek')
logging.error('Veateade: Ilmnes probleem')
logging.critical('Kriitiline märguanne: Süsteemi seiskumine')

logging.basicConfig() abil saab määrata logide väljundkoha (vaikimisi on standardväljund), logitaseme ja formaadi. Ülaltoodud näites on level=logging.DEBUG seatud, mistõttu väljastatakse kõik DEBUG-taseme ja kõrgema taseme logid.

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

3. Logide väljundkoha ja formaadi kohandamine

Samuti on võimalik muuta vaikimisi väljundkohta või kohandada logide formaati. Näiteks logide faili väljastamiseks kasutatakse FileHandlerit.

Faili väljastamine ja formaat

import logging

# Määra failikäitleja
file_handler = logging.FileHandler('app.log')
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)

# Määra logija
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logger.addHandler(file_handler)

# Väljasta logid
logger.debug('Silumisteave faili')
logger.info('Teabemärguanne faili')

Ülaltoodud koodis väljastatakse logid faili app.log, kasutades FileHandlerit. Logimärguanded kirjutatakse vastavalt Formatteriga määratud formaadile.

4. Logifailide rotatsioon

Pikaajalisel tööl on failirotatsioon oluline, et logifailid liiga suureks ei kasvaks. RotatingFileHandleri kasutades saab kontrollida logifailide suurust ja failide arvu.

Näide RotatingFileHandleri kasutusest

import logging
from logging.handlers import RotatingFileHandler

# Määra rotatsioonikäitleja
handler = RotatingFileHandler('app.log', maxBytes=5000, backupCount=3)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)

# Määra logija
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logger.addHandler(handler)

# Väljasta logid
for i in range(100):
    logger.debug(f'Rotatsioonitest {i}')

Selles koodis on maxBytes määranud logifaili maksimaalse suuruse 5000 baidile ja backupCount määranud varufailide arvu 3-le. Kui logifail ületab määratud suuruse, kirjutatakse logid uude faili ja vanemad failid luuakse varukoopiaks.

年収訴求

5. Logitasemepõhine failiväljund

Logide väljastamine erinevatesse failidesse vastavalt konkreetsele logitasemele võib parandada logide loetavust ja analüüsi tõhusust. Selleks kasutatakse kohandatud filtreid ja mitut FileHandlerit.

Näide logitasemepõhisest failiväljundist

import logging

class ErrorFilter(logging.Filter):
    def filter(self, record):
        return record.levelno == logging.ERROR

# Väljasta ERROR-taseme logid eraldi faili
error_handler = logging.FileHandler('error.log')
error_handler.setLevel(logging.ERROR)
error_handler.addFilter(ErrorFilter())
error_handler.setFormatter(formatter)

# Määra logija
logger.addHandler(error_handler)

# Väljasta logid
logger.error('ERROR-taseme logid väljastatakse faili')

Selles näites luuakse ErrorFilter klass, et filtreerida ainult ERROR-taseme logid ja väljastada need faili error.log. Nii saab vealogid eraldi faili salvestada.

6. Parimad tavad ja tähelepanekud

Logide korrektseks kasutamiseks tuleb arvestada järgmiste parimate tavade ja tähelepanekutega.

Logitasemete sobiv kasutamine

     

  • Arenduse ajal kasutage DEBUG taset üksikasjaliku teabe salvestamiseks ja operatsiooni ajal lülitage INFO või WARNING tasemele, et salvestada ainult oluline teave.
  •  

  • Liigne logide väljastus võib põhjustada jõudluse langust, seetõttu salvestage ainult vajalikku teavet.

Logide turvalisus ja privaatsus

     

  • Olge ettevaatlik, et mitte salvestada logidesse isikuandmeid või konfidentsiaalset teavet. Vajadusel on vaja rakendada meetmeid, näiteks andmete maskeerimist.
  •  

  • Seadistage logifailidele sobivad õigused, et vältida volitamata juurdepääsu.

7. Kokkuvõte

logging-moodul on väga kasulik programmi tööoleku tõhusaks salvestamiseks ning abiks silumisel ja operatsioonidel. Logitasemete, väljundkohtade, formaatide ja rotatsiooni õige seadistamine ning programmi tööoleku üksikasjalik mõistmine aitab probleeme varakult tuvastada ja lahendada. Kasutage parimaid tavasid ja rakendage sobivat logihaldust.

侍エンジニア塾