Cambiando el formato de los logs en Twisted

Este post fue migrado de un blog hecho con Wordpress. Si se ve mal, dejame un comentario y lo arreglo.

En Twisted se puede tener un log de todo lo que pasa en un programa de forma bastante fácil:

from twisted.python import log

from twisted.python.logfile import DailyLogFile

log.startLogging(DailyLogFile('log.txt', LOGDIR))

Todos los prints que anden dando vuelta ahora son entradas en el log y de yapa estoy usando DailyLogFile en lugar de un archivo común y corriente para que al final del día rote a un nuevo archivo en disco. Hay varias opciones, esta es la que me sirve a mí.

Por defecto los logs se ven algo así:

2010-05-28 07:41:00-0500 [__main__.TModBusFactory] Nuevo cliente: 190.136.29.16:12101

2010-05-28 07:41:00-0500 [__main__.TModBusFactory] Total: 1

2010-05-28 07:41:01-0500 [TModBus,0,190.136.29.16] G24 dice:  :0090SFE00

2010-05-28 07:41:01-0500 [TModBus,0,190.136.29.16] SITIO SFE

2010-05-28 07:41:01-0500 [TModBus,0,190.136.29.16] Nuevo sitio registrado en MBProxy SFE

2010-05-28 07:45:49-0500 [__main__.TModBusFactory] Nuevo cliente: 190.136.29.16:30519

2010-05-28 07:45:49-0500 [__main__.TModBusFactory] Total: 2

2010-05-28 07:45:49-0500 [TModBus,1,190.136.29.16] G24 dice:  :0090SFE00

2010-05-28 07:45:49-0500 [TModBus,1,190.136.29.16] SITIO SFE

2010-05-28 07:45:49-0500 [TModBus,1,190.136.29.16] SFE ya estaba conectado. Borrando anterior.

2010-05-28 07:45:51-0500 [TModBus,1,190.136.29.16] Nuevo sitio registrado en MBProxy SFE

¿Cómo podemos cambiar el formato de salida? Algunos tips.

Para cambiar el formato de la fecha y hora:

log.FileLogObserver.timeFormat = '%Y-%m-%d %H:%M:%S'

Para cambiar lo que aparece entre corchetes: utilizar log.msg y el keyword system:

log.msg("Nuevo cliente: %s:%d" % (self.peer.host, self.peer.port), system=' - ')

Con estos dos cambios se puede tener un log como este:

2010-05-28 07:41:00 [ - ] Nuevo cliente: 190.136.29.16:12101

2010-05-28 07:41:00 [ - ] Total: 1

2010-05-28 07:41:01 [SFE] G24 dice:  :0090SFE00

2010-05-28 07:41:01 [SFE] SITIO SFE

2010-05-28 07:41:01 [SFE] Nuevo sitio registrado en MBProxy SFE

2010-05-28 07:45:49 [ - ] Nuevo cliente: 190.136.29.16:30519

2010-05-28 07:45:49 [ - ] Total: 2

2010-05-28 07:45:49 [ - ] G24 dice:  :0090SFE00

2010-05-28 07:45:49 [SFE] SITIO SFE

2010-05-28 07:45:49 [SFE] SFE ya estaba conectado. Borrando anterior.

2010-05-28 07:45:51 [SFE] Nuevo sitio registrado en MBProxy SFE

Para cambiar aún más el formato de la salida, la única forma que encontré es extender FileLogObserver y sobreescribir su método emit. Discutimos un poco esto en StackOverflow.

nota: En Twisted también podemos usar el sistema de logging de Python, esto tiene la ventaja de que podemos trabajar con niveles de log y controlar mejor el formato y la forma en que se generan los logs, pero el problema de que no está preparado para funcionar en forma asincrónica y esto puede traer algunos problemas con Twisted.

Comentarios

Comments powered by Disqus