9

我将 APScheduler 设置为通过 cron 计划每秒运行一次(需要/想要的那种)。现在我有记录器将所有内容发送到控制台。

如果不是因为日志记录对我的工作非常重要,那没关系。但是,我需要记录。我不想要的是 APScheduler 的信息记录。像这样的东西:

2013-05-26 13:05:06,007 的信息:作业“loadavg.run(触发器:cron[year='*', month='*', day='*', week='*', day_of_week=' *', hour='*', minute='*', second='*'], next run at: 2013-05-26 13:05:06)" 执行成功
2013-05-26 13:05:06,008 的信息:运行作业“cpu.run(触发器:cron[year='*', month='*', day='*', week='*', day_of_week= '*', hour='*', minute='*', second='*'],下次运行时间:2013-05-26 13:05:07)"(预定2013-05-26 13:05 :06)

添加 cron 作业后,我的代码中有这个:

logging.getLogger("apscheduler.scheduler").setLevel(logging.DEBUG)

据我所知,APScheduler 也没有任何配置选项来指定日志记录信息。

我知道我可以将记录器的级别指定为 ERROR 或其他内容,但是当它设置为 INFO 时,我不希望同时记录所有这些(似乎无用的)信息。

4

3 回答 3

15

你可以试试这段代码:

logging.getLogger('apscheduler.executors.default').propagate = False
于 2017-08-17T13:34:49.437 回答
8

这是我的代码,它可以正常工作而不会抱怨缺少处理程序:

scheduler = BackgroundScheduler()
scheduler.start()
scheduler.add_job(every_minute, trigger='cron', second=0, id='every_minute')
logging.getLogger('apscheduler.executors.default').setLevel(logging.WARNING)

它不会完全禁用调度程序日志记录,但会删除 OP 想要删除的信息消息。

于 2017-12-05T01:33:37.307 回答
5

我将首先假设您正在使用 APScheduler 进行类似 cron 的行为,因为如果您真的cron(8)每秒钟都在运行,它会

  1. 弄巧成拙,因为APScheduler 声称它是“比外部运行 cron 脚本更好的替代方案……”
  2. 可能会破坏系统一些可怕的东西

这规定,日志记录模块的美妙之处在于它允许您的应用程序在不接触其代码的情况下广泛控制库的日志记录行为。不幸的是,logging一开始有点难以理解。

由于该INFO级别报告了您不感兴趣的内容,因此您可以:

class NoRunningFilter(logging.Filter):
    def filter(self, record):
        return not record.msg.startswith('Running job')

my_filter = NoRunningFilter()
logging.getLogger("apscheduler.scheduler").addFilter(my_filter)

这些都可以使用日志记录配置文件动态指定,但这比我所了解的更神奇。

于 2013-05-26T23:22:54.247 回答