Как использовать функцию report () с конкретным каналом c в Laravel? - PullRequest
0 голосов
/ 17 июня 2020

Вы можете определить свои каналы журнала в config/logging.php, как я уже сделал.

Затем вы можете отправить журнал на свой новый канал следующим образом:

Log::channel('my-channel')->error('message');

Теперь, когда Я хочу поймать исключение, не выбрасывая его, я обычно использую вспомогательную функцию report(), например:

try{
   throw new Exception('message');
}catch(Exception $e){
   report($e);
}

Это очень полезно для продолжения скрипта после того, как исключение было выбрано , но он всегда регистрирует исключение в моем канале регистрации по умолчанию.

Я хочу использовать функцию report() и указать, что об этом следует сообщить my-channel.

Я безуспешно играл с app/Exceptions/Handler.php.

1 Ответ

0 голосов
/ 17 июня 2020

Пока что я решил просто создать простой класс для эмуляции report() вместо того, чтобы пытаться использовать его напрямую:

<?php

namespace App\Exceptions;

use Log;
use Throwable;

class Reporter
{
    /**
     * Reports an exception to a specific channel.
     * 
     * @param Throwable $e
     * @param string $channel
     * @param array $context
     */
    public static function report(Throwable $e, $channel = 'daily', $context = [])
    {
        Log::channel($channel)->error(
            $e->getMessage(),
            array_merge(
                Context::getContext(),
                $context,
                ['exception' => $e],
            )
        );
    }
}

И вы бы использовали его так:

try{
   throw new Exception('message');
}catch(Exception $e){
   Reporter::report($e, 'my-channel');
}

Вы также можете передать дополнительный контекст в сообщение журнала в виде массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...