我使用创建了一个数据库ZODB,然后将其复制粘贴到另一台PC上.我想知道为什么每次我登录这个数据库(复制的数据库)我都会收到此错误:
no handlers could be found for logger (ZODB.FileStorage)
Run Code Online (Sandbox Code Playgroud)
注意:程序不会中断,它只是打印出红色的语句,就好像它是一个错误.
这个恼人的消息是什么?为什么每次登录都会发生?
更新号(1):什么是python日志系统?为什么我需要在我的应用程序中配置它?
注意:
我只使用ZODB.
我的操作系统是Windows XP SP2.
jdi*_*jdi 27
简答
您无需为应用程序配置它.这样做很有用.
答案很长
该日志记录模块是一个python模块,允许任何Python代码中的方式,是输出无关使用它的实际应用的日志信息.任何深度的库都可以导入日志记录模块,日志信息,警告,错误等,而不必确切地知道用户将如何接收它们.
您所看到的是关于您自己的应用程序中缺少处理程序.ZODB显然是记录信息,但由于您还没有定义处理程序,因此这个日志记录信息正在蒸发到以太网中.它通知您,如果您想查看一些日志信息,您应该定义一个处理程序
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)
Run Code Online (Sandbox Code Playgroud)
此示例创建一个记录器,其中包含应用程序的名称.然后它创建两种类型的处理程序.一个是将DEBUG级别日志写入文件的文件处理程序.第二个是流处理程序,它将错误发送到您的控制台.
如果您希望查看更多详细信息,请将控制器更改为INFO:
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
Run Code Online (Sandbox Code Playgroud)
还要注意"格式化程序"的概念.您可以为不同的处理程序设置不同的日志格式.
如果您至少在应用程序中创建了一个流处理程序,那么它将不再警告您尚未定义处理程序.
对于python 2.7+,该logging模块包括一个NullHandler.它旨在用于库(例如您的数据库库)中作为默认处理程序,当最终用户使用库而没有任何日志记录处理程序(正如您所做的那样)时,该处理程序会使错误无效.因此,如果您根本不关心日志记录而只是想让它静音,您可以NullHandler在自己的代码中添加一个.建议实际设置日志记录,但这只是另一种选择:
import logging
logging.getLogger('spam_application').addHandler(logging.NullHandler())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18441 次 |
| 最近记录: |