Conectarea la Python
Înregistrarea în jurnal este un mijloc de urmărire a evenimentelor care au loc atunci când un anumit software rulează. Înregistrarea este importantă pentru dezvoltarea, depanarea și rularea software-ului. Dacă nu aveți nicio înregistrare de înregistrare și programul dvs. se blochează, sunt foarte puține șanse să detectați cauza problemei. Și dacă detectezi cauza, va consuma mult timp. Cu înregistrarea în jurnal, puteți lăsa o urmă de pesmet, astfel încât, dacă ceva nu merge bine, să putem determina cauza problemei.
Există o serie de situații, cum ar fi dacă vă așteptați la un număr întreg, vi s-a dat un float și puteți un nor API , serviciul este oprit pentru întreținere și multe altele. Astfel de probleme sunt scăpate de sub control și sunt greu de determinat.
De ce declarația print nu este Pythonic
Unii dezvoltatori folosesc conceptul de tipărire a instrucțiunilor pentru a valida dacă instrucțiunile sunt executate corect sau dacă a apărut o eroare. Dar tipărirea nu este o idee bună. S-ar putea să vă rezolve problemele pentru scripturile simple, dar pentru scripturile complexe, abordarea de imprimare va eșua.
Python are un modul încorporat Logare care permite scrierea mesajelor de stare într-un fișier sau în orice alte fluxuri de ieșire. Fișierul poate conține informații despre ce parte a codului este executată și ce probleme au apărut.
Niveluri de înregistrare Python
Există cinci niveluri încorporate ale mesajului de jurnal.
- Depanare: Acestea sunt folosite pentru a oferi informații detaliate, de obicei de interes numai atunci când diagnosticați probleme.
- Info: Acestea sunt folosite pentru a confirma că lucrurile funcționează conform așteptărilor
- Avertizare: Acestea sunt folosite ca un indiciu că s-a întâmplat ceva neașteptat sau indică o problemă în viitorul apropiat
- Eroare: Acest lucru indică faptul că, din cauza unei probleme mai grave, software-ul nu a putut îndeplini anumite funcții
- Critic: Acest lucru indică o eroare gravă, indicând că programul în sine nu poate continua să ruleze
Dacă este necesar, dezvoltatorii au opțiunea de a crea mai multe niveluri, dar acestea sunt suficiente pentru a gestiona orice situație posibilă. Fiecărui nivel încorporat i-a fost atribuită valoarea sa numerică.
Modulul de logare este dotat cu mai multe caracteristici. Are mai multe constante, clase și metode. Elementele cu majuscule sunt constante, articolele cu majuscule sunt clase, iar articolele care încep cu litere mici sunt metode.
Există mai multe obiecte logger oferite de Handler-ul de bază în sine.
- Logger.info(msg): Acest lucru va înregistra un mesaj cu nivelul INFO pe acest logger.
- Logger.warning(msg): Aceasta va înregistra un mesaj cu un nivel de AVERTISMENT pe acest logger.
- Logger.error(msg): Acest lucru va înregistra un mesaj cu nivelul EROARE pe acest logger.
- Logger.critical(msg): Acest lucru va înregistra un mesaj cu nivelul CRITIC pe acest logger.
- Logger.log(lvl,msg): Acest lucru va înregistra un mesaj cu nivel întreg lvl pe acest logger.
- Logger.exception(msg): Acest lucru va înregistra un mesaj cu nivelul EROARE pe acest logger.
- Logger.setLevel(lvl): Această funcție setează pragul acestui logger la lvl. Aceasta înseamnă că toate mesajele sub acest nivel vor fi ignorate.
- Logger.addFilter(filt): Acest lucru adaugă un filtru specific pentru acest logger.
- Logger.removeFilter(filt): Acest lucru elimină un anumit filtru care se potrivește în acest logger.
- Logger.filter(înregistrare): Această metodă aplică filtrul logger-ului înregistrării furnizate și returnează True dacă înregistrarea urmează să fie procesată. În caz contrar, va returna False.
- Logger.addHandler(hdlr): Acest lucru adaugă un anumit handler hdlr la acest logger.
- Logger.removeHandler(hdlr): Acest lucru elimină un anumit handler hdlr din acest logger.
- Logger.hasHandlers(): Aceasta verifică dacă loggerul are vreun handler configurat sau nu.
Manipulatori Utili
Pe lângă clasa de bază Handler, sunt furnizate multe subclase utile.
| Handler | Descriere |
|---|---|
| StreamHandler | Trimite mesaje către fluxuri (obiecte asemănătoare fișierelor). |
| FileHandler | Trimite mesaje pe fișierele de pe disc. |
| BaseRotatingHandler | Clasa de bază pentru manipulatorii care rotesc fișierele jurnal la un anumit punct. Utilizare RotatingFileHandler sau TimedRotatingFileHandler in schimb. |
| RotatingFileHandler | Trimite mesaje pe fișiere de disc, cu suport pentru dimensiunile maxime ale fișierelor jurnal și rotația fișierelor jurnal. |
| TimedRotatingFileHandler | Trimite mesaje pe fișierele disc, rotind fișierul jurnal la anumite intervale de timp. |
| SocketHandler | Trimite mesaje către socket-urile TCP/IP. De asemenea, acceptă socketuri de domeniu Unix începând cu Python 3.4. |
| DatagramHandler | Trimite mesaje către socket-urile UDP. De asemenea, acceptă socketuri de domeniu Unix începând cu Python 3.4. |
| SMTPHandler | Trimite mesaje la o adresă de e-mail desemnată. |
| SysLogHandler | Trimite mesaje către un sistem Unix Syslogthe daemon, eventual pe o mașină la distanță. |
| NTEventLogHandler | Trimite mesaje către un jurnal de evenimente Windows NT/2000/XP. |
| MemoryHandler | Trimite mesaje către un buffer din memorie, care este golit ori de câte ori sunt îndeplinite anumite criterii. |
| HTTPHandler | Trimite mesaje către un server HTTP folosind fie semantica GET, fie POST. |
| WatchedFileHandler | Urmărește fișierul la care se conectează. Dacă fișierul se modifică, acesta este închis și redeschis folosind numele fișierului. |
| QueueHandler | Trimite mesaje la o coadă, cum ar fi cele implementate în coadă sau modulele de multiprocesare. |
| NullHandler | Nu face nimic cu mesajele de eroare. Folosit de dezvoltatorii de biblioteci pentru a evita mesajul „Niciun handler nu a putut fi găsit pentru logger”. |
Noțiuni de bază pentru înregistrarea Python
Elementele de bază ale utilizării modulului de înregistrare pentru înregistrarea evenimentelor într-un fișier sunt foarte simple. Pentru asta, pur și simplu importați modulul din bibliotecă.
- Creați și configurați loggerul. Poate avea mai mulți parametri. Dar, important, treceți numele fișierului în care doriți să înregistrați evenimentele.
- Aici poate fi setat și formatul loggerului. În mod implicit, fișierul funcționează în adăuga modul, dar îl putem schimba în modul de scriere dacă este necesar.
- De asemenea, se poate seta nivelul loggerului care acționează ca prag de urmărire pe baza valorilor numerice atribuite fiecărui nivel.
Există mai multe atribute care pot fi transmise ca parametri. - Lista tuturor acelor parametri este dată în Biblioteca Python . Utilizatorul poate alege atributul necesar în funcție de cerință.
După aceea, creați un obiect și utilizați diferitele metode așa cum se arată în exemplu.
Înregistrarea unei variabile
Acest cod demonstrează cum să înregistrați un mesaj de eroare. Funcția logging.error() este utilizată pentru a înregistra un mesaj de eroare cu un substituent %s pentru numele variabilei.
Python3
import> logging> name> => 'GFG'> logging.error(> '%s raised an error'> , name)> |
Ieșire:
ERROR:root:GFG raised an error
Înregistrarea tuturor nivelurilor
Acest cod demonstrează toate nivelurile de înregistrare.
Piton
# 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'> )> |
Codul de mai sus va genera un fișier cu numele furnizat și dacă deschidem fișierul, fișierul conține următoarele date.
Configurarea înregistrării
Conectarea la un fișier: 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]
Exemplu:
Codul configurează un sistem de înregistrare folosind configurația din temp.conf fişier. Obține un logger numit exemplu simplu și înregistrează mesaje cu diferite niveluri de jurnal.
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'> )> |
Ieșire:
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
Excepție de înregistrare Python
Crearea de excepții în timpul înregistrării poate fi utilă în anumite scenarii pentru a indica condiții excepționale sau erori în aplicația dvs. Prin ridicarea unei excepții, puteți opri fluxul normal de execuție și puteți notifica apelantul sau sistemul de înregistrare cu privire la problema întâlnită.
În acest cod, ridicăm o excepție care este prinsă de înregistrare. excepție.
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))> |
Ieșire:
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.