Log på Python

Log på Python

Logning er et middel til at spore hændelser, der sker, når noget software kører. Logning er vigtig for softwareudvikling, fejlretning og drift. Hvis du ikke har nogen logning, og dit program går ned, er der meget få chancer for, at du opdager årsagen til problemet. Og hvis du opdager årsagen, vil det tage meget tid. Med logning kan du efterlade et spor af brødkrummer, så hvis noget går galt, kan vi fastslå årsagen til problemet.

Der er en række situationer som hvis du forventer et heltal, du har fået en flyder, og du kan en sky API , tjenesten er nede på grund af vedligeholdelse og meget mere. Sådanne problemer er ude af kontrol og er svære at bestemme.

Hvorfor print statement ikke er Pythonic

Nogle udviklere bruger konceptet med at udskrive sætningerne for at validere, om sætningerne er udført korrekt, eller om der er opstået en fejl. Men udskrivning er ikke en god idé. Det kan løse dine problemer for simple scripts, men for komplekse scripts vil udskrivningsmetoden mislykkes.
Python har et indbygget modul logning som gør det muligt at skrive statusmeddelelser til en fil eller andre outputstrømme. Filen kan indeholde information om, hvilken del af koden, der er eksekveret, og hvilke problemer der er opstået.

Python-logningsniveauer

Der er fem indbyggede niveauer af logmeddelelsen.

  • Fejlfinde: Disse bruges til at give detaljerede oplysninger, typisk kun af interesse ved diagnosticering af problemer.
  • Info: Disse bruges til at bekræfte, at tingene fungerer som forventet
  • Advarsel: Disse bruges som en indikation på, at noget uventet er sket, eller er tegn på et eller andet problem i den nærmeste fremtid
  • Fejl: Dette fortæller, at på grund af et mere alvorligt problem, har softwaren ikke været i stand til at udføre en eller anden funktion
  • Kritisk: Dette fortæller en alvorlig fejl, hvilket indikerer, at selve programmet muligvis ikke kan fortsætte med at køre

Hvis det kræves, har udviklere mulighed for at oprette flere niveauer, men disse er tilstrækkelige nok til at håndtere enhver mulig situation. Hvert indbyggede niveau er blevet tildelt sin numeriske værdi.

Logningsmodulet er spækket med flere funktioner. Det har flere konstanter, klasser og metoder. Elementerne med store bogstaver er konstante, de store elementer er klasser, og de elementer, der starter med små bogstaver, er metoder.

Der er adskillige loggerobjekter, der tilbydes af basehandleren selv.

  • Logger.info(msg): Dette vil logge en besked med niveau INFO på denne logger.
  • Logger.warning(msg): Dette vil logge en meddelelse med et niveau ADVARSEL på denne logger.
  • Logger.error(msg): Dette vil logge en meddelelse med niveau ERROR på denne logger.
  • Logger.critical(msg): Dette vil logge en besked med niveau CRITICAL på denne logger.
  • Logger.log(lvl,msg): Dette vil logge en besked med heltalsniveau lvl på denne logger.
  • Logger.exception(msg): Dette vil logge en meddelelse med niveau ERROR på denne logger.
  • Logger.setLevel(lvl): Denne funktion indstiller tærsklen for denne logger til lvl. Det betyder, at alle beskeder under dette niveau vil blive ignoreret.
  • Logger.addFilter(filt): Dette tilføjer en specifik filterpasning i denne logger.
  • Logger.removeFilter(filt): Dette fjerner en specifik filterpasning i denne logger.
  • Logger.filter(record): Denne metode anvender loggerens filter på den angivne post og returnerer True, hvis posten skal behandles. Ellers vil det returnere False.
  • Logger.addHandler(hdlr): Dette tilføjer en specifik handler hdlr til denne logger.
  • Logger.removeHandler(hdlr): Dette fjerner en specifik handler hdlr fra denne logger.
  • Logger.hasHandlers(): Dette kontrollerer, om loggeren har nogen handler konfigureret eller ej.

Nyttige håndværkere

Ud over basishåndterklassen er der mange nyttige underklasser.

Handler

Beskrivelse

StreamHandler Sender beskeder til streams (fillignende objekter).
FileHandler Sender beskeder til diskfiler.
BaseRotatingHandler Basisklasse for handlere, der roterer logfiler på et bestemt tidspunkt. Brug Roterende FilHandler eller TimedRotatingFileHandler i stedet.
Roterende FilHandler Sender beskeder til diskfiler med understøttelse af maksimale logfilstørrelser og logfilrotation.
TimedRotatingFileHandler Sender beskeder til diskfiler og roterer logfilen med bestemte tidsintervaller.
SocketHandler Sender beskeder til TCP/IP-stik. Understøtter også Unix-domæne-sockets siden Python 3.4.
DatagramHandler Sender beskeder til UDP-stik. Understøtter også Unix-domæne-sockets siden Python 3.4.
SMTPHandler Sender beskeder til en angivet e-mailadresse.
SysLogHandler Sender beskeder til en Unix Syslogthe-dæmon, muligvis på en fjernmaskine.
NTEventLogHandler Sender beskeder til en Windows NT/2000/XP hændelseslog.
MemoryHandler Sender beskeder til en buffer i hukommelsen, som tømmes, når specifikke kriterier er opfyldt.
HTTPHandler Sender beskeder til en HTTP-server ved hjælp af enten GET- eller POST-semantik.
Overvågede FileHandler Overvåger filen den logger på. Hvis filen ændres, lukkes den og genåbnes med filnavnet.
QueueHandler Sender beskeder til en kø, såsom dem implementeret i køen eller multiprocessing-moduler.
NullHandler Gør intet med fejlmeddelelser. Brugt af biblioteksudviklere for at undgå beskeden 'Ingen handlere kunne findes til logger'.

Grundlæggende om Python-logning

Det grundlæggende ved at bruge logmodulet til at registrere hændelser i en fil er meget enkle. For det skal du blot importere modulet fra biblioteket.

  1. Opret og konfigurer loggeren. Det kan have flere parametre. Men vigtigst af alt, videregive navnet på den fil, hvori du vil optage begivenhederne.
  2. Her kan formatet på loggeren også indstilles. Som standard fungerer filen i Tilføj tilstand, men vi kan ændre det til skrivetilstand, hvis det kræves.
  3. Niveauet for loggeren kan også indstilles, som fungerer som tærsklen for sporing baseret på de numeriske værdier, der er tildelt hvert niveau.
    Der er flere attributter, der kan overføres som parametre.
  4. Listen over alle disse parametre er angivet i Python bibliotek . Brugeren kan vælge den påkrævede attribut i henhold til kravet.
    Derefter skal du oprette et objekt og bruge de forskellige metoder som vist i eksemplet.

Logning af en variabel

Denne kode viser, hvordan man logger en fejlmeddelelse. Funktionen logging.error() bruges til at logge en fejlmeddelelse med en pladsholder %s for variabelnavnet.

Python3




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

Output:

ERROR:root:GFG raised an error 

Logning af alle niveauer

Denne kode viser alle niveauer af logning.

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'> )>

Ovenstående kode vil generere en fil med det angivne navn, og hvis vi åbner filen, indeholder filen følgende data.

Grundlæggende om Python-logning

Konfiguration af logning

Logning 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 opsætter et logningssystem ved hjælp af konfigurationen fra temp.conf fil. Den får en logger ved navn simpelt eksempel og logger beskeder med forskellige logniveauer.

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'> )>

Output:

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 

Undtagelse for Python-logning

At hæve undtagelser under logning kan være nyttigt i visse scenarier for at angive ekstraordinære forhold eller fejl i din applikation. Ved at rejse en undtagelse kan du standse det normale flow af eksekvering og underrette den, der ringer eller logsystemet, om det stødte problem.

I denne kode rejser vi en undtagelse, som bliver fanget af logningen. undtagelse.

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))>

Output:

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.