有很多开发人员可以选择错误跟踪,但有些可能相当昂贵,或者有太多的配置,需要大量的维护。
在这篇博文中,我将向你介绍一种简单的方法,供中小型团队追踪Django应用程序中出现的任何异常。
在本教程中,你将学习如何使用Slack Incoming Webhooks和Django日志系统来向指定的Slack频道发送警报。例子包括ETL管道的状态,获得即时的用户反馈,以及整合一些调度器来获得定期报告。
首先,我们需要创建一个Slack应用,用来传递我们应用的信息。要做到这一点,请打开 这个链接。一旦你登录,选择 "从头开始",为你的应用程序写一个合适的名字,然后点击**"创建应用程序"。**
在左边的菜单上,进入 "基本信息>为Slack构建应用程序>添加特性和功能>来电网络钩子"。打开开关以激活该功能,如下图所示。
在 "你的工作区的Webhook URLs "部分,点击 "向工作区添加新的Webhook "并选择一个频道, 然后点击 "允许"完成。
现在你会得到一个连接到所选通道的Webhook URL,它应该看起来像这样。
在Gist上查看该代码。
配置Django以使用Webhook URL
我们将利用Django的日志配置字典。正如你可能知道的,Python日志配置有以下几个部分。
- 记录器
- 处理程序
- 过滤器
- 格式化
我们将至少配置一个日志记录器和一个处理程序。
处理程序。我们的消息将如何到达Slack
为了真正向slack发送消息,我们需要安装一些库来帮助我们完成。我使用 请求因为它使用起来超级简单。
在Gist上查看代码。
在你安装了request之后,继续创建一个新的python文件,并在其中添加以下两个类。
- SlackInterface
- SlackHandler
SlackInterface类将在与Slack API交互的意义上做艰苦的工作,而SlackHandler将作为Slack和日志系统之间的接口,并决定消息如何到达slack。
Slack接口
在Gist上查看代码。
正如你所看到的,我们定义了一个**_send**方法,其中包含请求调用,使用POST方法、webhook URL和任何有效的JSON字符串作为有效载荷。
此外,我们还定义了message_success和message_error,你可以在这个链接中找到更多关于你可以在有效载荷中使用的细节。 用高级格式化让它变得花哨。
Slack处理程序
在Gist上查看代码。
根据Python的文档,实现一个日志处理程序类的最低要求是有一个emit方法,以record为参数。你可以在这里找到关于记录对象的更多细节。 LogRecord 对象。
一旦你有了这个方法的编码,你就可以在里面执行任何动作,例如,调用message_error和message_error或任何其他你想要的自定义方法。
现在你有一个可以放在handlers dict上的处理程序类,只要确保你在**"class "**字段上使用有效的导入路径。
在Gist上查看该代码。
记录器。谁可以使用Slack的通知?
本教程的最后一部分重点是定义一个记录器。有多种方法可以实现这一点。
最简单的方法是将你的应用程序的名字添加到记录器的dict中。这样你就可以控制你项目中的哪个应用可以使用这些警报,或者干脆将处理程序添加到 "Django "日志器中,以处理整个项目发出的、未被其他处理程序捕获的任何日志。
在Gist上查看代码。
使用日志记录器
你可以通过在my_app的任何文件上实例化日志器来使用它。
查看Gist上的代码。
下面是上面的片段的输出。
总结
在这篇文章中,我们创建了一个Slack App,在SlackInterface和SlackHandler上进行了交互,并通过Logging Configuration字典将它们集成到Django的日志系统中。
这个例子是我们在本教程中构建的配置字典的完整版本。要看我们在这里没有谈到的变量,请看这个链接。 配置日志。
一如既往,感谢您阅读我们的博客,并请继续关注更多有用的内容。