我将 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 也没有任何配置选项来指定日志记录信息。
我知道我可以将记录器的级别指定为“错误”或其他内容,但是当它设置为“信息”时,我不希望也记录所有这些(似乎无用的)信息。
您可以尝试以下代码:
logging.getLogger('apscheduler.executors.default').propagate = False
这是我的代码,它可以正常工作而不会抱怨缺少处理程序:
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想要删除的信息消息。
我首先假设您使用 APScheduler 来实现类似 cron 的行为,因为如果您真的每秒通过 cron(8)
运行,那么它会
弄巧成拙,因为 日志记录模块
的美妙之处在于它允许您的应用程序对库的日志记录行为进行广泛的控制,而无需触及其代码。不幸的是,一开始它让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.basicConfig(level=logging.ERROR)