Python APScheduler如何禁用日志记录

时间:2013-05-26 21:15:17

标签: python apscheduler

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

如果不是因为记录对我正在做的事情非常重要,那就没关系。但是,我需要记录。我不想要的是APScheduler的信息记录。像这样的东西:

INFO     at 2013-05-26 13:05:06,007 : Job "loadavg.run (trigger: cron[year='*', month='*', day='*', week='*', day_of_week='*', hour='*', minute='*', second='*'], next run at: 2013-05-26 13:05:06)" executed successfully
INFO     at 2013-05-26 13:05:06,008 : Running job "cpu.run (trigger: cron[year='*', month='*', day='*', week='*', day_of_week='*', hour='*', minute='*', second='*'], next run at: 2013-05-26 13:05:07)" (scheduled at 2013-05-26 13:05:06)

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

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

据我所知,APScheduler的配置选项也没有指定日志信息。

我知道我可以将记录器的级别指定为ERROR或其他东西,但是当它设置为INFO时,我不想要记录所有这些(似乎没用的东西)信息。

3 个答案:

答案 0 :(得分:4)

我首先会假设您正在使用APScheduler来实现类似cron 的行为,因为如果您真的每秒都在cron(8)运行,那么

  1. 要弄巧成拙,因为APScheduler claims它是“远远超出外部运行cron脚本的替代方案......”
  2. 可能会破坏系统可怕的东西
  3. 根据规定,logging module的优点在于它允许您的应用程序对库的日志记录行为进行广泛控制,而无需触及其代码。不幸的是,它使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)
    

    这些都可以用logging configuration file动态指定,但这比我进入的时候更加神奇。

答案 1 :(得分:3)

您可以尝试以下代码:

logging.getLogger('apscheduler.executors.default').propagate = False

答案 2 :(得分:2)

这是我的代码,无需抱怨缺少处理程序即可运行:

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想要删除的信息消息。