对于我的python / django网站,我需要构建一个“仪表板”,它将更新我发现的数十个错误/心跳/意外事件的状态。
我目前通过让Django网站向管理员帐户发送电子邮件来跟踪几种类型的“事件”:
1)通常应该发生的事情出错了。我们每隔几个小时就会将文件同步到不同的服务和其他机器,并在发生错误时发送错误电子邮件。
2)当实际发生的事情发生时。有时,第1项中的事件失败得如此可怕,以至于他们甚至都不发送电子邮件(尝试:除了:事件周围应该始终有效,但事情可以从crontab中删除,系统配置会因为事情不会被歪斜运行,等我甚至不会收到错误电子邮件,缺少成功/心跳电子邮件会让我知道应该发生的事情没有发生。)
3)发生任何意外情况时。我们已经对后端操作如何运行以及是否违反了任何这些假设(例如我们发现两个具有相同电子邮件地址的用户)我们想知道它做了很多假设。这些事件不一定是错误,更像是要调查的警告。
所以我想构建一个仪表板,我可以从python / django轻松更新,让我对所有这些类型的活动进行鸟瞰,这样我就可以停止每周发送数百封电子邮件(已经无法管理)。
答案 0 :(得分:3)
听起来您想要创建一个输出到网页的基本日志系统。
因此,您可以编写一个名为systemevents
的简单应用程序,每次在网站上发生某些事件时都会创建一个Event
记录。你需要添加一个信号钩子,以便在网站的其他部分可以编写类似的代码:
from systemevents.signals import record_event
...
try:
# code goes here
except Exception, inst:
record_event("Error occurred while taunting %s: %s" % (obj, inst,), type="Error")
else:
record_event("Successfully taunted %s" % (obj, ), type="Success")
然后,您可以非常轻松地创建列出这些事件的视图。
但是,请记住,这会增加一层很复杂的问题。如果错误在您的数据库中怎么办?然后,每次尝试记录错误事件时,都会发生另一个错误!
最好使用类似内置日志记录系统的东西来创建基于文本的日志文件,然后添加一些可以导入该文本文件并以更易读的方式进行布局的内容。
还有一个提示:为了改变Django处理异常的方式,你必须写一个custom view for 500 errors。如果使用systemevents
,您可以编写如下内容:
from django.views.defaults import server_error
def custom_error_view(request)
try:
import sys
type, value, tb = sys.exc_info()
error_message = "" # create an error message from the values above
record_event("Error occurred: %s" % (error_message,), type="Error")
except Exception:
pass
return server_error(request)
请注意,此代码均未经过正确性测试。它只是作为指导。
答案 1 :(得分:2)