Establecer niveles de registro usando setLevel() en Python
- Función de iniciar sesión en un programa en Python
- Niveles de mensajes de registro en Python
-
Establecer niveles de registro mediante la función
setLevel()
en el módulo de registro de Python - Controladores de registro en Python
- Conclusión
El registro es una herramienta muy eficiente en la vida de cualquier programador. No solo nos ayuda a comprender mejor el flujo del programa, sino también las posibilidades de errores que pueden ocurrir durante la ejecución del programa.
Python proporciona un módulo de registro
separado como parte de su biblioteca estándar para facilitar el registro. Este artículo discutirá el registro setLevel
y cómo funciona en Python.
Función de iniciar sesión en un programa en Python
El registro es un proceso para rastrear el flujo del programa cuando se ejecuta el software. Sin embargo, si no implementa el inicio de sesión en su programa, cada vez que el programa falla, es difícil encontrar la raíz del problema que ha ocurrido.
Con el registro implementado en su programa, puede encontrar fácilmente la raíz del problema y resolverlo en poco tiempo. Es muy útil al depurar y desarrollar software.
A veces, la gente usa la instrucción print
para encontrar los problemas en el software. La impresión puede resolver los problemas de los scripts simples, pero no es una buena opción para software más grande y complejo.
Python proporciona un módulo incorporado llamado registro
de su biblioteca estándar que escribe mensajes de estado en cualquier flujo de salida o un archivo sobre qué parte del programa se está ejecutando y qué problemas se han causado.
Niveles de mensajes de registro en Python
El módulo de registro
en Python tiene diferentes niveles de mensajes de estado/registro en función de su importancia. Por lo tanto, el nivel de un mensaje de registro indica la importancia de ese mensaje de registro.
Los diferentes niveles de los mensajes de registro son los siguientes: DEBUG
, INFO
, WARNING
, ERROR
y CRITICAL
, donde CRITICAL
tiene la mayor importancia.
Nivel de registro | Descripción |
---|---|
DEBUG |
Se utiliza con fines de depuración en el software. Por lo general, brinda información detallada cuando ocurre un problema. |
INFO |
Se asegura de que todo funcione bien en un programa. |
WARNING |
Se utiliza para indicar que algún problema podría ocurrir en el futuro y debe resolverse para evitar problemas futuros. |
ERROR |
Se utiliza para indicar que el software no ha podido realizar una función específica debido a un problema grave. |
CRITICAL |
Este nivel significa un problema grave que provoca la detención del software. |
Todos estos niveles se configuran para el controlador o registrador de modo que se puedan mostrar los mensajes apropiados en los momentos apropiados cuando ocurre el error. Los niveles de registro se explican anteriormente en función de su importancia, siendo el primero el menos importante y el último (nivel CRÍTICO
) el más importante.
Establecer niveles de registro mediante la función setLevel()
en el módulo de registro de Python
La función setLevel(level)
se utiliza para establecer el umbral de un registrador en el nivel especificado. Los mensajes de registro menos graves que el nivel especificado se ignoran, mientras que los mensajes con mayor gravedad son emitidos por el controlador correspondiente que da servicio al registrador.
Iniciar sesión en Python tiene un concepto de nivel efectivo. Inicialmente, cuando se crea un registrador, se establece en un nivel NOTSET
.
Sin embargo, este NOTSET
no es el nivel efectivo. El nivel efectivo es el que se ha establecido explícitamente con la ayuda de setLevel(level)
.
Cuando se crea un registrador, si su nivel no se establece explícitamente, entonces se examina el nivel de su registrador principal para obtener un nivel efectivo para el registrador, que se habría establecido explícitamente utilizando setLevel(level)
. Si el registrador principal tampoco se ha establecido en un nivel efectivo, entonces se verifica su registrador principal.
El proceso continúa hasta que se encuentra un nivel diferente a NOTSET
o se llega a la raíz. El registrador raíz está configurado con un nivel predeterminado de ADVERTENCIA
; por lo tanto, el nivel predeterminado de la raíz se consideraría el nivel efectivo en tales casos.
Ahora, veamos el uso de setLevel(level)
usando algunos ejemplos de código.
import logging
logging.debug("Debug message")
logging.info("Info message")
logging.warning("Warning message")
logging.error("Error message")
logging.critical("Critical message")
Producción :
WARNING:root:Warning message
ERROR:root:Error message
CRITICAL:root:Critical message
Como se ve en el resultado anterior, solo se imprimen los mensajes ADVERTENCIA
, ERROR
y CRITICAL
porque el nivel predeterminado ADVERTENCIA
del registrador raíz se ha considerado el nivel efectivo ya que no se especifica ningún otro registrador o su padre. Por lo tanto, todos los mensajes del nivel ADVERTENCIA
y posteriores se están imprimiendo, y los menos importantes se ignoran.
Veamos un ejemplo en el que el registrador considera el nivel efectivo como el nivel del padre.
import logging
parent_logger = logging.getLogger("parent")
parent_logger.setLevel(4)
child_logger = logging.getLogger("parent.child")
print(parent_logger.getEffectiveLevel())
print(child_logger.getEffectiveLevel())
Producción :
4
4
Como puede ver, child_logger
no se ha establecido en un nivel efectivo, por lo que el nivel de parent_logger
se usa como el nivel efectivo.
Controladores de registro en Python
Los controladores en Python son objetos responsables de registrar los mensajes de registro apropiados en el destino especificado del controlador; estos controladores también funcionan como registradores. Si un registrador no tiene un controlador establecido, se busca un controlador en sus ancestros.
Veamos ahora el uso de controladores en el registro:
import logging
logger = logging.getLogger("example")
logger.setLevel(logging.INFO)
fileHandler = logging.FileHandler("p1.log")
fileHandler.setLevel(logging.INFO)
chl = logging.StreamHandler()
chl.setLevel(logging.INFO)
logger.addHandler(fileHandler)
logger.addHandler(chl)
logger.info("Information")
Producción :
Information
Creamos dos controladores en el código anterior: fileHandler
y chl
. El fileHandler
envía los registros al archivo p1.log
, y el controlador chl
envía los registros al flujo.
Sin embargo, si no se especifica la secuencia, se utiliza sys.stderr
. Al final, los controladores se agregan al registrador usando el addHandler
.
Ahora debe preguntarse por qué hemos configurado el nivel dos veces: uno para el registrador y otro para los controladores. Puede eliminar el setLevel()
en los controladores, lo que dejará todo el nivel de filtrado de los mensajes al registrador.
Sin embargo, si establece el nivel para los controladores y el registrador, hay un escenario diferente. El registrador es el primero en filtrar los mensajes según el nivel; por lo tanto, si configura el registrador en “ADVERTENCIA”, INFO
o cualquier nivel superior y el controlador en DEBUG
, no recibirá ningún mensaje de registro DEBUG
ya que el registrador en primer lugar lo ignora.
De manera similar, si configura el registrador en DEBUG
y los controladores en cualquier nivel superior, como INFO
, tampoco recibirá ningún mensaje DEBUG
ya que los controladores los rechazarán. El manejador lo rechaza incluso si el registrador lo aprueba (desde INFO
> DEBUG
).
Por lo tanto, se debe tener cuidado al configurar los niveles para el registrador y los controladores para garantizar el correcto funcionamiento del software.
Conclusión
En este artículo, hemos discutido el registro setLevel()
y cómo funciona en Python.
El registro es una herramienta muy eficiente para administrar el código del software o un programa al registrar el flujo del programa y encontrar las posibilidades del error. Para iniciar sesión en Python, establecemos diferentes niveles para diferentes mensajes de registro en función de su importancia.
Todos estos niveles se configuran mediante el setLevel
, que se ha explicado con gran detalle en este artículo.