2012-06-21 6 views
5

Estoy tratando de agregar una variable a mi línea de registro a través de mi archivo settings.py.Django: Pase la variable al inicio de sesión en el archivo de configuración

Este es el código en la configuración (la parte de registro):

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'handlers': { 
     'mail_admins': { 
         'level': 'CRITICAL', 
         'class': 'django.utils.log.AdminEmailHandler' 
         }, 

     'customhandler':{ 
         'level':'DEBUG', 
         'class':'logging.RotatingFileHandler', 
         'formatter':'custom_format', 
         'filename':LOG_LOCATION 
         }, 
       }, 

    'loggers': { 
     'django.request': { 
         'handlers': ['mail_admins'], 
         'level': 'CRITICAL', 
         'propagate': True, 
          }, 
     'Logger_Custom1': { 
         'handlers':['customhandler'], 
         'level':'DEBUG', 
         'propagate':True 
          }, 
       }, 

    'formatters': { 
     'verbose': { 
      'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s' 
        }, 
     'simple': { 
      'format': '%(levelname)s %(message)s' 
        }, 
     'custom_format':{ 
      'format':'[%(asctime)s %(levelname)s T:%(threadName)s F:%(funcName)s ] %(message)s ' 
         }, 
       } 
} 

El código anterior funciona bien, pero ahora me gustaría cada mensaje de registro para tener una variable al final. Algo así como:

MyVariable = "Somelines" 
[%(asctime)s %(levelname)s T:%(threadName)s F:%(funcName)s ] %(message)s 'MyVariable 

De modo que mi registro tendría el contenido de esa variable al final de cada línea de registro. Sé que podemos hacer eso dentro de la función de vista así: logging.warning('% before you %','Look','Leap') Pero eso requerirá que incluyamos esa línea en todas partes por separado. Además, cuando necesitemos agregar o cambiar ese nombre de variable, necesitaremos cambiar esa línea en todos los archivos.

Así que me preguntaba si hay alguna forma de hacerlo directamente desde settings.py, para que podamos hacer un cambio y se aplicará a todos los mensajes de registro.

Respuesta

3

He encontrado la solución por mi cuenta. No sé si esta es una buena práctica, pero funciona.

único que hice fue asignar una variable:

testvar = "MyVariable" 

Y luego añadir esta variable, así:

'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s ' + testvar 

La salida tendrá la variable en su entrada de registro se fusionó con el formato de registro . Gracias. Por favor, avíseme si hay más formas de hacerlo.

+0

he añadido un espacio al final de la cadena de formato (justo después de '% (mensaje) s'), puede resultar útil en el código actual, así! De esta forma, habrá un espacio entre el mensaje de registro de Django y su mensaje personalizado. También tenga en cuenta que esto solo funcionará siempre que 'testvar' sea una cadena. Puede hacerlo un poco más robusto envolviéndolo con la función de cadena, es decir 'str (testvar)'. – Hannele

+0

Hola, esos son unos buenos consejos ...... Gracias ... –

1

La cadena de formato de registro a la que se refiere tiene una serie de variables que proporciona el módulo de registro. La lista completa is here. Básicamente, pasa un diccionario a la cadena para formatear, y usted no puede manipular esa lista. En su lugar, debe "codificar" su variable directamente dentro de la cadena de formato como su valor real, o almacenar el valor dentro de una variable dentro de su archivo de configuración, y solo anexarlo.

'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s and look, custom stuff here!!!' 

O ..

custom = 'and look, custom stuff here!!!' 
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s ' + custom 
Cuestiones relacionadas