3

私のアプリケーションでは、apscheduler を使用する必要があります。BackgroundScheduler のロガーを次のように設定します。

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

実際、スケジューラは適切なロガーを使用します。ただし、スケジューラ内のエグゼキュータは引き続きデフォルトのものを使用します。これを克服するには、上記のコードに 1 行追加する必要がありました。

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

しかし、それは私にとって汚いハックのように見えます。スケジューラとエグゼキュータの両方にロガーを設定する適切な方法はありますか?

4

1 に答える 1

1

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)

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

于 2015-08-12T13:20:44.627 に答える