2017-09-28 1 views
1

J'ai créé une application flacon simple, mais je ne parviens pas à configurer la journalisation correctement.Le flacon configure correctement la journalisation

def configure_logger(log_path, name='default'): 
    logging.config.dictConfig({ 
     'version': 1, 
     'formatters': { 
      'default': {'format': '%(asctime)s - %(levelname)s - %(message)s', 'datefmt': '%Y-%m-%d %H:%M:%S'} 
     }, 
     'handlers': { 
      'console': { 
       'level': 'INFO', 
       'class': 'logging.StreamHandler', 
       'formatter': 'default', 
       'stream': 'ext://sys.stdout' 
      }, 
      'file': { 
       'level': 'INFO', 
       'class': 'logging.handlers.TimedRotatingFileHandler', 
       'formatter': 'default', 
       'when': 'midnight', 
       'filename': log_path, 
       'backupCount': 5 
      } 
     }, 
     'loggers': { 
      'default': { 
       'level': 'INFO', 
       'handlers': ['console', 'file'] 
      } 
     }, 
     'disable_existing_loggers': False 
    }) 
    return logging.getLogger(name) 

et

logger = configure_logger(log_path='./logs/') 
app.logger.addHandler(logger) 

Mais l'enregistreur (flacon) n'utilise pas la configuration fournie, et lors de la connexion d'un sous-module

├── api.py 
├── logs 
├── my_pkg 
│   ├── __init__.py 
│   └── second.py 
└── settings 
    ├── __init__.py 
    └── settings.py 

Je ne reçois que des erreurs enregistrées et mon exploitation forestière la configuration n'est pas appliquée à nouveau pour un enregistreur dans le sous-module:

import logging 
logger = logging.getLogger('root') 

https://github.com/geoHeil/flask_logging_question met en vedette cela dans un exemple de projet

+1

Vous avez passé un enregistreur à 'addHandler', vous devriez avoir passé un gestionnaire. Séparément, à moins que 'default' ne soit en réalité le nom d'un de vos enregistreurs, cela ne va rien enregistrer. – davidism

+0

Comment est-ce que je pourrais avoir l'enregistreur de flask configuré par ma propre configuration de dictionnaire de consignateur? –

+0

Lorsque j'utilise à la place: 'my_logger = configure_logger (log_path = app.config ['LOG_FILE_PATH']) pour gestionnaire dans my_logger.handlers: app.logger.addHandler (gestionnaire)' pour ajouter uniquement les gestionnaires, le problème persiste les enregistreurs dans les autres modules ne sont pas initialisés correctement, c'est-à-dire que seul le niveau du journal des erreurs est affiché et si le débogage est réglé sur Faux, le flacon ne produira que des erreurs et ignorera mon dictconfig. –

Répondre