2017-06-24 1 views
0

Que le suivant soit la formatter forestière dans settings.py`Ajouter une variable dynamique personnalisé dans Django Python journalisation Formatter

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'formatters': { 
     'verbose': { 
      'format': '%(levelname)s %(asctime)s %(module)s %(process)d %thread)d %(message)s' 
     }, 
    }, 
    'handlers': { 
     'console': { 
      'level': 'INFO', 
      'class': 'logging.StreamHandler', 
      'formatter': 'verbose' 
     }, 
    }, 
    'loggers': { 
     'django': { 
      'handlers': ['console'], 
      'propagate': True, 
     }, 
     'myproject.custom': { 
      'handlers': ['console'], 
      'level': 'INFO', 
      'propagate': False, 
     } 
    } 
} 

Maintenant, supposons que j'ai trois fichiers à savoir A.py, B.py & C.py

Dans A.py J'ai un décorateur

def myDecorator(): 
    #Code to generate unique Id for each request in Django APP 
    uniqueId = #something 

Dans B.py & C.py j'ai de nombreuses fonctions pour gérer diverses demandes

import A.py import myDecorator 
import logging 

@myDecorator 
def func1(): 
    #Some Code 
    logger.debug("Logger message") 

@myDecorator 
def func2(): 
    #Some Code 
    logger.info("Logger message") 

@myDecorator 
def func3(): 
    #Some Code 
    logger.debug("Logger message") 

def func4(): 
    #May be Some functions without logger too !!!! 
    logger.debug("Logger message") 

Maintenant, je veux connecter l'identifiant unique généré ainsi que le message de l'enregistreur sans être passé explicitement à chaque fois dans l'enregistreur & Je veux aussi rendre générique!

est-il par quelque façon que je peux passer ces ID uniques aux enregistreurs sans passer explicitement.

'formatters': { 
    'verbose': { 
     'format': '%(levelname)s %(asctime)s %(module)s %(process)d 
      %thread)d %(message)s''%(unique_id)s' 
    }, 
}, 

Chaque fois que l'enregistreur est déclenché, il doit obtenir son numéro d'identification correspondant du décorateur & journal dans % (id_unique) s ou par défaut, il doit se connecter Aucun

Répondre

0

La façon dont cela se fait généralement est en définissant un Formatter personnalisé et injecter vos données, dans votre cas l'ID, dans le format de journal en accédant à la demande actuelle.

+0

Ya J'ai écrit ** CustomFormatter ** ** en settings.py **. Mais l'identifiant que je génère est dans un fichier différent! Chaque demande fonctionne maintenant dans différents fil dans l'hôte! Alors, comment vais-je injecter l'ID généré Décorateurs dans le Formattor avec l'aide des fils ?? Est-ce possible? –