logo

Loggar in i Python

Loggning är ett sätt att spåra händelser som inträffar när viss programvara körs. Loggning är viktigt för mjukvaruutveckling, felsökning och körning. Om du inte har någon loggningspost och ditt program kraschar, finns det mycket få chanser att du upptäcker orsaken till problemet. Och om du upptäcker orsaken kommer det att ta mycket tid. Med loggning kan du lämna ett spår av ströbröd så att om något går fel kan vi fastställa orsaken till problemet.

Det finns ett antal situationer som om du förväntar dig ett heltal, du har fått ett flytande och du kan ett moln API , tjänsten är nere för underhåll och mycket mer. Sådana problem är utom kontroll och är svåra att avgöra.



Varför print statement inte är Pythonic

Vissa utvecklare använder konceptet att skriva ut satserna för att validera om satserna exekveras korrekt eller om något fel har inträffat. Men utskrift är ingen bra idé. Det kan lösa dina problem för enkla skript, men för komplexa skript kommer utskriftsmetoden att misslyckas.
Python har en inbyggd modul skogsavverkning som gör det möjligt att skriva statusmeddelanden till en fil eller andra utdataströmmar. Filen kan innehålla information om vilken del av koden som exekveras och vilka problem som har uppstått.

Python-loggningsnivåer

Det finns fem inbyggda nivåer av loggmeddelandet.

  • Felsökning: Dessa används för att ge detaljerad information, vanligtvis av intresse endast vid diagnostisering av problem.
  • Info: Dessa används för att bekräfta att saker och ting fungerar som förväntat
  • Varning: Dessa används som en indikation på att något oväntat hänt, eller tyder på något problem inom en snar framtid
  • Fel: Detta säger att på grund av ett allvarligare problem har programvaran inte kunnat utföra någon funktion
  • Kritisk: Detta talar om ett allvarligt fel, vilket indikerar att själva programmet kanske inte kan fortsätta att köras

Vid behov har utvecklare möjlighet att skapa fler nivåer men dessa är tillräckligt för att hantera alla möjliga situationer. Varje inbyggd nivå har tilldelats sitt numeriska värde.



Loggningsmodulen är fullspäckad med flera funktioner. Den har flera konstanter, klasser och metoder. Objekten med stora bokstäver är konstanta, objekten med versaler är klasser och objekten som börjar med små bokstäver är metoder.

Det finns flera loggerobjekt som erbjuds av bashanteraren själv.



  • Logger.info(msg): Detta kommer att logga ett meddelande med nivå INFO på denna logger.
  • Logger.warning(msg): Detta kommer att logga ett meddelande med en nivå VARNING på denna logger.
  • Logger.error(msg): Detta kommer att logga ett meddelande med nivå ERROR på denna logger.
  • Logger.critical(msg): Detta kommer att logga ett meddelande med nivå CRITICAL på denna logger.
  • Logger.log(lvl,msg): Detta kommer att logga ett meddelande med heltalsnivå lvl på denna logger.
  • Logger.exception(msg): Detta kommer att logga ett meddelande med nivå ERROR på denna logger.
  • Logger.setLevel(lvl): Denna funktion ställer in tröskeln för denna logger till lvl. Detta innebär att alla meddelanden under denna nivå kommer att ignoreras.
  • Logger.addFilter(filt): Detta lägger till en specifik filterpassning i denna logger.
  • Logger.removeFilter(filt): Detta tar bort en specifik filterpassning i denna logger.
  • Logger.filter(record): Den här metoden tillämpar loggerens filter på posten som tillhandahålls och returnerar True om posten ska bearbetas. Annars kommer den att returnera False.
  • Logger.addHandler(hdlr): Detta lägger till en specifik hanterare hdlr till denna logger.
  • Logger.removeHandler(hdlr): Detta tar bort en specifik hanterare hdlr från denna logger.
  • Logger.hasHandlers(): Detta kontrollerar om loggern har någon hanterare konfigurerad eller inte.

Användbara hanterare

Utöver bashanterarklassen tillhandahålls många användbara underklasser.

Hanterare

Beskrivning

StreamHandler Skickar meddelanden till strömmar (filliknande objekt).
FileHandler Skickar meddelanden till diskfiler.
BaseRotatingHandler Basklass för hanterare som roterar loggfiler vid en viss punkt. Använda sig av Roterande filhanterare eller TimedRotatingFileHandler istället.
Roterande filhanterare Skickar meddelanden till diskfiler, med stöd för maximal loggfilstorlek och loggfilrotation.
TimedRotatingFileHandler Skickar meddelanden till diskfiler och roterar loggfilen med vissa tidsintervall.
SocketHandler Skickar meddelanden till TCP/IP-uttag. Stöder även Unix-domänsockets sedan Python 3.4.
DatagramHandler Skickar meddelanden till UDP-uttag. Stöder även Unix-domänsockets sedan Python 3.4.
SMTPHandler Skickar meddelanden till en angiven e-postadress.
SysLogHandler Skickar meddelanden till en Unix Syslogthe-demon, möjligen på en fjärrdator.
NTEventLogHandler Skickar meddelanden till en Windows NT/2000/XP-händelselogg.
MemoryHandler Skickar meddelanden till en buffert i minnet, som töms när specifika kriterier uppfylls.
HTTPHandler Skickar meddelanden till en HTTP-server med antingen GET- eller POST-semantik.
Tittade på FileHandler Tittar på filen den loggar till. Om filen ändras stängs den och öppnas igen med filnamnet.
QueueHandler Skickar meddelanden till en kö, till exempel de som är implementerade i kön eller multibearbetningsmoduler.
NullHandler Gör ingenting med felmeddelanden. Används av biblioteksutvecklare för att undvika meddelandet 'Inga hanterare kunde hittas för logger'.

Grunderna i Python-loggning

Grunderna i att använda loggningsmodulen för att registrera händelserna i en fil är mycket enkla. För det, importera helt enkelt modulen från biblioteket.

  1. Skapa och konfigurera loggern. Den kan ha flera parametrar. Men viktigare, skicka namnet på filen där du vill spela in händelserna.
  2. Här kan även formatet på loggern ställas in. Som standard fungerar filen i bifoga läge men vi kan ändra det till skrivläge om det behövs.
  3. Dessutom kan nivån på loggern ställas in som fungerar som tröskeln för spårning baserat på de numeriska värdena som tilldelats varje nivå.
    Det finns flera attribut som kan skickas som parametrar.
  4. Listan över alla dessa parametrar finns i Python bibliotek . Användaren kan välja önskat attribut enligt kravet.
    Efter det skapar du ett objekt och använder de olika metoderna som visas i exemplet.

Logga en variabel

Den här koden visar hur man loggar ett felmeddelande. Funktionen logging.error() används för att logga ett felmeddelande med en platshållare %s för variabelnamnet.

Python3




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

>

ett exempel på ett OS med öppen källkod är

>

Utgång:

ERROR:root:GFG raised an error>

Loggning av alla nivåer

Denna kod visar alla nivåer av loggning.

Pytonorm




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

>

>

Ovanstående kod genererar en fil med det angivna namnet och om vi öppnar filen innehåller filen följande data.

Grunderna i Python-loggning

Konfigurera loggning

Logga till 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]>

Exempel:

Koden sätter upp ett loggningssystem med hjälp av konfigurationen från temp.conf fil. Den får en logger som heter enkelt exempel och loggar meddelanden med olika loggnivåer.

Python3

inställningsmeny för Android-telefon


sql flera tabeller välj



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

>

>

Utgång:

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>

Undantag för Python-loggning

Att ta upp undantag under loggning kan vara användbart i vissa scenarier för att indikera exceptionella förhållanden eller fel i din applikation. Genom att göra ett undantag kan du stoppa det normala körningsflödet och meddela den som ringer eller loggningssystemet om det påträffade problemet.

I den här koden tar vi upp ett undantag som fångas upp av loggningen. undantag.

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

>

>

Utgång:

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