![Los 11 Mejores Emuladores de Raspberry Pi](https://trspos.com/wp-content/uploads/11-los-mejores-emuladores-de-raspberry-pi-400x267.jpg)
25 Ejemplos de Logging en Python
![25 Ejemplos de Logging en Python](https://trspos.com/wp-content/uploads/ejemplos-de-registro-de-python.jpg)
La creación y manejo de logs es una tarea esencial en cualquier aplicación o sistema. Python ofrece una herramienta integrada llamada `logging` que facilita mucho el proceso de creación y manejo de logs. En este artículo, vamos a explorar 25 ejemplos de cómo utilizar el módulo `logging` en Python para crear logs en diferentes formatos y niveles de detalle. Aprenderás cómo agregar información a los logs, personalizar su formato, rotarlos, emitir logs en diferentes canales, entre otros aspectos.
Configuración básica
Antes de empezar a ejemplificar cómo se puede personalizar la creación de logs, es importante conocer cómo se puede configurar la información básica que se muestra en los logs:
Configurar nivel de los logs
Para establecer el nivel de los logs ($DEBUG, INFO, WARNING, ERROR o CRITICAL) se utiliza la siguiente línea de código:
import logging
logging.basicConfig(level=logging.DEBUG)
Establece el nivel de log en DEBUG. Todos los logs con este nivel o un nivel superior se imprimirán en la consola.
Configurar formato de los logs
El formato predeterminado de los logs no siempre es el más conveniente, es posible personalizar el formato utilizando el siguiente código:
import logging
logging.basicConfig(format='%(asctime)s %(levelname)s:%(message)s')
El formato predeterminado de los logs consta de la fecha y hora del log, el nivel de registro y el mensaje en sí. La cadena `%(asctime)s` especifica el formato de la fecha y hora, mientras que la cadena `%(levelname)s` especifica el nivel de registro y la cadena `%(message)s` especifica el mensaje en sí.
Personalización de la configuración del log
Ahora presentamos un ejemplo más avanzado sobre cómo personalizar la configuración de los logs:
Dos tipos de logs
En algunos entornos de producción, es útil generar logs en dos niveles diferentes: uno para usuario final, que es detallado pero con información básica, y otro para pruebas e inspección, que es extremo y detallado. Para ello, se puede utilizar el siguiente codigo para inicializar dos logs:
import logging
# Configurar logger principal de la aplicación
logger = logging.getLogger('my_application')
logger.setLevel(logging.INFO)
# Configurar logger para debug
debug_logger = logging.getLogger('debug_logger')
debug_logger.setLevel(logging.DEBUG)
Agregar información adicional a los logs
A veces es útil agregar información adicional a los logs, como el nombre del módulo o la función que generó el log, la línea de código en la que se generó el log y el nombre de usuario del cliente. A continuación, presentamos un ejemplo sobre cómo hacerlo:
import logging
# Configuración básica
logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s',
level=logging.DEBUG,
filename='logs.log',
filemode='a')
def function():
logging.info('Se llamó a la función')
if __name__ == '__main__':
function()
El `%(name)s` se refiere al nombre del logger que se establece con logging.getLogger, mientras que el `%(lineno)d` se refiere al número de línea donde se emitió ese registro de logging.
Emitir logs en diferentes canales
Puede ser útil emitir logs a diferentes canales, como archivos de log y servidores de syslog. Para hacerlo, utilizamos la opción `handlers`:
import logging
# Configurar logger principal de la aplicación
logger = logging.getLogger('my_application')
logger.setLevel(logging.INFO)
# Configurar manejadores de logs (logs en archivo y en consola)
file_handler = logging.FileHandler('logs.log')
console_handler = logging.StreamHandler()
# Asignar formato a los handlers
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)
# Agregar los handlers
logger.addHandler(file_handler)
logger.addHandler(console_handler)
# Emitir logs
logger.info('Mensaje de información útil para el usuario')
logger.warning('Cuidado, algo puede salir mal')
logger.error('Algo salió mal')
Rotación de logs
En entornos de producción, es común tener que rotar los archivos de log para mantenerlos en un tamaño manejable. Para hacerlo, utilizamos el módulo `RotatingFileHandler`:
import logging.handlers
# Configurar logger principal de la aplicación
logger = logging.getLogger('my_application')
logger.setLevel(logging.INFO)
# Configurar manejador de rotación de logs
handler = logging.handlers.RotatingFileHandler(
'logs.log',
maxBytes=10,
backupCount=5
)
# Asignar formato al handler
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
# Agregar handler y emitir logs
logger.addHandler(handler)
logger.info('Mensaje de información útil para el usuario')
logger.warning('Cuidado, algo puede salir mal')
Conclusión
En este artículo exploramos diferentes opciones para personalizar la creación y manejo de logs en Python utilizando el módulo `logging`. Esperamos que haya sido de ayuda y te permita mejorar y optimizar el manejo de logs en tus desarrollos. Si tienes alguna duda o comentario, no dudes en dejar una respuesta en la sección de preguntas frecuentes a continuación.
Preguntas frecuentes
¿Puedo agregar información personalizada a los logs en Python??
Sí, se puede agregar información personalizada a los logs en Python utilizando la opción `extra`. Ve a la sección "Agregar información adicional a los logs" para conocer un ejemplo.
¿Cómo puedo rotar archivos de log en Python?
Se puede rotar archivos de log en Python utilizando el siguiente código, ve a la sección "Rotación de logs" para conocer un ejemplo:
import logging.handlers
# Configurar logger principal de la aplicación
logger = logging.getLogger('my_application')
logger.setLevel(logging.INFO)
# Configurar manejador de rotación de logs
handler = logging.handlers.RotatingFileHandler(
'logs.log',
maxBytes=10,
backupCount=5
)
# Asignar formato al handler
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
# Agregar handler y emitir logs
logger.addHandler(handler)
logger.info('Mensaje de información útil para el usuario')
logger.warning('Cuidado, algo puede salir mal')
¿Cómo puedo especificar diferentes manejadores para logs en Python?
Se pueden especificar diferentes manejadores para logs en Python utilizando la opción `handlers`. Ve a la sección "Emitir logs en diferentes canales" para conocer un ejemplo.
¿Cuál es el nivel de logs por defecto en Python?
El nivel por defecto es `WARNING`, lo que significa que los logs con nivel `WARNING`, `ERROR`, y `CRITICAL` se imprimirán por defecto al ejecutar una aplicación que utiliza logging. También es posible cambiar el nivel por defecto utilizando la opción `basicConfig`.
Deja una respuesta