Inloggen in Python
Logboekregistratie is een manier om gebeurtenissen bij te houden die plaatsvinden wanneer bepaalde software wordt uitgevoerd. Logboekregistratie is belangrijk voor het ontwikkelen, debuggen en uitvoeren van software. Als u geen logboekregistratie heeft en uw programma crasht, is de kans zeer klein dat u de oorzaak van het probleem ontdekt. En als je de oorzaak ontdekt, kost het veel tijd. Met loggen kunt u een spoor van broodkruimels achterlaten, zodat wij, als er iets misgaat, de oorzaak van het probleem kunnen achterhalen.
Er zijn een aantal situaties, bijvoorbeeld als u een geheel getal verwacht, u een float heeft gekregen en u een wolk kunt krijgen API , de service is niet beschikbaar vanwege onderhoud en nog veel meer. Dergelijke problemen zijn onbeheersbaar en moeilijk vast te stellen.
Waarom de print-instructie niet Pythonisch is
Sommige ontwikkelaars gebruiken het concept van het afdrukken van de instructies om te valideren of de instructies correct worden uitgevoerd of dat er een fout is opgetreden. Maar printen is geen goed idee. Het kan uw problemen voor eenvoudige scripts oplossen, maar voor complexe scripts zal de afdrukaanpak mislukken.
Python heeft een ingebouwde module loggen waarmee statusberichten naar een bestand of andere uitvoerstromen kunnen worden geschreven. Het bestand kan informatie bevatten over welk deel van de code wordt uitgevoerd en welke problemen zich hebben voorgedaan.
Python-logniveaus
Er zijn vijf ingebouwde niveaus van het logbericht.
- Foutopsporing: Deze worden gebruikt om gedetailleerde informatie te geven, die doorgaans alleen van belang is bij het diagnosticeren van problemen.
- Info: Deze worden gebruikt om te bevestigen dat alles werkt zoals verwacht
- Waarschuwing: Deze worden gebruikt als indicatie dat er iets onverwachts is gebeurd, of duiden op een probleem in de nabije toekomst
- Fout: Dit geeft aan dat de software vanwege een ernstiger probleem een bepaalde functie niet heeft kunnen uitvoeren
- Kritiek: Dit duidt op een ernstige fout, wat aangeeft dat het programma zelf mogelijk niet meer kan worden uitgevoerd
Indien nodig hebben ontwikkelaars de mogelijkheid om meer niveaus te creëren, maar deze zijn voldoende om elke mogelijke situatie aan te kunnen. Aan elk ingebouwd niveau is een numerieke waarde toegewezen.
De logmodule zit boordevol verschillende functies. Het heeft verschillende constanten, klassen en methoden. De items met hoofdletters zijn constant, de items met hoofdletters zijn klassen en de items die met kleine letters beginnen, zijn methoden.
Er worden verschillende loggerobjecten aangeboden door de basishandler zelf.
- Logger.info(msg): Hierdoor wordt een bericht met niveau INFO op deze logger geregistreerd.
- Logger.waarschuwing (bericht): Hierdoor wordt een bericht met een niveau WAARSCHUWING op deze logger geregistreerd.
- Logger.fout (bericht): Hierdoor wordt een bericht met niveau ERROR op deze logger geregistreerd.
- Logger.critical(msg): Hierdoor wordt een bericht met niveau KRITIEK op deze logger geregistreerd.
- Logger.log(lvl,msg): Hierdoor wordt een bericht met een geheel getalniveau op deze logger geregistreerd.
- Logger.exception(msg): Hierdoor wordt een bericht met niveau ERROR op deze logger geregistreerd.
- Logger.setLevel(lvl): Deze functie stelt de drempelwaarde van deze logger in op lvl. Dit betekent dat alle berichten onder dit niveau worden genegeerd.
- Logger.addFilter(filter): Dit voegt een specifieke filterpassing toe aan deze logger.
- Logger.removeFilter(filter): Hierdoor wordt een specifieke filterpassing in deze logger verwijderd.
- Logger.filter(record): Deze methode past het filter van de logger toe op de opgegeven record en retourneert True als de record moet worden verwerkt. Anders wordt False geretourneerd.
- Logger.addHandler(hdlr): Hiermee wordt een specifieke handler hdlr aan deze logger toegevoegd.
- Logger.removeHandler(hdlr) : Hierdoor wordt een specifieke handler hdlr in deze logger verwijderd.
- Logger.hasHandlers(): Hiermee wordt gecontroleerd of de logger een handler heeft geconfigureerd of niet.
Nuttige begeleiders
Naast de basishandlerklasse zijn er veel nuttige subklassen beschikbaar.
| Behandelaar | Beschrijving |
|---|---|
| StreamHandler | Stuurt berichten naar streams (bestandachtige objecten). |
| Bestandshandler | Verzendt berichten naar schijfbestanden. |
| BasisRoterendeHandler | Basisklasse voor handlers die logbestanden op een bepaald punt roteren. Gebruik RoterendeFileHandler of TimedRotatingFileHandler in plaats van. |
| RoterendeFileHandler | Verzendt berichten naar schijfbestanden, met ondersteuning voor maximale logbestandsgroottes en logbestandrotatie. |
| TimedRotatingFileHandler | Verzendt berichten naar schijfbestanden, waarbij het logbestand met bepaalde tijdsintervallen wordt geroteerd. |
| SocketHandler | Verzendt berichten naar TCP/IP-sockets. Ondersteunt ook Unix-domeinsockets sinds Python 3.4. |
| DatagramHandler | Verzendt berichten naar UDP-sockets. Ondersteunt ook Unix-domeinsockets sinds Python 3.4. |
| SMTPHandler | Stuurt berichten naar een aangewezen e-mailadres. |
| SysLogHandler | Stuurt berichten naar een Unix Syslogthe-daemon, mogelijk op een externe machine. |
| NTEventLogHandler | Verzendt berichten naar een Windows NT/2000/XP-gebeurtenislogboek. |
| GeheugenHandler | Stuurt berichten naar een buffer in het geheugen, die wordt leeggemaakt wanneer aan specifieke criteria wordt voldaan. |
| HTTPHandler | Verzendt berichten naar een HTTP-server met behulp van GET- of POST-semantiek. |
| FileHandler bekeken | Bekijkt het bestand waarnaar wordt gelogd. Als het bestand verandert, wordt het gesloten en opnieuw geopend met de bestandsnaam. |
| WachtrijHandler | Verzendt berichten naar een wachtrij, zoals berichten die zijn geïmplementeerd in de wachtrij of in multiprocessing-modules. |
| NullHandler | Doet niets met foutmeldingen. Gebruikt door bibliotheekontwikkelaars om het bericht ‘Er kunnen geen handlers gevonden worden voor de logger’ te vermijden. |
Basisprincipes van Python-logboekregistratie
De basisprincipes van het gebruik van de logmodule om de gebeurtenissen in een bestand vast te leggen zijn heel eenvoudig. Importeer daarvoor eenvoudigweg de module uit de bibliotheek.
- Maak en configureer de logger. Het kan verschillende parameters hebben. Maar belangrijker nog: geef de naam door van het bestand waarin u de gebeurtenissen wilt opnemen.
- Hier kan ook het formaat van de logger worden ingesteld. Standaard werkt het bestand in toevoegen modus, maar we kunnen dit indien nodig wijzigen in de schrijfmodus.
- Ook kan het niveau van de logger worden ingesteld, dat fungeert als drempel voor tracking op basis van de numerieke waarden die aan elk niveau zijn toegewezen.
Er zijn verschillende attributen die als parameters kunnen worden doorgegeven. - De lijst met al deze parameters vindt u in Python-bibliotheek . De gebruiker kan het vereiste attribuut kiezen op basis van de vereiste.
Maak daarna een object en gebruik de verschillende methoden zoals weergegeven in het voorbeeld.
Een variabele registreren
Deze code laat zien hoe u een foutmelding registreert. De functie logging.error() wordt gebruikt om een foutmelding te loggen met een tijdelijke aanduiding %s voor de variabelenaam.
Python3
import> logging> name> => 'GFG'> logging.error(> '%s raised an error'> , name)> |
Uitgang:
ERROR:root:GFG raised an error
Loggen van alle niveaus
Deze code demonstreert alle niveaus van logboekregistratie.
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'> )> |
De bovenstaande code genereert een bestand met de opgegeven naam en als we het bestand openen, bevat het bestand de volgende gegevens.
Logboekregistratie configureren
Inloggen naar een bestand: 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]
Voorbeeld:
De code zet een logsysteem op met behulp van de configuratie uit de temp.conf bestand. Het verkrijgt een logger met de naam eenvoudig voorbeeld en registreert berichten met verschillende logniveaus.
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'> )> |
Uitgang:
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
Uitzondering voor Python-logboekregistratie
Het maken van uitzonderingen tijdens logboekregistratie kan in bepaalde scenario's nuttig zijn om uitzonderlijke omstandigheden of fouten in uw toepassing aan te geven. Door een uitzondering te maken, kunt u de normale uitvoeringsstroom stopzetten en de beller of het logsysteem op de hoogte stellen van het aangetroffen probleem.
In deze code genereren we een uitzondering die wordt opgevangen door de logboekregistratie. uitzondering.
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))> |
Uitgang:
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.