Parece que no puedo entender cómo configurar un registrador "predeterminado" para mi instalación de Django. Me gustaría usar la nueva LOGGING
configuración de Django 1.3 en settings.py
.
He visto el ejemplo de Django Logging Doc , pero me parece que solo configuran controladores que harán registros para registradores particulares. En el caso de su ejemplo, configuraron un controlador para los registradores llamados 'django', 'django.request' y 'myproject.custom'.
Todo lo que quiero hacer es configurar un valor predeterminado logging.handlers.RotatingFileHandler
que manejará todos los registradores de forma predeterminada. es decir, si hago un nuevo módulo en algún lugar de mi proyecto y se indica con algo como:, my_app_name.my_new_module
debería poder hacer esto y hacer que todos los registros vayan a los registros de archivos rotativos.
# In file './my_app_name/my_new_module.py'
import logging
logger = logging.getLogger('my_app_name.my_new_module')
logger.debug('Hello logs!') # <-- This should get logged to my RotatingFileHandler that I setup in `settings.py`!
logs/
primero debes crear la carpeta :-). De lo contrario, obtendrá un error cuando ejecute./manange.py runserver
. @Chris W. Gracias por su ejemplo de configuración de registro. ¡Me ayudo mucho!logger = logging.getLogger('foo'); logger.warn('bar');
, eldefault
controlador detectará ese registro y algo así<time> WARN: foo: bar
terminará enlogs/mylog.log
Como dijiste en tu respuesta , Chris, una opción para definir un registrador predeterminado es usar la cadena vacía como clave.
Sin embargo, creo que la forma prevista es definir un registrador especial bajo la
root
clave del diccionario de configuración de registro. Encontré esto en la documentación de Python :Aquí está la configuración de su respuesta cambiada para usar la
root
clave:Para ser justos, no veo ninguna diferencia de comportamiento entre las dos configuraciones. Parece que definir un registrador con una clave de cadena vacía modificará el registrador raíz, porque
logging.getLogger('')
devolverá el registrador raíz.La única razón por la que prefiero
'root'
más''
es que es explícito acerca de cómo modificar el registrador raíz. En caso de que tenga curiosidad,'root'
anula''
si define ambos, solo porque la entrada raíz se procesa en último lugar.fuente
root
entrada a la raíz del dict en el proceso de transición sin problemas de la lógica 2.6 fileConfig a 2.7 dictConfig one.Tras añadir:
podemos cambiar el formato a:
o
fuente
Hice una muestra rápida para verificar qué configuración se usa cuando se hace referencia tanto a la
root
clave como al''
registrador vacío en el dictado de configuración.Imprime el siguiente resultado:
lo que indica que la configuración bajo
root
clave tiene la máxima prioridad. Si se elimina el bloque, el resultado es:En ambos casos, pude depurar y determinar que los tres registradores (
l1
,l2
yroot
) hacían referencia a la misma instancia de registrador, el registrador raíz.Espero que ayude a otros que, como yo, estaban confundidos por las 2 formas diferentes de configurar el registrador raíz.
fuente