Ok, muchísimas gracias, era justo lo que necesitaba. Al final lo dejé así:
Código:
from django.conf import settings
import traceback
import sys
import logging
class PruebaMiddleware:
def obtenerUsuario(self, request):
...
def process_exception(self, request, exception):
try:
tb = sys.exc_info()[2]
ubicacion = traceback.extract_tb(tb).pop()
mensaje = u'Tipo de excepción: %s\nValor: %s\nArchivo, línea, funcion: %s, %s, %s\nUsuario: %s\nEstado: Sin reparar' % (type(exception).__name__,
exception.__unicode__(),
ubicacion[0],
ubicacion[1],
ubicacion[2],
self.obtenerUsuario(request))
logging.basicConfig(filename = settings.ARCHIVO_LOG, filemode = 'a', format='Nivel: %(levelname)s\nFecha-hora: %(asctime)s\n%(message)s\n', level=logging.ERROR)
logging.error(mensaje)
except:
pass
return None
Una cosa que no pude comprender del todo es, al cambiar el nivel a DEBUG me almacena no sólo datos provenientes de las excepción, si no también datos de otras operaciones realizadas por el middleware, como las de comprobación de sesiones y otros. Tendrá esto que ver más con Django que Python?, pero es sólo una duda.
-------------------------------------
Nivel: DEBUG
Fecha-hora: 2011-09-20 12:47:26,352
(0.002) SAVEPOINT s121....5408_x1; args=()
Nivel: DEBUG
Fecha-hora: 2011-09-20 12:47:26,358
(0.002) SELECT (1) AS "a" FROM "django_session" WHERE "django_session"."session_key" = E'.....' LIMIT 1; args=('....',)
Nivel: DEBUG
Fecha-hora: 2011-09-20 12:47:26,364
(0.003) UPDATE "django_session" SET "session_data" = ........', '.....')
Nivel: DEBUG
Fecha-hora: 2011-09-20 12:47:46,431
------ MI ERROR -----
-------------------------------------
Bueno, Django tambień tiene un módulo de logging que se basa en estas librerías de Python, pero me parecieron (corríjanme si me equivoco) más enfocadas al envío de correos avisando la situación, que al almacenamiento de errores en un log.
Saludos.