复制的ZODB数据库上出现错误消息“无法找到记录器ZODB.FileStorage的处理程序”

时间:2012-06-25 14:36:16

标签: python logging

我使用ZODB创建了一个数据库,然后将其复制粘贴到另一台PC上。我想知道为什么每次我登录这个数据库(复制的数据库)我都会收到此错误:

no handlers could be found for logger (ZODB.FileStorage)

注意:程序不会中断,它只是打印出红色的语句,就好像它是一个错误。

这个恼人的消息是什么?为什么每次登录都会发生?

更新否(1):什么是python日志系统?为什么我需要在我的应用程序中配置它?

注意:

  1. 我只使用ZODB。

  2. 我的操作系统是Windows XP sp2。

1 个答案:

答案 0 :(得分:27)

简答

您不需要为您的应用程序配置它。这样做很有用。

长答案

logging模块是一个python模块,它允许任何python代码以与使用它的实际应用程序输出无关的方式记录信息。任何深度的库都可以导入日志记录模块,日志信息,警告,错误等,而不必确切地知道用户将如何接收它们。

您所看到的是关于您自己的应用程序中缺少处理程序。 ZODB显然是记录信息,但由于您还没有定义处理程序,因此这个日志记录信息正在蒸发到以太网中。它通知您,如果您想查看一些日志信息,您应该定义一个处理程序

来自Logging Cookbook

import logging

# create logger with 'spam_application'
logger = logging.getLogger('spam_application')
logger.setLevel(logging.DEBUG)
# create file handler which logs even debug messages
fh = logging.FileHandler('spam.log')
fh.setLevel(logging.DEBUG)
# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)
# create formatter and add it to the handlers
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
# add the handlers to the logger
logger.addHandler(fh)
logger.addHandler(ch)

此示例创建一个记录器,其中包含您应用的名称。然后它创建两种类型的处理程序。一个是将DEBUG级别日志写入文件的文件处理程序。第二个是流处理程序,它将向您的控制台发送错误。

如果您希望查看更多详细信息,请将日志级别更改为INFO:

ch = logging.StreamHandler()
ch.setLevel(logging.INFO)

还要注意“格式化程序”的概念。您可以为不同的处理程序设置不同的日志格式。

如果您至少在应用中创建了一个流处理程序,那么它将不再警告您尚未定义处理程序。

对于python 2.7+,logging模块包含NullHandler。它旨在用于库(例如您的数据库库)中作为默认处理程序,当最终用户使用库而没有任何日志记录处理程序(正如您所做的那样)时,该处理程序会使错误无效。因此,如果您根本不关心日志记录而只是想让它静音,您可以在自己的代码中添加NullHandler。建议实际设置日志记录,但这只是另一个选项:

Adding NullHandler to the logger

import logging
logging.getLogger('spam_application').addHandler(logging.NullHandler())