关闭计划任务库中的日志记录

13

目标: 防止schedule每次运行时都记录日志。

背景:

我在Python项目中使用loggingschedule库。

我的日志文件包含由Raspberry Pi运行的仪器的物理状态信息,并且每10秒更新一次。

我使用schedule库来调度这个周期性的日志。

这里是我找到的关于schedule的有限文档。

问题:

schedule库在每次运行作业时都会记录该语句。

2016-06-29 09:01:51,022 INFO: Running job every 10 seconds do update_log() (Last run...

schedule调用的函数是update_log(),这个函数计算每十秒运行的日志中包含的变量并记录它们(以下为示例)。

2016-06-29 09:01:51,022 INFO: Dist: 12.3 m Rate: 23.8 cm/s

因为 schedule 产生了它自己的(相当无用的)日志行,这使得我实际尝试进行的记录非常难以阅读。

目标:

防止 schedule 记录第一条语句。


你认为将日志级别设置为比INFO(警告)高一级,并将日志记录设置为WARNING级别如何? - mechanical_meat
1
顺便说一句,我非常喜欢schedule模块。 - mechanical_meat
1
那可以解决问题,但感觉更像是一个临时的hack而不是真正的解决方案。我还使用警告来表示异常事件,但并不至于停止进程。 - Michael Molter
确实,这是一个不太正规的解决方案。 - mechanical_meat
1个回答

14

schedule模块专门使用名为schedule的记录器。您可以使用logging禁止此记录器写入主记录器

import logging
logging.getLogger('schedule').propagate = False

如果您根本不想要schedule的日志,您也可以通过将其日志级别设置为高于任何真实日志级别来禁用它。

import logging
logging.getLogger('schedule').setLevel(logging.CRITICAL + 10)

如果你只想让一些信息通过,请将级别设置为常规的logging级别。

自Python2.7以来,您也可以使用NullHandler

import logging
logging.getLogger('schedule').propagate = False
logging.getLogger('schedule').addHandler(logging.NullHandler())

这个代码可以禁用日志中的计划行,但是程序启动时会出现“找不到与记录器‘schedule’对应的处理程序”警告。 - Michael Molter
@MichaelMolter 我已经添加了如何完全禁用 schedule 日志记录的说明。 - MisterMiyagi
2
我之前不知道可以更改单个记录器的优先级。我将级别设置为logging.CRITICAL以消除警告,同时仍允许记录关键错误。谢谢! - Michael Molter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接