Компактный формат Slack уведомлений в Laravel 7

Категория: Laravel

Как отформатировать/кастомизировать slack уведомления/логи через webhook в Laravel 7.

Тем, кого не устраивает дефолтный вид slack уведомлений и хочется более простого и компактного формата. 


Вид дефолтного уведомления в slack.

Ожидаю, что LOG_SLACK_WEBHOOK_URL уже прописан в конфиге .env. Если нет, см. Slack уведомления с помощью Incoming WebHooks.

1. Создаем кастомный LoggingFormatter в app/Logging/SlackCustomFormatter.php:

<?php

namespace App\Logging;

use Monolog\Formatter\LineFormatter;
use Monolog\Handler\SlackWebhookHandler;

class SlackCustomFormatter
{
    /**
     * Customize the given logger instance
     * @param  \Illuminate\Log\Logger  $logger
     * @return void
     */
    public function __invoke(\Illuminate\Log\Logger $logger)
    {
        foreach ($logger->getHandlers() as $handler) {
            if ($handler instanceof SlackWebhookHandler) {
                $handler->getSlackRecord()->useAttachment(false);
                $handler->setFormatter(new LineFormatter('%datetime% %channel% %level_name%: %message%'));
            }
        }
    }
}
Расширенные примеры конфигурации $handler
//$format = '[%datetime%] %channel%.%level_name%: %message% %context% %extra%'; // @note Default format
$format = '%datetime% %channel% %level_name%: %message% %emoji%';

$formatter = new LineFormatter($format, 'Y-m-d H:i:s');

// @note Append extra info of formatting here
$handler->pushProcessor(function($record) {
    $record['emoji'] = ":boom:";
    return $record;
});

$handler->setFormatter($formatter);

2. Регистрируем SlackCustomFormatter в конфиге config/logging.php:

'slack' => [
    'driver' => 'slack',
    'url' => env('LOG_SLACK_WEBHOOK_URL'),
    'username' => 'Wipo Grabber',
    'emoji' => ':boom:',
    'level' => 'debug', // @note Default: critical
    'tap' => [\App\Logging\SlackCustomFormatter::class],
],

3. Отправляем уведомление:

\Log::channel('slack')->info("System log message to slack");

Итоговый вид уведомления:

5:06  2020-08-21 16:06:06 local INFO: System log message to slack

* В качестве примера можно посмотреть пакет: https://github.com/gmponos/monolog-slack/

#laravel, #log, #slack, #webhook, #formatter, #monolog

категория: Laravel