首页 > 解决方案 > 使用 Symfony 和 Monolog 的 Slack 通知

问题描述

我是来寻求新的帮助的。问题:对于每个异常,我必须在 Slack 上发送一条消息,前提是在前一分钟尚未通知异常(没有来自 404 错误的通知)。Symfony 版本:4.3 我想利用 Monolog 的 SlackHandler。这就是我所做的。

独白.yaml

monolog:
    channels: ['notifier']

产品/monolog.yaml

monolog:
    handlers:
        slack_errors:
            type: fingers_crossed
            action_level: error
            excluded_404s:
                - ^/
            handler: slack_errors_handler
        slack_errors_handler:
            type: slack
            token: '%app.exception_notifier.slack.token%'
            channel: '%app.exception_notifier.slack.channel%'
            bot_name: '%app.exception_notifier.slack.bot%'
            icon_emoji: ':ghost:'
            level: critical
            include_extra: true
            channels: ['notifier']

我创建了一个实体以将异常保存在数据库中(实体的属性:生成事件的类、异常代码、异常消息、异常跟踪),并且我预先保存了创建日期。我还有一个属性,用于标识实体是否已被通知。通过对数据库的简单查询,我检查我是否已经在过去 60 秒内通知了异常。我创建了一个异常订阅者,在其中注入了一个适当的管理器。所以我确实将异常保存在数据库中,并检查通知是否发生在前 60 秒内。现在,如果没有通知,我该如何利用上述配置的独白?

这是应该发送通知的方法。

/**
* @return bool
* @throws \Doctrine\ORM\NoResultException
* @throws \Doctrine\ORM\NonUniqueResultException
*/
public function dispatch()
{
    if ($this->log && ($id = $this->log->getId())) {
        if ($this->logRepository->findCountLogByExceptionEvent(
            $this->log, [$id], $this->interval
        )) {
            return false;
        }

        $this->logger->critical(); // @TODO
        $this->log->setIsNotified(1);
        $this->om->flush($this->log);
        return true;
    }
    return false;
}

请问$this->logger->critical();下线怎么办?

标签: phpnotificationssymfony4slack-apimonolog

解决方案


推荐阅读