如何为apschedu指定“logger”

2024-06-10 03:58:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试学习如何使用Python的apscheduler包,但它会定期抛出以下错误:

No handlers could be found for logger "apscheduler.scheduler"

此消息似乎与计划作业中的错误相关,例如,使用jobTester作为计划作业,下面的代码(在jobTester中使用未定义的变量(nameStr0))将给出上述错误消息:

from apscheduler.scheduler import Scheduler
from apscheduler.jobstores.shelve_store import ShelveJobStore
from datetime import datetime, timedelta
from schedJob import toyJob

def jobTester(nameStr):
    outFileName = nameStr0 + '.txt'
    outFile = open(outFileName,'w')
    outFile.write(nameStr)
    outFile.close()

def schedTester(jobList):
    scheduler = Scheduler()
    scheduler.add_jobstore(ShelveJobStore('example.db'),'shelve')
    refTime = datetime.now()

    for index, currJob in enumerate(jobList):
        runTime = refTime + timedelta(seconds = 15)
        jobName = currJob.name + '_' + str(index)
        scheduler.add_date_job(jobTester, runTime, name = jobName,
                           jobstore = 'shelve', args = [jobName])


    scheduler.start()
    stopTime = datetime.now() + timedelta(seconds = 45)
    print "Starting wait loop .....",
    while stopTime > datetime.now():
        pass
    print "Done"

def doit():
    names = ['Alan','Barbara','Charlie','Dana']
    jobList = [toyJob(n) for n in names]
    schedTester(jobList)

这可以通过运行以下代码(存储在schedTester.py文件中)看到:

>>> import schedTester
>>> schedTester.doit()
No handlers could be found for logger "apscheduler.scheduler"
Starting wait loop ..... Done

但是,当我用nameStr替换nameStr0(即变量名的正确拼写)时,代码运行良好,没有错误消息。

  1. 如何为apscheduler.scheduler创建记录器?在处理配置调度程序的文档中,我是否遗漏了一些内容

  2. 我把这个记录器看作是某种标准记录器是对的吗?如果是,我将在哪里查找它(如果这不是由我设置它的方式决定的话)


Tags: fromimport消息fordatetimedef错误scheduler
1条回答
网友
1楼 · 发布于 2024-06-10 03:58:47

您只需创建一个默认记录器,所有内容都应转到它:

import logging
logging.basicConfig()

只有在使用尚未定义的变量时才会出现问题,原因是这会导致jobTester函数抛出apscheduler正在捕获并试图用logging.error()写入错误消息的错误。既然你还没有设置记录器,它会抱怨的。

如果您仔细阅读python logging,您会发现有许多方法可以配置它。你可以让它把所有东西都记录到一个文件中,或者打印到标准输出。

相关问题 更多 >