在Django简单的错误日志消息

我已经通过了130 Django的日志记录机制得到了错误的电子邮件设置。 当发生错误的时候它给我发送电子邮件不错。 然而,当我登录一个简单的错误消息,它被格式化奇怪,我不知道为什么。

例如,有一个在我的应用程序的条件,其中,如果事情不我想知道数据库存在,但我有一个合适的默认值将正常工作。 因此,我想送给我一些信息的电子邮件; 它不一定发生在一个例外。

如果我做这样的事情:

logger.error(“费并没有在数据库中的行动%s的存在”,“actionX”)

在日志文件中的信息是好的,但电子邮件真的欠缺一些信息。 这里的主题行:

[Django] ERROR: Test this jazz %s

然后身体:

None Request repr() unavailable

我的问题是,我怎么一)值在主题和B显示)获得身体一些实际的,相关的信息....象行号或类似的东西。

--------------解决方案-------------

你需要承认两件事情:

  1. 你想使用Python的内置的日志系统发送电子邮件和
  2. 您还没有登录正规例外,这样用于发送电子邮件,因为它取决于传递异常型状物体和东西上是行不通的内建机制,存储在回溯。

不管怎么说,没有做不到!

LOGGING = {
...
'handlers': {
...
'my_special_mail_handler': {
'level': 'ERROR',
'filters': [],
'class': 'myapp.loggers.MyEmailHandler',
'include_html': False,
},
},
'loggers': {
...
'my_special_logger': {
'handlers': ['console', 'my_special_mail_handler'],
'level': 'DEBUG',
'propagate': True,
},
}
}

MY_RECIPIENTS = (("Name of person", "email@example.com"),)

......这些东西合并到您的设置。

然后,有你特别的日志类,MyEmailHandler:

from django.utils.log import AdminEmailHandler
from django.core.mail.message import EmailMultiAlternatives
from django.conf import settings

class MyEmailHandler(AdminEmailHandler):

def emit(self, record):
if not getattr(settings, "MY_RECIPIENTS", None):
return
subject = self.format_subject(record.getMessage())
message = getattr(record, "email_body", record.getMessage())
mail = EmailMultiAlternatives(u'%s%s' % (settings.EMAIL_SUBJECT_PREFIX, subject),
message, settings.SERVER_EMAIL, [a[1] for a in settings.MY_RECIPIENTS],)
mail.send(fail_silently=False)

现在,您可以创建一个特殊的日志条目,既是通过电子邮件发送到终端的输出是这样的:

import logging
logger = logging.getLogger("my_special_logger")
error = logger.makeRecord(
logger.name, logging.ERROR, 0, 0,
u"Subject: Some error occured",
None, None, "", None,
)
error.email_body = msg
logger.handle(error)

并且使东西方便,使用一个效用函数:

import logging
def my_log(msg, body, level=logging.ERROR):
logger = logging.getLogger("my_special_logger")
error = logger.makeRecord(
logger.name, level, 0, 0,
u"Subject: Some error occured",
None, None, "", None,
)
error.email_body = msg
logger.handle(error)

Django的记录文档状态:

当然,这是不够的,只是把记录的调用到你的代码。 您还需要配置记录器,处理程序,过滤器和格式化,以确保记录输出是一个有用的方式输出。

您需要在logging.config()字典来调整您的设置。 这允许您设置了格式化正是你想要的信息,以及如何。

切割从文档的小位:

'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
},

给你一个有点想法,你可以如何影响输出,以及蟒蛇的logging.config文档将填好的可用选项。

分类:Django的 时间:2015-03-15 人气:3
本文关键词: 日志记录,则Django
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.302 (s). 10 q(s)