log python django logging

python - log - No se encontraron controladores para el registrador



logging in django project (2)

Creo que has entendido mal lo que es un Handler en el contexto del paquete de logging .

Un controlador es un objeto que se adjunta a un registrador. Cada vez que el registrador tiene un mensaje que procesar, envía el mensaje a todos sus manejadores. Además, los registradores existen en una estructura de árbol, con el registrador apropiadamente llamado "raíz" en su raíz. Después de enviar un mensaje a sus manejadores, un registrador puede pasarlo a su padre en el árbol (determinado por el atributo de propagate la instancia del propagate ).

Dejando de lado un poco de humor, una vez encontré un error de aplicación en el que alguien comenzó a usar el Logger llamado "root", que es diferente del Root Logger.

No utilice el registrador raíz (accedido por logging.info y la compañía, o logging.getLogger() ). Cualquier controlador que adjunte o la configuración que modifique también afectará a las bibliotecas de buen comportamiento que propagan sus errores hasta el registrador raíz. Caso en cuestión: una vez escribí un script simple usando el logger raíz por pereza. Luego incorporé algunas llamadas a boto y obtuve una explosión de mensajes de depuración que se estaban propagando al registrador raíz. Se recomienda que siempre cree un registrador cuyo nombre coincida con el nombre de su paquete en el espacio de nombres (esto también conduce a una estructura de herencia agradable con la interpretación de getLogger de . ) logging.getLogger(__name__) creación de registradores con logging.getLogger(__name__)

Recomiendo encarecidamente leer detenidamente la sección sobre Objetos de logging en los documentos de logging : https://docs.python.org/2/library/logging.html

Puede notar que su configuración también especifica un Formatter . Los formateadores manejan la presentación de un mensaje cuando lo procesa un manejador, de modo que un solo mensaje puede tener un formato diferente para la salida del terminal que para, por ejemplo, rsyslog.

Dicho todo esto, para corregir su código puede usar el registrador que ha creado y simplemente adjuntarle un controlador. Recomendaría crear un StreamHandler (la clase de Handler base no está diseñada para ser instanciada, pero por razones horribles no es un ABC), ya que cubre muchos casos de uso típicos.

myhandler = logging.StreamHandler() # writes to stderr myformatter = logging.Formatter(fmt=''%(levelname)s: %(message)s'') myhandler.setFormatter(myformatter) logger.addHandler(myhandler)

Sin embargo, parece que la configuración de Django ya incluye mucha de esta información, no configurada de la forma en que hago las cosas anteriores, por supuesto. No habiendo escrito realmente aplicaciones Django, no quiero darle información incorrecta sobre esto, pero Django proporciona documentos interesantes aquí: https://docs.djangoproject.com/en/dev/topics/logging/

Soy novato en Django. Estoy intentando el registro de Django ahora. Mientras lo intento, recibo este error ["No se encontraron controladores para el registrador" muestra ""]. Ahí está mi código,

(En mi settings.py)

LOGGING = { ''version'': 1, ''disable_existing_loggers'': False, ''formatters'': { ''simple'': { ''format'': ''%(asctime)s %(levelname)s %(name)s %(message)s'' }, }, ''handlers'': { ''default'': { ''level'':''DEBUG'', ''class'':''logging.handlers.RotatingFileHandler'', ''filename'': ''/home/linuxuser/mani/f/logs/msg.log'', ''maxBytes'': 1024*1024*5, # 5 MB ''backupCount'': 5, ''formatter'':''simple'', }, }, ''loggers'': { ''sample'': { ''handlers'': [''default''], ''level'': ''DEBUG'', ''propagate'': True, }, } }

(En mi views.py)

import logging import logging.handlers from django.conf import settings logger = logging.getLogger(''sample'') def empdel(request,id): e = get_object_or_404(emp, pk=id) e.delete() logger.info(''A row is deleted successfully !!!'') return HttpResponseRedirect(''/empthanks/'')

Mientras ejecutaba este código, recibí este error, es decir ["No se encontraron controladores para el registrador" muestra ""] . ¿Qué hay de malo en mi código? ¿Por qué recibo un error de este tipo aunque esté utilizando un controlador en LOGGING? y también estoy intentando guardar el mensaje de registro en el archivo que he usado en LOGGING ... ¿alguna idea? Gracias por adelantado !!!


Los documentos no están muy claros acerca de esto, pero cuando utiliza la funcionalidad incorporada para especificar la configuración de registro, no necesita obtener una instancia del registrador.

Simplemente harías lo siguiente:

import logging def empdel(request,id): e = get_object_or_404(emp, pk=id) e.delete() logging.info(''A row is deleted successfully !!!'') return HttpResponseRedirect(''/empthanks/'')