2010-06-17 4 views
4

Je souhaite créer des méthodes de journalisation personnalisées à l'aide d'un gestionnaire de journalisation personnalisé ou d'une classe de consignateur personnalisée et envoyer les enregistrements de journalisation à différentes cibles.Comment obtenir le niveau de l'enregistrement de la journalisation dans un journal personnalisé.Handler en Python?

Par exemple:

log = logging.getLogger('application') 

log.progress('time remaining %d sec' % i) 
    custom method for logging to: 
      - database status filed 
      - console custom handler showing changes in a single console line 

log.data(kindOfObject) 
    custom method for logging to: 
      - database 
      - special data format 

log.info 
log.debug 
log.error 
log.critical 
    all standard logging methods: 
     - database status/error/debug filed 
     - console: append text line 
     - logfile 

Si j'utilise un LoggerHandler personnalisé en redéfinissant la méthode emit, Je ne peux pas distinguishe le niveau de l'enregistrement de l'exploitation forestière. Existe-t-il une autre possibilité d'obtenir des informations d'exécution du niveau d'enregistrement?

class ApplicationLoggerHandler(logging.Handler): 

    def emit(self, record): 
    # at this place I need to know the level of the record (info, error, debug, critical)? 

Des suggestions?

Répondre

9

record est une instance de LogRecord:

>>> import logging 
>>> rec = logging.LogRecord('bob', 1, 'foo', 23, 'ciao',(), False) 

et votre méthode peut simplement accéder aux attributs d'intérêt (je scindant résultat de dir pour faciliter la lecture):

>>> dir(rec) 
['__doc__', '__init__', '__module__', '__str__', 'args', 'created', 
'exc_info', 'exc_text', 'filename', 'funcName', 'getMessage', 'levelname', 
'levelno', 'lineno', 'module', 'msecs', 'msg', 'name', 'pathname', 'process', 
'processName', 'relativeCreated', 'thread', 'threadName'] 
>>> rec.levelno 
1 
>>> rec.levelname 
'Level 1' 

etc. (rec.getMessage() est la méthode que vous utilisez sur rec - il formate le message en une chaîne, en interpolant les arguments).

+0

Merci beaucoup! – koleto

+0

@koleto, de rien! –

Questions connexes