Kumpletong Gabay sa Python Logging: Basic at Advanced

1. Ano ang logging module ng Python

Sa Python, ang logging module ay isang pamantayang kasangkapan para magtala ng katayuan ng pagpapatakbo ng programa at impormasyon tungkol sa mga error, at ginagamit para sa debugging at monitoring sa oras ng operasyon. Ang kaibhan nito sa print statement ay na ang logging module ay maraming kakayahan at nagbibigay-daan sa masusing kontrol sa antas ng log, destinasyon ng output, at format. Dahil dito, nagagawang mahusay ng mga developer na matukoy at maunawaan ang mga aberya at kalagayan ng programa.

Mga uri at gamit ng mga antas ng log

  • DEBUG: Detalyadong impormasyon sa debugging. Kadalasang ginagamit sa yugto ng development.
  • INFO: Pangkalahatang impormasyon sa pagpapatakbo. Ginagamit para sa pagsuri na normal ang pagtakbo.
  • WARNING: Mga banayad na problema o paalala. Hindi direktang nakaaapekto sa pagtakbo ng programa, ngunit nagpapahiwatig ng potensyal na problema.
  • ERROR: Mensahe ng error kapag may ilang feature na hindi gumagana nang maayos. Nagpapahiwatig ng sitwasyong humahadlang sa pagpapatakbo ng programa.
  • CRITICAL: Malubhang error. Nagpapahiwatig ng nakamamatay na problema kung saan hindi na maipagpapatuloy ang pagpapatakbo ng buong programa.
Sa wastong paggamit ng bawat antas ng log, mapapahusay ang kalidad ng impormasyong nakukuha mula sa mga log at magiging mas episyente ang debugging at monitoring.

2. Pangunahing paggamit ng logging

logging module ang gagamitin para tingnan ang pangunahing paraan ng paglalabas ng log.
import logging

# Itakda ang antas ng log at ang format
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')

# Paglalabas ng log sa bawat antas
logging.debug('Impormasyong debug: detalyadong impormasyong pang-diagnostiko')
logging.info('Mensahe ng impormasyon: kumpirmasyon ng normal na paggana')
logging.warning('Mensahe ng babala: kalagayang nangangailangan ng pag-iingat')
logging.error('Mensahe ng error: may naganap na problema')
logging.critical('Mensahe ng kritikal: pagtigil ng sistema')
Sa logging.basicConfig(), itinatakda ang destinasyon ng output ng log (default ay standard output), ang antas ng log, at ang format. Sa halimbawa sa itaas, dahil nakatakda sa level=logging.DEBUG, ilalabas ang lahat ng log na nasa antas na DEBUG o mas mataas.
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

3. Pag-customize ng destinasyon ng output at format ng log

Maaari ring baguhin ang default na destinasyon ng output at i-customize ang format ng log. Halimbawa, upang i-output ang log sa isang file, gamitin ang FileHandler.

Output sa file at format

import logging

# Pag-configure ng file handler
file_handler = logging.FileHandler('app.log')
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)

# Pag-configure ng logger
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logger.addHandler(file_handler)

# Output ng log
logger.debug('Impormasyong debug sa file')
logger.info('Mensaheng impormasyon sa file')
Sa code sa itaas, ginagamit ang FileHandler upang i-output ang log sa app.log. Batay sa format na tinukoy ng Formatter, isinusulat ang mga mensahe ng log.

4. Pag-rotate ng mga file ng log

Sa pangmatagalang operasyon, mahalaga ang pag-rotate ng mga file ng log para hindi masyadong lumaki ang mga ito. Kapag gumamit ka ng RotatingFileHandler, maaari mong kontrolin ang laki at bilang ng mga file ng log.

RotatingFileHandler halimbawa ng paggamit

import logging
from logging.handlers import RotatingFileHandler

# Pag-configure ng rotation handler
handler = RotatingFileHandler('app.log', maxBytes=5000, backupCount=3)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)

# Pag-configure ng logger
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logger.addHandler(handler)

# Pag-output ng log
for i in range(100):
    logger.debug(f'Pagsubok sa pag-rotate {i}')
Sa code na ito, itinatakda ng maxBytes ang pinakamataas na laki ng log file sa 5000 byte, at itinatakda ng backupCount ang bilang ng mga backup file sa 3. Kapag lumampas ang log file sa tinukoy na laki, magsusulat ito ng log sa bagong file at i-backup ang lumang file.
年収訴求

5. Paglalabas sa file ayon sa antas ng log

Sa paglalabas ng mga log sa magkakaibang file para sa bawat tiyak na antas ng log, mapapahusay ang pagiging mabasa at episyensya ng pagsusuri ng mga log. Para dito, gumagamit ng custom na filter at maramihang FileHandler.

Halimbawa ng paglalabas sa file ayon sa antas ng log

import logging

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

# Ilabas ang mga log na antas ERROR sa hiwalay na file
error_handler = logging.FileHandler('error.log')
error_handler.setLevel(logging.ERROR)
error_handler.addFilter(ErrorFilter())
error_handler.setFormatter(formatter)

# Pag-configure ng logger
logger.addHandler(error_handler)

# Paglalabas ng log
logger.error('Ang log na antas ERROR ay mailalabas sa file')
Sa halimbawang ito, gumagawa tayo ng klase ng ErrorFilter upang i-filter lamang ang mga log na antas ERROR at ilabas ang mga ito sa error.log. Sa ganitong paraan, maitatala ang mga error log lamang sa hiwalay na file.

6. Mga Pinakamahusay na Gawi at Mga Dapat Tandaan

Upang magamit nang wasto ang mga log, kailangang isaalang-alang ang mga sumusunod na pinakamahusay na gawi at mga dapat tandaan。

Wastong paggamit ng antas ng log

  • Sa panahon ng pagpapaunlad, gamitin ang antas na DEBUG upang magtala ng detalyadong impormasyon, at kapag nasa operasyon, lumipat sa mga antas na INFO o WARNING upang itala lamang ang mahahalagang impormasyon.
  • Dahil maaaring magdulot ng pagbaba ng pagganap ang sobrang paglalabas ng log, tiyaking ang kinakailangang impormasyon lamang ang itinatala.

Seguridad at Pagkapribado ng mga Log

  • Mag-ingat na huwag magtala ng personal o kumpidensyal na impormasyon sa mga log. Kung kinakailangan, magpatupad ng mga hakbang tulad ng pag-mask ng data.
  • Magtakda ng angkop na mga pahintulot para sa mga log file upang maiwasan ang hindi awtorisadong pag-access.

7. Buod

logging na modyul ay nagtatala nang episyente ng kalagayan ng pagpapatakbo ng programa at lubhang kapaki-pakinabang sa pagde-debug at sa operasyon. Sa pamamagitan ng wastong pagsasaayos ng antas ng log, patutunguhan ng output, pormat, at rotasyon, at ng detalyadong pag-unawa sa kalagayan ng pagpapatakbo ng programa, maaari itong magresulta sa maagang pagtuklas at paglutas ng mga problema. Gamitin ang pinakamahuhusay na gawi at isagawa ang wastong pamamahala ng mga log.
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール