python - everything - loggers django
Django Setup Default Logging (3)
Como dijiste en tu respuesta , Chris, una opción para definir un registrador predeterminado es usar la cadena vacía como su clave.
Sin embargo, creo que la forma prevista es definir un registrador especial bajo la clave root
del diccionario de configuración de registro. Encontré esto en la documentación de Python :
root : esta será la configuración del registrador de raíz. El procesamiento de la configuración será como para cualquier registrador, excepto que la configuración de
propagate
no será aplicable.
Aquí está la configuración de su respuesta modificada para usar la clave root
:
LOGGING = {
''version'': 1,
''disable_existing_loggers'': True,
''formatters'': {
''standard'': {
''format'': ''%(asctime)s [%(levelname)s] %(name)s: %(message)s''
},
},
''handlers'': {
''default'': {
''level'':''DEBUG'',
''class'':''logging.handlers.RotatingFileHandler'',
''filename'': ''logs/mylog.log'',
''maxBytes'': 1024*1024*5, # 5 MB
''backupCount'': 5,
''formatter'':''standard'',
},
''request_handler'': {
''level'':''DEBUG'',
''class'':''logging.handlers.RotatingFileHandler'',
''filename'': ''logs/django_request.log'',
''maxBytes'': 1024*1024*5, # 5 MB
''backupCount'': 5,
''formatter'':''standard'',
},
},
''root'': {
''handlers'': [''default''],
''level'': ''DEBUG''
},
''loggers'': {
''django.request'': {
''handlers'': [''request_handler''],
''level'': ''DEBUG'',
''propagate'': False
},
}
}
Para ser justos, no puedo ver ninguna diferencia en el comportamiento entre las dos configuraciones. Parece que la definición de un registrador con una clave de cadena vacía modificará el registrador de raíz, ya que logging.getLogger('''')
devolverá el registrador de raíz.
La única razón por la que prefiero ''root''
''''
es que es explícita sobre la modificación del registrador de raíz. En caso de que tengas curiosidad, ''root''
sobrescribe ''''
si defines ambos, solo porque la entrada raíz se procesa al final.
Parece que no puedo encontrar la manera de configurar un registrador "predeterminado" para mi instalación de Django. Me gustaría utilizar la nueva configuración LOGGING
Django 1.3 en settings.py
.
He visto el ejemplo del Doc de registro de Django , pero me parece que solo configuran los controladores que harán el registro para los registradores en particular. En el caso de su ejemplo, configuraron el controlador para los registradores llamados ''django'', ''django.request'' y ''myproject.custom''.
Todo lo que quiero hacer es configurar un logging.handlers.RotatingFileHandler
predeterminado 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 denota por 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`!
Lo averigué...
Establece el registrador ''atrapar todo'' haciendo referencia a él con la cadena vacía: ''''
.
Como ejemplo, en la siguiente configuración tengo todos los eventos de log que se guardan en logs/mylog.log
, con la excepción de django.request
log events que se guardarán en logs/django_request.log
. Debido a que ''propagate''
está configurado en False
para mi logger django.request
, el evento log nunca alcanzará el registrador ''atrapar todo''.
LOGGING = {
''version'': 1,
''disable_existing_loggers'': True,
''formatters'': {
''standard'': {
''format'': ''%(asctime)s [%(levelname)s] %(name)s: %(message)s''
},
},
''handlers'': {
''default'': {
''level'':''DEBUG'',
''class'':''logging.handlers.RotatingFileHandler'',
''filename'': ''logs/mylog.log'',
''maxBytes'': 1024*1024*5, # 5 MB
''backupCount'': 5,
''formatter'':''standard'',
},
''request_handler'': {
''level'':''DEBUG'',
''class'':''logging.handlers.RotatingFileHandler'',
''filename'': ''logs/django_request.log'',
''maxBytes'': 1024*1024*5, # 5 MB
''backupCount'': 5,
''formatter'':''standard'',
},
},
''loggers'': {
'''': {
''handlers'': [''default''],
''level'': ''DEBUG'',
''propagate'': True
},
''django.request'': {
''handlers'': [''request_handler''],
''level'': ''DEBUG'',
''propagate'': False
},
}
}
import logging
logger = logging.getLogger(__name__)
Tras añadir:
logging.basicConfig(
level = logging.DEBUG,
format = ''%(name)s %(levelname)s %(message)s'',
)
podemos cambiar el formato a:
format = ''"%(levelname)s:%(name)s:%(message)s" '',
o
format = ''%(name)s %(asctime)s %(levelname)s %(message)s'',