Logger på Python

Logger på Python

Logging er et middel til å spore hendelser som skjer når noe programvare kjører. Logging er viktig for programvareutvikling, feilsøking og kjøring. Hvis du ikke har noen loggføring og programmet krasjer, er det svært få sjanser for at du oppdager årsaken til problemet. Og hvis du oppdager årsaken, vil det ta mye tid. Med logging kan du legge igjen et spor av brødsmuler slik at hvis noe går galt, kan vi fastslå årsaken til problemet.

Det er en rekke situasjoner som hvis du forventer et heltall, du har fått en flyte og du kan en sky API , tjenesten er nede for vedlikehold og mye mer. Slike problemer er ute av kontroll og er vanskelige å fastslå.

Hvorfor print statement ikke er Pythonic

Noen utviklere bruker konseptet med å skrive ut setningene for å validere om setningene er utført riktig eller om det har oppstått en feil. Men utskrift er ikke en god idé. Det kan løse problemene dine for enkle skript, men for komplekse skript vil utskriftstilnærmingen mislykkes.
Python har en innebygd modul hogst som gjør det mulig å skrive statusmeldinger til en fil eller andre utdatastrømmer. Filen kan inneholde informasjon om hvilken del av koden som kjøres og hvilke problemer som har oppstått.

Python-loggingsnivåer

Det er fem innebygde nivåer av loggmeldingen.

  • Feilsøking: Disse brukes til å gi detaljert informasjon, vanligvis bare av interesse ved diagnostisering av problemer.
  • Info: Disse brukes for å bekrefte at ting fungerer som forventet
  • Advarsel: Disse brukes som en indikasjon på at noe uventet har skjedd, eller indikerer et problem i nær fremtid
  • Feil: Dette forteller at på grunn av et mer alvorlig problem, har ikke programvaren vært i stand til å utføre noen funksjoner
  • Kritisk: Dette forteller en alvorlig feil, noe som indikerer at selve programmet kanskje ikke kan fortsette å kjøre

Om nødvendig har utviklere muligheten til å lage flere nivåer, men disse er tilstrekkelige nok til å håndtere alle mulige situasjoner. Hvert innebygde nivå har blitt tildelt sin numeriske verdi.

Loggmodulen er fullpakket med flere funksjoner. Den har flere konstanter, klasser og metoder. Elementene med store bokstaver er konstante, elementene med store bokstaver er klasser og elementene som starter med små bokstaver er metoder.

Det er flere loggeobjekter som tilbys av selve basebehandleren.

  • Logger.info(msg): Dette vil logge en melding med nivå INFO på denne loggeren.
  • Logger.warning(msg): Dette vil logge en melding med et nivå ADVARSEL på denne loggeren.
  • Logger.error(msg): Dette vil logge en melding med nivå ERROR på denne loggeren.
  • Logger.critical(msg): Dette vil logge en melding med nivå CRITICAL på denne loggeren.
  • Logger.log(lvl,msg): Dette vil logge en melding med heltallsnivå lvl på denne loggeren.
  • Logger.exception(msg): Dette vil logge en melding med nivå ERROR på denne loggeren.
  • Logger.setLevel(lvl): Denne funksjonen setter terskelen for denne loggeren til lvl. Dette betyr at alle meldingene under dette nivået vil bli ignorert.
  • Logger.addFilter(filt): Dette legger til et spesifikt filterpass i denne loggeren.
  • Logger.removeFilter(filt): Dette fjerner et spesifikt filter som passer inn i denne loggeren.
  • Logger.filter(record): Denne metoden bruker loggerens filter på posten som er oppgitt og returnerer True hvis posten skal behandles. Ellers vil den returnere False.
  • Logger.addHandler(hdlr): Dette legger til en spesifikk behandler hdlr til denne loggeren.
  • Logger.removeHandler(hdlr): Dette fjerner en spesifikk behandler hdlr inn i denne loggeren.
  • Logger.hasHandlers(): Dette sjekker om loggeren har en behandler konfigurert eller ikke.

Nyttige håndtakere

I tillegg til den grunnleggende Handler Class, er det gitt mange nyttige underklasser.

Handler

Beskrivelse

StreamHandler Sender meldinger til strømmer (fillignende objekter).
FileHandler Sender meldinger til diskfiler.
BaseRotatingHandler Basisklasse for behandlere som roterer loggfiler på et bestemt tidspunkt. Bruk Roterende FilHandler eller TimedRotatingFileHandler i stedet.
Roterende FilHandler Sender meldinger til diskfiler, med støtte for maksimal loggfilstørrelse og loggfilrotasjon.
TimedRotatingFileHandler Sender meldinger til diskfiler, roterer loggfilen med bestemte tidsintervaller.
SocketHandler Sender meldinger til TCP/IP-kontakter. Støtter også Unix domene sockets siden Python 3.4.
DatagramHandler Sender meldinger til UDP-kontakter. Støtter også Unix domene sockets siden Python 3.4.
SMTPHandler Sender meldinger til en angitt e-postadresse.
SysLogHandler Sender meldinger til en Unix Syslogthe-demon, muligens på en ekstern maskin.
NTEventLogHandler Sender meldinger til en Windows NT/2000/XP-hendelseslogg.
MemoryHandler Sender meldinger til en buffer i minnet, som tømmes når spesifikke kriterier er oppfylt.
HTTPHandler Sender meldinger til en HTTP-server ved å bruke enten GET- eller POST-semantikk.
Så på FileHandler Ser på filen den logger på. Hvis filen endres, lukkes den og åpnes på nytt med filnavnet.
QueueHandler Sender meldinger til en kø, for eksempel de som er implementert i køen eller multiprosesseringsmoduler.
NullHandler Gjør ingenting med feilmeldinger. Brukes av bibliotekutviklere for å unngå 'No handlers could be found for logger'-meldingen.

Grunnleggende om Python-logging

Det grunnleggende om å bruke loggingsmodulen til å registrere hendelsene i en fil er veldig enkelt. For det er det bare å importere modulen fra biblioteket.

  1. Opprett og konfigurer loggeren. Den kan ha flere parametere. Men viktigere, send navnet på filen der du vil registrere hendelsene.
  2. Her kan også formatet på loggeren stilles inn. Som standard fungerer filen i legge til modus, men vi kan endre det til skrivemodus om nødvendig.
  3. Nivået til loggeren kan også angis som fungerer som terskelen for sporing basert på de numeriske verdiene som er tildelt hvert nivå.
    Det er flere attributter som kan sendes som parametere.
  4. Listen over alle disse parameterne er gitt i Python bibliotek . Brukeren kan velge ønsket attributt i henhold til kravet.
    Deretter oppretter du et objekt og bruker de ulike metodene som vist i eksempelet.

Logging av en variabel

Denne koden viser hvordan du logger en feilmelding. Logging.error()-funksjonen brukes til å logge en feilmelding med en plassholder %s for variabelnavnet.

Python3




import> logging> name> => 'GFG'> logging.error(> '%s raised an error'> , name)>

Utgang:

ERROR:root:GFG raised an error 

Logging av alle nivåene

Denne koden viser alle nivåene av logging.

Python




# importing module> import> logging> # Create and configure logger> logging.basicConfig(filename> => 'newfile.log'> ,> > format> => '%(asctime)s %(message)s'> ,> > filemode> => 'w'> )> # Creating an object> logger> => logging.getLogger()> # Setting the threshold of logger to DEBUG> logger.setLevel(logging.DEBUG)> # Test messages> logger.debug(> 'Harmless debug Message'> )> logger.info(> 'Just an information'> )> logger.warning(> 'Its a Warning'> )> logger.error(> 'Did you try to divide by zero'> )> logger.critical(> 'Internet is down'> )>

Koden ovenfor vil generere en fil med det angitte navnet, og hvis vi åpner filen, inneholder filen følgende data.

Grunnleggende om Python-logging

Konfigurering av logging

Logge til en fil: temp.conf

[loggers] keys=root,simpleExample [handlers] keys=consoleHandler [formatters] keys=simpleFormatter [logger_root] level=DEBUG handlers=consoleHandler [logger_simpleExample] level=DEBUG handlers=consoleHandler qualname=simpleExample propagate=0 [handler_consoleHandler] 

Eksempel:

Koden setter opp et loggingssystem ved å bruke konfigurasjonen fra temp.conf fil. Den får en logger som heter enkelt eksempel og logger meldinger med ulike loggnivåer.

Python3




import> logging> import> logging.config> logging.config.fileConfig(> 'temp.conf'> )> # create logger> logger> => logging.getLogger(> 'simpleExample'> )> # 'application' code> logger.debug(> 'debug message'> )> logger.info(> 'info message'> )> logger.warning(> 'warn message'> )> logger.error(> 'error message'> )> logger.critical(> 'critical message'> )>

Utgang:

2023-06-15 18:16:21 - simpleExample - DEBUG - debug message 2023-06-15 18:16:21 - simpleExample - INFO - info message 2023-06-15 18:16:21 - simpleExample - WARNING - warn message 2023-06-15 18:16:21 - simpleExample - ERROR - error message 2023-06-15 18:16:21 - simpleExample - CRITICAL - critical message 

Python Logging Unntak

Å heve unntak under logging kan være nyttig i visse scenarier for å indikere eksepsjonelle forhold eller feil i applikasjonen. Ved å gjøre et unntak kan du stoppe den normale kjøringen og varsle den som ringer eller loggingssystemet om problemet.

I denne koden tar vi opp et unntak som blir fanget opp av loggingen. unntak.

Python3




import> logging> logging.basicConfig(level> => logging.DEBUG,> > format> => '%(asctime)s - %(levelname)s - %(message)s'> )> def> perform_operation(value):> > if> value <> 0> :> > raise> ValueError(> 'Invalid value: Value cannot be negative.'> )> > else> :> > # Continue with normal execution> > logging.info(> 'Operation performed successfully.'> )> try> :> > input_value> => int> (> input> (> 'Enter a value: '> ))> > perform_operation(input_value)> except> ValueError as ve:> > logging.exception(> 'Exception occurred: %s'> ,> str> (ve))>

Utgang:

Enter a value: -1 2023-06-15 18:25:18,064 - ERROR - Exception occurred: Invalid value: Value cannot be negative. ValueError: Invalid value: Value cannot be negative.