| Author: Eduardo Enriquez

Logging en Python: aprender a usarlo y abandonar por completo los prints.

Hay que abandonar los prints y empezar a usar logging. Los logs son mucho mejores que los prints porque te permiten prenderlos y apagarlos seg煤n se los necesite y adem谩s permite una salida con tiempo.

El ejemplo m谩s basico est谩 en la documentaci贸n oficial de python:

import logging

# Esto se va a imprimir
logging.warning('Un warning es un nivel que se imprime por default') 

# Lo que sigue no se va a imprimir
logging.info('Esto imprime cuando est谩 activado el nivel info')  

Este peque帽o c贸digo imprime:

WARNING:root:Un warning es un nivel que se imprime por default

O sea que se imprime el nivel, en este caso, warning, root que por ahora no importa y luego nuestro mensaje. Pero bueno ese es el uso m谩s b谩sico para un script, digamos. Pero podemos ademas darle un poco m谩s si modificamos los valores de logging por default.

import logging

# Aca modificamos la configuraci贸n b谩sica especificando el nivel y el lugar para loguear
logging.basicConfig(filename='example.log',level=logging.DEBUG)


logging.debug('Este mensaje va al archivo')
logging.info('Este tambi茅n')
logging.warning('y el warning tambi茅n')

La clave aqu铆 es basicConfig con este metodo podemos especificar un mont贸n de cosas para nuestros logs. Por ejemplo para agregar la hora:

import logging

logging.basicConfig(format='%(asctime)s %(message)s')

logging.warning('is when this event was logged.')

Pero bueno hay muchas opciones para configurar los logs. Logging permite desde un archivo tipo logging_config.ini para configurar los logs, pasando por dict de config o seteando todo a mano para poder tener m谩s versatilidad:

import logging

logger = logging.getLogger()
handler = logging.StreamHandler()
formatter = logging.Formatter(
        '%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)


logger.info("msj con tiempo")

# 2017-10-25 23:49:43,579 root         INFO     war

Adem谩s si tenemos una aplicaci贸n podemos interactuar con la configuraci贸n ya establecida. Pero para esas cosas les dejo un link bastante copado:聽 Logging 鈥 The Hitchhiker's Guide to Python

Por 煤ltimo ese root que aparecia al principio se puede cambiar:

import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

logger.info('Start reading database')
# esto imprime:
# INFO:__main__:Start reading database

Bueno en este caso usamos el __name__ para imprimir y como es un script el name es main, pero se puede poner un nomre m谩s amigable. Otro buen link, pero tambi茅n en ingles, es: good-logging-practice-in-python

Related Posts