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.
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 FileHandler
it.
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 FileHandler
it. Logimärguanded kirjutatakse vastavalt Formatter
iga määratud formaadile.
4. Logifailide rotatsioon
Pikaajalisel tööl on failirotatsioon oluline, et logifailid liiga suureks ei kasvaks. RotatingFileHandler
i kasutades saab kontrollida logifailide suurust ja failide arvu.
Näide RotatingFileHandler
i 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 FileHandler
it.
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ülitageINFO
võiWARNING
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.