Man*_*ani 21 python django logging
我是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,
},
}
}
Run Code Online (Sandbox Code Playgroud)
(在我的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/')
Run Code Online (Sandbox Code Playgroud)
在运行此代码时,我收到了这个错误,即["没有找到处理程序的处理程序"样本""] ..我的代码有什么问题?为什么即使我在LOGGING中使用处理程序,我也会收到这样的错误?而且我正在尝试将日志消息保存到我在LOGGING中使用的文件中......任何想法?提前致谢 !!!
xee*_*ton 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/')
Run Code Online (Sandbox Code Playgroud)
sir*_*sen 13
我认为你误解Handler
了logging
包中的内容.
处理程序是您附加到记录器的对象.只要记录器有要处理的消息,它就会将消息发送给所有处理程序.此外,Logger存在于树结构中,其根部恰当地命名为"root"Logger.在向处理程序发送消息后,Logger可以将其传递给树中的父节点(由Logger实例的propagate
属性确定).
稍微有点幽默,我曾经发现一个应用程序错误,其中有人开始使用名为"root"的Logger,这与Root Logger不同.
不要使用根记录器(由logging.info
公司或公司访问,或logging.getLogger()
).您附加的任何处理程序或您更改的设置也会影响表现良好的库,这些库将错误传播到根记录器.例证:我曾经使用root logger编写了一个简单的脚本,而不是懒惰.然后,我结合了几个调用,boto
并获得了一些调试消息,这些消息正在传播到根记录器.建议您始终通过创建记录器来创建一个记录器,其名称与命名空间中的包名称相匹配(这也会导致良好的继承结构及其getLogger
解释.
)logging.getLogger(__name__)
我强烈建议您仔细阅读logging
文档中有关记录器对象的部分:https://docs.python.org/2/library/logging.html
您可能会注意到您的配置也指定了一个Formatter
.格式化程序在处理程序处理消息时处理消息的呈现,因此单个消息的格式可能与终端输出的格式不同,例如rsyslog.
所有这些都说,要修复你的代码,你可以使用你创建的记录器,只需附加一个处理程序.我建议创建一个StreamHandler
(基Handler
类不是要实例化,但由于可怕的原因不是ABC),因为它涵盖了很多典型的用例.
myhandler = logging.StreamHandler() # writes to stderr
myformatter = logging.Formatter(fmt='%(levelname)s: %(message)s')
myhandler.setFormatter(myformatter)
logger.addHandler(myhandler)
Run Code Online (Sandbox Code Playgroud)
但是,Django配置似乎已经包含了很多这样的信息,当然也没有像上面那样配置.没有实际编写Django应用程序,我不想给你这方面的错误信息,但Django在这里提供了很好的文档:https://docs.djangoproject.com/en/dev/topics/logging/