Python:警告和记录详细限制

时间:2009-09-13 12:41:26

标签: python logging warnings

我想统一我的应用程序的整个日志工具。任何警告都会引发异常,然后我抓住它并将其传递给记录器。但问题是:是否有记录任何静音设施?有时记录器变得过于冗长。有时候由于噪音太大的警告,警告中是否有任何详细的限制?

http://docs.python.org/library/logging.html

http://docs.python.org/library/warnings.html

3 个答案:

答案 0 :(得分:3)

不仅有log levels,而且还有一个非常灵活的way of configuring them。如果您使用的是名为logger的对象(例如logger = logging.getLogger(...)),那么您可以适当地配置它们。这将允许您在逐个子系统的基础上配置详细程度,其中子系统由日志记录层次结构定义。

另一种选择是使用logging.FilterWarning 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)