我试着使用django-slack

当我在Django中遇到错误时,我想在Slack上收到通知,所以我搜索了一下,找到了一个方便的库并尝试使用它。
最终我计划使用Fluentd来集中日志并发送通知,但目前只是在开发中,但我希望在内部发布时能够快速实施,所以我选择了先用这个库来应付。

django-slack 是什么?

↓django-slack就是这个。
http://django-slack.readthedocs.io/

能做什么?

总体来说有以下两个要点。

    1. 可以使用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的选项,可以使用它来进行异步处理会更好。

以上!
以上的内容足够了!
以上所述!
以上是全部!
到此为止!

广告
将在 10 秒后关闭
bannerAds