xmanoel@


¿No hay logs en Django?

Mientras estaba haciendo unas pruebas ayer con la página me ha dejado desconcertado algo. Estaba preparando la página para que pasasen por aquí las arañas de los buscadores (Google, Yahoo, Baidu,...) Y otros más chungos que a saber a que se dedican. Porque es lo que tienen las páginas estas de andar por casa como la mía, tengo casi más visitas de robots que de peña. Bueno, pues esta visita de los robots me servirá para investigar que tal aguanta de rendimiento mi página.

Claro, entonces mi idea es esperar unos cuantos días y ver en los logs de la aplicación si aparece algún error inesperado y ver si esta relacionado con la visita de algún robot o algo así. Pero entonces me he dado cuenta... En Django no veo ningún fichero de log.

El funcionamiento de logs me deja un poco sorprendido. Tiene dos funcionamientos (regulado por la constante DEBUG en el settings.py.

  • Modo de desarollo (DEBUG = True). Si hay algún error se muestra una pantalla de error en el navegador. (Por otro lado si hay algún error de otro usuario que este conectado al mismo tiempo: ¿que pasa? ¿te lo pierdes?).
  • Modo de producción (DEBUG = False). Si hay algún error no se muestra nada al usuario. Se envia un mail muy detallado a alguno de los ADMINS. (Si el correo esta bien configurado o si no revienta en el intento: yo no he conseguido recibir ningún correo).

Me deja un poco desconcertado que ninguno de los programadores de Django haya considerado importante el incorporar algún tipo de logging. Casi cualquier otra framework que conozco suele incluir un componente para esto. Y en cuanto a mi, personalmente, me parece muy importante tener logs (no solo para el depurado, si no sobre todo para producción). (De hecho siendo malos - para incomodar un poco a los Pythoneros - Ruby on Rails viene por defecto con unos logs fantásticos).

Antes de que se me insulte y todo esto: estoy abierto a nuevas metodologías y si aprendo que es bueno no tener logs pues me adaptaré. Pero de momento no veo el porqué. De hecho he visto que hay un par de middlewares que proporcionan logging para Django:

  • django-logging: Contrariamente a lo que pone el nombre, no hace lo que yo considero logging. Nada de grabar en ficheros ni nada. Tan sólo permite en modo de desarrollo (DEBUG = True) mensajes más detallados del funcionamiento de Django.
  • django-db-log: Este ya es un poquitín más lo que yo me espero. Aparte de enviar los emails, los errores que surgen en la aplicación se almacenan en la base de datos. El problema es... ¿logs en la base de datos? Nunca me han parecido necesarios este tipo de logs. Con ficheros va de sobra (por ser cronológicos a los logs les pega de maravilla un fichero).

Me queda investigar estas dos aplicaciones a ver si saco ideas y a lo mejor que preparo mi propio sistema de logs (si antes no me convenzo que no es necesario tener tales logs, ¡que alguien me lo explique!).

Tal vez esta necesidad de logs detallados es un problema muy propio mío. Mi aplicación se está ejecutando usando el módulo fcgi.py y por lo que he visto, en este entorno la salida standard de python no se guarda. Los únicos errores que veo en los logs de Apache son bastante cripticos:


[Sun Jan 11 13:53:34 2009] [error] [client xx.xx.xx.xx] Premature end of script headers: dispatch.fcgi, referer: http://django.xmanoel.net/posts/
[Sun Jan 11 14:02:48 2009] [error] [client xx.xx.xx.xx] Premature end of script headers: dispatch.fcgi

12 January 2009