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

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

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

有帮助吗?

解决方案

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

另一种选择是使用 logging.Filter 警告过滤器限制输出。我之前没有使用过这种方法,但看起来它可能更适合您的需求。

PEP-282 阅读本文Python logging 包。我认为它比模块文档更好地描述了功能。

澄清后编辑

您可以使用基于 logging.Logger 的自定义类处理此日志记录部分,并使用 logging.setLoggerClass()注册。听起来你真的想要类似于syslog的“最后一条消息重复9次”。不幸的是,我不知道任何地方的实现。您可能想看看 twisted.python.log 是否支持这个功能。

其他提示

来自您提到的来源。 有日志级别,明智地使用; - )

LEVELS = {'debug': logging.DEBUG,
          'info': logging.INFO,
          'warning': logging.WARNING,
          'error': logging.ERROR,
          'critical': logging.CRITICAL}

如果您计划从一些盲目错误处理程序进行所有日志记录调用,这对于引发错误的代码一无所知,这将是一个问题,这就是您的问题听起来。您将如何决定哪些日志记录调用以及哪些日志调用不会?

更标准的做法是尽可能使用这些块进行恢复,并记录错误(实际上,如果是您没有专门准备的错误,您想了解它;使用高级别) 。但是不要依赖这些块来获取所有状态/调试信息。最好在日志调用到达错误处理程序之前使用日志调用来编写代码。这样,您可以在系统未发生故障时观察有关系统的有用运行时信息,并且可以进行不同严重性的日志记录调用。例如:

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)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top