Iniciar sesión en Python
El registro es un medio para rastrear eventos que ocurren cuando se ejecuta algún software. El registro es importante para el desarrollo, la depuración y la ejecución de software. Si no tiene ningún registro de registro y su programa falla, hay muy pocas posibilidades de que detecte la causa del problema. Y si detectas la causa, consumirá mucho tiempo. Con el registro, puede dejar un rastro de rutas de navegación para que, si algo sale mal, podamos determinar la causa del problema.
Hay una serie de situaciones como, por ejemplo, si esperas un número entero, te han dado un flotante y puedes crear una nube. API , el servicio está inactivo por mantenimiento y mucho más. Estos problemas están fuera de control y son difíciles de determinar.
¿Por qué la declaración impresa no es Pythonic?
Algunos desarrolladores utilizan el concepto de imprimir las declaraciones para validar si las declaraciones se ejecutan correctamente o si ha ocurrido algún error. Pero imprimir no es una buena idea. Puede resolver sus problemas con scripts simples, pero con scripts complejos, el método de impresión fallará.
Python tiene un módulo incorporado Inicio sesión que permite escribir mensajes de estado en un archivo o cualquier otro flujo de salida. El archivo puede contener información sobre qué parte del código se ejecuta y qué problemas han surgido.
Niveles de registro de Python
Hay cinco niveles integrados del mensaje de registro.
- Depurar: Se utilizan para proporcionar información detallada, que normalmente sólo resulta de interés a la hora de diagnosticar problemas.
- Información: Se utilizan para confirmar que todo funciona como se esperaba.
- Advertencia: Se utilizan como indicación de que sucedió algo inesperado o es indicativo de algún problema en el futuro cercano.
- Error: Esto indica que debido a un problema más grave, el software no ha podido realizar alguna función.
- Crítico: Esto indica un error grave, lo que indica que es posible que el programa en sí no pueda continuar ejecutándose.
Si es necesario, los desarrolladores tienen la opción de crear más niveles, pero son suficientes para manejar todas las situaciones posibles. A cada nivel incorporado se le ha asignado su valor numérico.
El módulo de registro incluye varias funciones. Tiene varias constantes, clases y métodos. Los elementos con mayúsculas son constantes, los elementos en mayúscula son clases y los elementos que comienzan con letras minúsculas son métodos.
Hay varios objetos registradores que ofrece el propio controlador base.
- Logger.info (mensaje): Esto registrará un mensaje con nivel INFO en este registrador.
- Advertencia del registrador (mensaje): Esto registrará un mensaje con un nivel de ADVERTENCIA en este registrador.
- Registrador.error(msg): Esto registrará un mensaje con nivel ERROR en este registrador.
- Registrador.crítico(msg): Esto registrará un mensaje con nivel CRÍTICO en este registrador.
- Registrador.log(lvl,msg): Esto registrará un mensaje con nivel entero lvl en este registrador.
- Registrador.excepción (mensaje): Esto registrará un mensaje con nivel ERROR en este registrador.
- Registrador.setLevel(nivel): Esta función establece el umbral de este registrador en lvl. Esto significa que todos los mensajes por debajo de este nivel serán ignorados.
- Logger.addFilter(filtrado): Esto agrega un filtro específico que se ajusta a este registrador.
- Logger.removeFilter(filtrado): Esto elimina un filtro específico que se ajusta a este registrador.
- Logger.filter (registro): Este método aplica el filtro del registrador al registro proporcionado y devuelve True si se va a procesar el registro. De lo contrario, devolverá Falso.
- Registrador.addHandler(hdlr): Esto agrega un controlador hdlr específico a este registrador.
- Registrador.removeHandler(hdlr): Esto elimina un controlador hdlr específico en este registrador.
- Logger.hasHandlers(): Esto verifica si el registrador tiene algún controlador configurado o no.
Manipuladores útiles
Además de la clase Handler base, se proporcionan muchas subclases útiles.
| Manipulador | Descripción |
|---|---|
| Controlador de corriente | Envía mensajes a secuencias (objetos similares a archivos). |
| Manejador de archivos | Envía mensajes a archivos de disco. |
| BaseRotaciónManejador | Clase base para controladores que rotan archivos de registro en un punto determinado. Usar Controlador de archivos giratorio o Controlador de archivos giratorio cronometrado en cambio. |
| Controlador de archivos giratorio | Envía mensajes a archivos de disco, con soporte para tamaños máximos de archivos de registro y rotación de archivos de registro. |
| Controlador de archivos giratorio cronometrado | Envía mensajes a archivos de disco, rotando el archivo de registro en ciertos intervalos de tiempo. |
| Controlador de enchufes | Envía mensajes a sockets TCP/IP. También es compatible con sockets de dominio Unix desde Python 3.4. |
| Controlador de datagramas | Envía mensajes a sockets UDP. También es compatible con sockets de dominio Unix desde Python 3.4. |
| Controlador SMTP | Envía mensajes a una dirección de correo electrónico designada. |
| Controlador de registro del sistema | Envía mensajes a un demonio Syslogthe de Unix, posiblemente en una máquina remota. |
| NTEventLogHandler | Envía mensajes a un registro de eventos de Windows NT/2000/XP. |
| Controlador de memoria | Envía mensajes a un búfer en la memoria, que se vacía cada vez que se cumplen criterios específicos. |
| Controlador HTTP | Envía mensajes a un servidor HTTP utilizando la semántica GET o POST. |
| Manejador de archivos observado | Observa el archivo en el que está iniciando sesión. Si el archivo cambia, se cierra y se vuelve a abrir usando el nombre del archivo. |
| Controlador de cola | Envía mensajes a una cola, como los implementados en la cola o módulos de multiprocesamiento. |
| Controlador nulo | No hace nada con los mensajes de error. Utilizado por los desarrolladores de bibliotecas para evitar el mensaje 'No se pudieron encontrar controladores para el registrador'. |
Conceptos básicos del registro de Python
Los conceptos básicos del uso del módulo de registro para registrar los eventos en un archivo son muy simples. Para eso, simplemente importe el módulo de la biblioteca.
- Cree y configure el registrador. Puede tener varios parámetros. Pero lo más importante es pasar el nombre del archivo en el que quieres registrar los eventos.
- Aquí también se puede configurar el formato del registrador. Por defecto, el archivo funciona en adjuntar modo pero podemos cambiarlo al modo de escritura si es necesario.
- Además, se puede configurar el nivel del registrador, que actúa como umbral para el seguimiento en función de los valores numéricos asignados a cada nivel.
Hay varios atributos que se pueden pasar como parámetros. - La lista de todos esos parámetros se proporciona en Biblioteca de Python . El usuario puede elegir el atributo requerido según el requisito.
Después de eso, cree un objeto y utilice los distintos métodos como se muestra en el ejemplo.
Registro de una variable
Este código demuestra cómo registrar un mensaje de error. La función logging.error() se utiliza para registrar un mensaje de error con un marcador de posición %s para el nombre de la variable.
Python3
import> logging> name> => 'GFG'> logging.error(> '%s raised an error'> , name)> |
Producción :
ERROR:root:GFG raised an error
Registro de todos los niveles.
Este código demuestra todos los niveles de registro.
Pitón
# 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'> )> |
El código anterior generará un archivo con el nombre proporcionado y si abrimos el archivo, el archivo contiene los siguientes datos.
Configurar el registro
Iniciar sesión en un archivo: 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]
Ejemplo:
El código configura un sistema de registro utilizando la configuración del temp.conf archivo. Obtiene un registrador llamado ejemplo sencillo y registra mensajes con varios niveles de registro.
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'> )> |
Producción :
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
Excepción de registro de Python
Generar excepciones durante el registro puede resultar útil en determinados escenarios para indicar condiciones excepcionales o errores en su aplicación. Al generar una excepción, puede detener el flujo normal de ejecución y notificar a la persona que llama o al sistema de registro sobre el problema encontrado.
En este código, generamos una excepción que el registro detecta. excepción.
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))> |
Producción :
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.