Cuando hablamos de Python, es muy frecuente usar print en temas como el debug, para mostrar en consola información que nos pueda ser de interés. El caso cambia un poco cuando estamos trabajando con proyectos aun mas grande y que tambien maneje threads y procesos, en estos casos es mucho mejor usar el módulo logging.
El módulo logging nos ayuda a mostrar información por consola, pero con más características que el print. Lo primero que hay que saber es que tenemos diferentes tipos de mensaje y a cada uno se le asigna un nivel diferente. Los niveles nos ayudarán a identificar los mensajes que se nos muestran, también a saber cuáles niveles de mensajes deseamos ver.
Tipo mensaje | Nivel |
---|---|
Debug | 10 |
Info | 20 |
Warning | 30 |
Error | 40 |
Critical | 50 |
import logging
defmessages():
logging.debug("This is a debug message")
logging.info("This is an info message")
logging.warning("This is a warning message")
logging.error("This is an error message")
logging.critical("This is a critical message")
if __name__=="__main__":
messages()
De esta forma podremos imprimir cada uno de los tipos de mensajes. Sin embargo, si ejecutamos este fragmento de código, veremos el siguiente resultado:
Como podemos ver, no se nos muestra los mensajes de tipo info ni debug, esto se debe a que por defecto, el módulo logging solo permite la visualización de los mensajes de nivel 30 o superior. Para cambiar estos valores debemos modificar la configuración base, la cual también nos permite modificar muchos más aspectos.
para configurar el módulo logging, debemos usar el método basicConfig y luego indicar que queremos modificar, entre estas configuraciones tenemos:
Configuración | Descripción |
---|---|
level | Nivel mínimo desde el cual se va a imprimir. |
format | Formato en el cual se imprime el mensaje. |
datefmt | Formato en el cual se va a mostrar la fecha (en caso de ser incluida en el formato) |
filename | Si no es nulo, enviara las salidas a un archivo en lugar de mostrarlos por consola |
Para el formato de texto, vamos a contar con algunas variables, las cuales cuentan con nombres específicos y debemos ubicar de la siguiente manera: %(variable_name)s .Si se llega a escribir texto sin esta estructura, se va a imprimir con normalidad.
Estas son algunas de las variables que podemos usar (para todos los siguientes artículos, se estará trabajando con las últimas 4 variables):
Variable | Descripción |
---|---|
levelname | Tipo de mensaje. |
name | Nombre del logging. |
pathname | Ruta del archivo. |
filename | Nombre del archivo. |
asctime | Fecha. |
funcName | Función que se está ejecutando. |
message | Mensaje personalizado |
lineon | Lineal que se está ejecutando. |
module | Modulo que se está ejecutando. |
thread | Muestra el thread que está funcionando. |
threadName | Muestra el nombre del thread. |
process | Muestra el proceso que está funcionando. |
processName | Muestra el nombre del proceso. |
Ejemplos de formatos:
Ahora veremos como se usa la configuración personalizada:
import logging
logging.basicConfig(
level=logging.DEBUG,
format=f'[%(levelname)s] | %(processName)s - %(asctime)s -> %(message)s',
datefmt='%H:%M:%S',
#filename='messages.log'
)
defmessages():
logging.debug("This is a debug message")
logging.info("This is an info message")
logging.warning("This is a warning message")
logging.error("This is an error message")
logging.critical("This is a critical message")
if __name__=="__main__":
messages()
Como podremos ver, en el parámetro level usamos una constante, nosotros podemos enviar el número del nivel pero es mejor usar las constantes que nos provee el módulo logging.
Si ejecutamos este código, veremos que ahora si imprime todos los mensajes y, además, cambia el formato en el que se muestran los mismos.
Hola!
Desearía saber de que curso son estas notas, porque lo he buscado y no encuentro el curso Programación concurrente y paralelismo, me podrías proporcionar el link de dicho curso por favor?