logging con colorcitos en Python

Python

logging es un módulo de la librería estándar de Python para “imprimir” mensajes de log. En esta receta se explica cómo conseguir que cada tipo de mensaje aparezca en consola con un color diferente.

Ingredientes

  • Python

Introducción

logging es un módulo muy flexible, es thread-safe, permite especificar la gravedad de cada mensaje, filtrar mensajes por debajo del umbral deseado, crear varios “loggers” para distintos propósitos dentro del programa, enviar los mensajes a un fichero, por un socket, con correo electrónico y mil cosas más.

Por su diseño orientado a objetos, es muy sencillo crear nuevas maneras de formatear los mensajes, niveles, manejadores y casi cualquier cosa que puedan necesitar de un sistema de logging. En esta receta voy a hacer una clase Formatter para usar en la consola.

La clase ColorFormatter

Como suele ocurrir en Python, el código es tan simple que resulta insultante:

import logging
 
class ColorFormatter(logging.Formatter):
 
    def color(self, level=None):
        codes = {\
            None:       (0,   0),
            'DEBUG':    (0,   2), # gris
            'INFO':     (0,   0), # normal
            'WARNING':  (1,  34), # azul
            'ERROR':    (1,  31), # rojo
            'CRITICAL': (1, 101), # negro, fondo rojo
            }
        return (chr(27)+'[%d;%dm') % codes[level]
 
    def format(self, record):
        retval = logging.Formatter.format(self, record)
        return self.color(record.levelname) + retval + self.color()

Y un ejemplo de uso

import logging
 
console = logging.StreamHandler()
console.setLevel(logging.DEBUG)
console.setFormatter(ColorFormatter('    s[(name)s]: %(message)s'))
logging.getLogger().addHandler(console)
 
logging.debug('mensaje para depuración')
logging.info('información')
logging.warning('el que avisa no es traidor')
logging.error('un errorcillo')
logging.critical('y la liaste parda')

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Dudas

Hola viejo!

Estoy tratando de aprender Python y en esas me encontre este post; pero una de las cosas que noté es que tienes un error muy simple, te falto cerrar uno de los parenesis en el ejemplo de codigo de uso. Ahora, me duda es: como debo nobrar los archivos que contengan estos dos ejemplos? Ademas, que si no dependen de un nombre especifico, a mí no me corre.
Qué hago? estoy aprendiendo...

Imagen de david.villa

Arreglado el errorcillo.

Arreglado el errorcillo. Contestando a tu pregunta, todo ese código lo puedes meter en un solo fichero si los quieres probar y le puedes poner el nombre que quieras, solo ten la precaución de que no se llame igual que un módulo de Python. Le puedes poner por ejemplo logutil.py.

No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.