我试着使用django-slack
当我在Django中遇到错误时,我想在Slack上收到通知,所以我搜索了一下,找到了一个方便的库并尝试使用它。
最终我计划使用Fluentd来集中日志并发送通知,但目前只是在开发中,但我希望在内部发布时能够快速实施,所以我选择了先用这个库来应付。
django-slack 是什么?
↓django-slack就是这个。
http://django-slack.readthedocs.io/
能做什么?
总体来说有以下两个要点。
-
- 可以使用slack_message()函数在slack中发布消息。查看http://django-slack.readthedocs.io/#richly-formatted-messages。
如果出现异常,将会在slack上发布消息。查看http://django-slack.readthedocs.io/#logging-exceptions-to-slack。
所以,这次尝试用于后者。
准备
准备好用于在Slack上发布的令牌。
您可以选择使用测试令牌,还是按照您个人的喜好正确设置机器人。
相关链接:
https://api.slack.com/custom-integrations/legacy-tokens
https://slack.com/apps/A0F7YS25R-bots
安装
使用pip安装django-slack
执行
只需要更改设置。
添加了INSTALLED_APPS。
在INSTALLED_APPS中添加django_slack
INSTALLED_APPS = [
# ... some apps
'django_slack',
]
记录器的设置
添加一个 SlackExceptionHandler 到 Django 日志处理程序中的 handlers 中。
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse',
},
},
'handlers': {
'slack_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django_slack.log.SlackExceptionHandler',
},
},
'loggers': {
'django': {
'level': 'ERROR',
'handlers': ['slack_admins'],
},
},
}
为了不将本地开发环境或DBUG=True的环境的错误传递到Slack上,应设置require_debug_false为filters。
设定选项
在选项中指定token等。
SLACK_TOKEN = 'SOME_TOKEN'
SLACK_CHANNEL = '#PUBLIC_CHANNEL'
SLACK_USERNAME = 'USER-NAME'
SLACK_ICON_EMOJI = ':bangbang:'
SLACK_FAIL_SILENTLY = True
如果将SLACK_FAIL_SILENTLY设置为False,当在SlackExceptionHandler中发生错误,例如指定了错误的频道,则会出现无限循环,即 “发生错误” -> “需要通知slack” -> “发生错误” -> “需要通知slack”。
可以参考下面的链接获取其他选项:
http://django-slack.readthedocs.io/#configuration
确认通畅
在Python的管理模块中,使用命令`python manage.py shell`执行以下内容。
from django_slack import slack_message
slack_message('django_slack/exception.slack', {'text': 'hoge'})
如果在指定的频道中发布了’hoge’,那么就算成功了。
顺便提一下,如果要在DEBUG=True的环境中进行通信确认的话,请添加SLACK_BACKEND = ‘django_slack.backends.UrllibBackend’。
如果通信确认失败,请将SLACK_FAIL_SILENTLY设置为True,这样会显示错误信息。
版本
Django 版本号为 1.11
django-slack 版本号为 5.8.0
思考
真的好方便啊。只要把SLACK_FAIL_SILENTLY設為True,就會完全沒有任何提示,但至少希望能夠在logger(‘django_slack’)上輸出日誌。
我认为基本上不太需要在正式环境中使用,但是如果确实需要在正式环境中使用的话,似乎提供了一个名为CeleryBackend的选项,可以使用它来进行异步处理会更好。
以上!
以上的内容足够了!
以上所述!
以上是全部!
到此为止!