Python APScheduler 如何禁用日志记录

问题描述 投票:0回答:4

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

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

信息于 2013-05-26 13:05:06,007 :作业“loadavg.run(触发:cron[year='*',month='*',day='*',week='*',day_of_week= '*', 小时='*', 分钟='*', 秒='*'], 下次运行时间: 2013-05-26 13:05:06)" 执行成功
信息于 2013-05-26 13:05:06,008 :运行作业“cpu.run(触发:cron[year='*',month='*',day='*',week='*',day_of_week= '*', 小时='*', 分钟='*', 秒='*'], 下次运行时间: 2013-05-26 13:05:07)" (预定于 2013-05-26 13:05 :06)

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

logging.getLogger(“apscheduler.scheduler”).setLevel(logging.DEBUG)

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

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

python apscheduler
4个回答
17
投票

您可以尝试以下代码:

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

13
投票

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

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


6
投票

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


弄巧成拙,因为
    APScheduler 声称
  1. 它是“比外部运行 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)

这些都可以通过
日志配置文件

动态指定,但这比我所经历的更神奇。


0
投票

logging.basicConfig(level=logging.ERROR)

© www.soinside.com 2019 - 2024. All rights reserved.