我是Django的新手。我正在尝试Django登录。尝试时,我收到此错误 [“找不到处理程序”处理程序“示例”“] ..这里是我的代码,
(在我的settings.py中)
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'simple': {
'format': '%(asctime)s %(levelname)s %(name)s %(message)s'
},
},
'handlers': {
'default': {
'level':'DEBUG',
'class':'logging.handlers.RotatingFileHandler',
'filename': '/home/linuxuser/mani/f/logs/msg.log',
'maxBytes': 1024*1024*5, # 5 MB
'backupCount': 5,
'formatter':'simple',
},
},
'loggers': {
'sample': {
'handlers': ['default'],
'level': 'DEBUG',
'propagate': True,
},
}
}
(在我的views.py中)
import logging
import logging.handlers
from django.conf import settings
logger = logging.getLogger('sample')
def empdel(request,id):
e = get_object_or_404(emp, pk=id)
e.delete()
logger.info('A row is deleted successfully !!!')
return HttpResponseRedirect('/empthanks/')
在运行此代码时,我收到了这个错误,即 [“找不到处理程序的”处理程序“样本”“] ..我的代码怎么了?为什么即使我在LOGGING中使用处理程序,我也会收到这样的错误?而且我正在尝试将日志消息保存到我在LOGGING中使用的文件中......任何想法?在此先感谢!!!
答案 0 :(得分:23)
文档对此有点不清楚,但是当您使用内置功能指定日志记录设置时,您不需要获取记录器的实例。
您只需执行以下操作:
import logging
def empdel(request,id):
e = get_object_or_404(emp, pk=id)
e.delete()
logging.info('A row is deleted successfully !!!')
return HttpResponseRedirect('/empthanks/')
答案 1 :(得分:13)
我认为你误解了Handler
包中的logging
是什么。
Handler是您附加到Logger的对象。
只要记录器有要处理的消息,它就会将消息发送给所有处理程序。
此外,Logger存在于树结构中,其根部恰当地命名为“root”Logger。
在向处理程序发送消息后,Logger可以将其传递给树中的父节点(由Logger实例的propagate
属性确定)。
稍微有些幽默,我曾经发现一个应用程序错误,其中有人开始使用名为“root”的Logger,这与Root Logger不同。
请勿使用根记录器(由logging.info
和公司或logging.getLogger()
访问)。
您附加的任何处理程序或您更改的设置也会影响表现良好的库,这些库将错误传播到根记录器。
例证:我曾经使用root logger编写了一个简单的脚本,而不是懒惰。
然后,我将一些调用合并到boto
,并获得了大量调试消息,这些消息正在传播到根记录器。
建议您始终通过创建{{1}的记录器来创建一个记录器,其名称与命名空间中的包名称相匹配(这也导致具有getLogger
对.
的解释的良好继承结构) }
我强烈建议您仔细阅读logging.getLogger(__name__)
文档中有关记录器对象的部分:https://docs.python.org/2/library/logging.html
您可能会注意到您的配置还指定了logging
。
格式化程序在处理程序处理消息时处理消息的呈现,因此单个消息的格式可能与终端输出的格式不同,例如rsyslog。
所有这些都说,要修复你的代码,你可以使用你创建的记录器,只需附加一个处理程序。
我建议创建一个Formatter
(基础StreamHandler
类不是要实例化的,但由于可怕的原因不是ABC),因为它涵盖了很多典型的用例。
Handler
然而,似乎Django配置已经包含了很多这样的信息,当然不是像上面那样配置的。 没有真正编写Django应用程序,我不想给你这方面的错误信息,但Django在这里提供了很好的文档:https://docs.djangoproject.com/en/dev/topics/logging/