为了账号安全,请及时绑定邮箱和手机立即绑定

Python APScheduler如何禁用日志记录

Python APScheduler如何禁用日志记录

慕雪6442864 2021-03-20 15:15:02
我将APScheduler设置为通过cron时间表每秒运行一次(某种需要/想要的)。现在,我有记录器将所有内容发送到控制台。如果不是因为日志记录对于我正在研究的内容非常重要,那就可以了。但是,我需要记录日志。我不需要的是APScheduler的信息记录。像这样的东西:INFO在2013-05-26 13:05:06,007:作业“ loadavg.run(触发:cron [year ='*',month ='*',day ='*',week ='*',day_of_week =' *',hour ='*',minutes ='*',second ='*'],下一次执行:2013-05-26 13:05:06)“已成功执行INFO在2013-05-26 13:05:06,008:正在运行作业“ cpu.run(触发:cron [year ='*',month ='*',day ='*',week ='*',day_of_week = '*',hour ='*',minutes ='*',second ='*'],下一次执行:2013-05-26 13:05:07)“(计划于2013-05-26 13:05 :06)添加cron作业后,我的代码中包含以下内容:logging.getLogger(“ apscheduler.scheduler”)。setLevel(logging.DEBUG)据我所知,APScheduler没有用于指定日志记录信息的任何配置选项。我知道我可以将记录器的级别指定为ERROR或其他级别,但是当将其设置为INFO时,我也不想记录所有这些(似乎无用的)信息。
查看完整描述

3 回答

?
四季花海

TA贡献1811条经验 获得超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)

所有这些都可以通过日志记录配置文件动态指定,但是这比我以前学到的要神奇的多。


查看完整回答
反对 回复 2021-03-27
?
慕容708150

TA贡献1831条经验 获得超4个赞

您可以尝试以下代码:

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


查看完整回答
反对 回复 2021-03-27
?
侃侃无极

TA贡献2051条经验 获得超10个赞

这是我的代码,可以在不抱怨缺少处理程序的情况下工作:


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


查看完整回答
反对 回复 2021-03-27
  • 3 回答
  • 0 关注
  • 1067 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信