我将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时,我不想要记录所有这些(似乎没用的东西)信息。
答案 0 :(得分:4)
我首先会假设您正在使用APScheduler来实现类似cron 的行为,因为如果您真的每秒都在cron(8)
运行,那么
根据规定,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想要删除的信息消息。