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

2024-05-14 14:42:43 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

注意:程序没有中断,它只是用红色打印出语句,就好像这是一个错误。

这是什么烦人的信息,为什么每次我登录时都会出现这种情况?

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

注:

  1. 我只使用ZODB。

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


Tags: no程序数据库forhandlers错误belogger
1条回答
网友
1楼 · 发布于 2024-05-14 14:42:43

简短回答

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

长答案

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)

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

如果您想在控制台上看到更多详细信息,可以将日志级别更改为信息:

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())

相关问题 更多 >

    热门问题