Py05 Logging Con Python
Py05 Logging Con Python
Introducción
Logging dentro de un único script
Salida por consola
Salida por fichero
Salida por consola y varios fichero
Logging entre varios scripts
Introducción
Por defecto, esto módulo tiene predefinidos 5 niveles para los logs,
ordenados de menor a mayor criticidad:
• DEBUG
• INFO
• WARNING
• ERROR
• CRITICAL
# Nuevos handlers
#
------------------------------------------------------
-----------------------
# Se añaden dos nuevos handlers al root logger, uno pa
ra los niveles de debug o
# superiores y otro para que se muestre por pantalla l
os niveles de info o
# superiores.
#import logging
#def suma(a,b):
# if not isinstance(a, (int, float)) \
# or not isinstance(b, (int, float)):
# raise Exception(
# logging.error("a y b deben ser números")
# )
# logging.info('función suma ejecutada')
# return(a+b)
Tabla de contenidos In [22]: # ======================= MAIN SCRIPT ================
============================
Introducción
import logging
Logging dentro de un único script
from funcion_suma import suma # Esta función tiene sus
Salida por consola
propios logs
Salida por fichero
Salida por consola y varios fichero # Definición del logger root
Logging entre varios scripts #
Opción 1: Utilizar solo el logger root del main scri
------------------------------------------------------
Opción 2: Utilizar el logger root creado en el-----------------------
main
Información de sesión logging.basicConfig(
format = '%(asctime)-5s %(name)-15s %(levelname)-8
s %(message)s',
level = logging.INFO,
filemode = "a"
)
# Nuevos handlers
#
------------------------------------------------------
-----------------------
# Si el root logger ya tiene handlers, se eliminan ant
es de añadir los nuevos.
# Esto es importante para que los logs no empiezen a d
uplicarse.
if logging.getLogger('').hasHandlers():
logging.getLogger('').handlers.clear()
consola_handler = logging.StreamHandler()
consola_handler.setLevel(logging.INFO)
consola_handler_format = logging.Formatter('%(asctim
e)-5s %(name)-15s %(levelname)-8s %(message)s')
consola_handler.setFormatter(consola_handler_format)
logging.getLogger('').addHandler(consola_handler)
suma(1,3)
logging.shutdown()
Esta forma tiene las mismas ventajas que el anterior ejemplo pero,
además, permite saber de qué script procede cada log.
Tabla de contenidos In [23]: # El contenido del archivo funcion_suma_1.py es:
#import logging
Introducción
#logger = logging.getLogger("").getChild(__name__)
Logging dentro de un único script
Salida por consola
#def suma(a,b):
Salida por fichero # if not isinstance(a, (int, float)) \
Salida por consola y varios fichero # or not isinstance(b, (int, float)):
Logging entre varios scripts # raise Exception(
Opción 1: Utilizar solo el logger root del main
# scri logger.error("a y b deben ser números")
Opción 2: Utilizar el logger root creado en el#main )
Información de sesión # logger.info('función suma ejecutada')
# return(a+b)
import logging
from funcion_suma_1 import suma # Esta función tiene s
us propios logs
# Nuevos handlers
#
------------------------------------------------------
-----------------------
# Si el root logger ya tiene handlers, se eliminan ant
es de añadir los nuevos.
# Esto es importante para que los logs no empiezen a d
uplicarse.
if logging.getLogger('').hasHandlers():
logging.getLogger('').handlers.clear()
consola_handler = logging.StreamHandler()
consola_handler.setLevel(logging.INFO)
consola_handler_format = logging.Formatter('%(asctim
e)-5s %(name)-15s %(levelname)-8s %(message)s')
consola_handler.setFormatter(consola_handler_format)
logging.getLogger('').addHandler(consola_handler)
suma(1,3)
logging.shutdown()