我想统一我的应用程序的整个日志工具。任何警告都会引发异常,然后我抓住它并将其传递给记录器。但问题是:是否有记录任何静音设施?有时记录器变得过于冗长。有时候由于噪音太大的警告,警告中是否有任何详细的限制?
答案 0 :(得分:3)
不仅有log levels,而且还有一个非常灵活的way of configuring them。如果您使用的是名为logger
的对象(例如logger = logging.getLogger(...)
),那么您可以适当地配置它们。这将允许您在逐个子系统的基础上配置详细程度,其中子系统由日志记录层次结构定义。
另一种选择是使用logging.Filter
和Warning filters来限制输出。我之前没有使用过这种方法,但看起来它可能更适合您的需求。
给PEP-282读取一篇关于Python logging
包的好散文描述。我认为它比模块文档更好地描述了功能。
您可以使用基于logging.Logger
并在logging.setLoggerClass()
注册的自定义类来处理此日志记录部分。听起来你真的想要类似于syslog的“最后一条消息重复9次”。不幸的是,我不知道任何地方的实现。您可能想看看twisted.python.log是否支持此功能。
答案 1 :(得分:0)
来自您提到的来源。 有日志级别,明智地使用; - )
LEVELS = {'debug': logging.DEBUG,
'info': logging.INFO,
'warning': logging.WARNING,
'error': logging.ERROR,
'critical': logging.CRITICAL}
答案 2 :(得分:0)
如果您计划从一些盲目错误处理程序进行所有日志记录调用,这对于引发错误的代码一无所知,这将是一个问题,这就是您的问题听起来。您将如何决定哪些日志记录调用以及哪些日志调用不会?
更标准的做法是尽可能使用这些块进行恢复,并记录错误(实际上,如果是您没有专门准备的错误,您想了解它;使用高级别) 。但是不要依赖这些块来获取所有状态/调试信息。最好在日志调用到达错误处理程序之前使用日志调用来编写代码。这样,您可以在系统未发生故障时观察有关系统的有用运行时信息,并且可以进行不同严重性的日志记录调用。例如:
import logging
from traceback import format_exc
logger = logging.getLogger() # Gives the root logger. Change this for better organization
# Add your appenders or what have you
def handle_error(e):
logger.error("Unexpected error found")
logger.warn(format_exc()) #put the traceback in the log at lower level
... #Your recovery code
def do_stuff():
logger.info("Program started")
... #Your main code
logger.info("Stuff done")
if __name__ == "__main__":
try:
do_stuff()
except Exception,e:
handle_error(e)