2015-08-12 1 views
2

Dans mon application, je dois utiliser apscheduler. Je mis logger pour BackgroundScheduler comme ceci:Enregistreur APScheduler pour scheduller et exécuteur

self.schedlogger = logging.getLogger("gwserver.{}.sched".format(type(self).__name__)) 
self.schedlogger.setLevel(logging.WARNING) 
self.sched = BackgroundScheduler(logger=self.schedlogger) 
self.sched.start() 

Et en effet, planificateur utilise enregistreur approprié. Mais l'exécuteur à l'intérieur du planificateur utilise toujours celui par défaut. Pour remédier à cela, je devais ajouter une ligne au code ci-dessus:

self.sched._executors['default']._logger = self.schedlogger 

Mais il est ressemble à une bidouille pour moi. Est-ce une bonne façon de définir l'enregistreur pour le planificateur et l'exécuteur?

Répondre

1

On dirait qu'il est dans hardcoded BaseExecutor.start:

def start(self, scheduler, alias): 
    """ 
    Called by the scheduler when the scheduler is being started or when the executor is being added to an already 
    running scheduler. 

    :param apscheduler.schedulers.base.BaseScheduler scheduler: the scheduler that is starting this executor 
    :param str|unicode alias: alias of this executor as it was assigned to the scheduler 
    """ 

    self._scheduler = scheduler 
    self._lock = scheduler._create_lock() 
    self._logger = logging.getLogger('apscheduler.executors.%s' % alias) 

Voir: https://bitbucket.org/agronholm/apscheduler/src/c534d51a57638e8a8a51c36d4a4128b89f8beb22/apscheduler/executors/base.py?at=master

+1

Des suggestions quant à la façon dont il devrait fonctionner? –

+1

Quant à moi, je préfère que, par défaut, l'exécuteur ait le même enregistreur qu'un planificateur. J'ai une douzaine de loggers et tous les logs sont écrits sur stdout donc j'ai du mal à lire les logs utiles à travers tous les logs "INFO" de l'exécuteur. – confucij