复制ZODB数据库时出现错误信息“找不到与记录器ZODB.FileStorage匹配的处理程序”。

12

我使用ZODB创建了一个数据库,然后将其复制粘贴到另一台电脑上。每次我登录这个数据库(复制的那个)时,我想知道为什么会出现以下错误:

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

注意:程序并没有崩溃,它只是打印出红色的语句,就像是一个错误一样。

这个烦人的消息是什么,为什么每次我登录时都会出现?

更新 no(1):Python 日志系统是什么?为什么需要在我的应用程序中进行配置?

注意:

  1. 我只使用 ZODB。

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


3
可能是重复问题:Python - No handlers could be found for logger "OpenGL.error" - Martijn Pieters
1
这不是ZODB的问题;您没有在应用程序中配置Python日志记录系统。 - Martijn Pieters
我请求删除那个问题。我将更新此帖子相关的问题。谢谢 jdi。 - Someone Someoneelse
哎呀,我刚刚注意到它已经被删除了。 - jdi
就此而言,当我从collective.recipe.backup运行bin/snapshotbackup时,也会出现这个错误。 - Spanky
1个回答

27

简短回答

你不需要为你的应用程序配置它,但这样做是有用的。

详细回答

logging 模块是一个 Python 模块,允许任何 Python 代码以一种输出无关的方式记录信息。任何深度的库都可以导入 logging 模块,记录信息、警告、错误等,而不必知道用户将如何接收它们。

你所看到的是关于自己应用程序中没有处理程序的缺失。显然,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。建议实际设置日志记录,但这只是另一种选择:

向记录器添加 NullHandler

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

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