Laravel MonoLog, pushProcessor не регистрирует атрибуты добавления - PullRequest
0 голосов
/ 24 марта 2020

Я хочу иметь возможность добавить уникальный идентификатор (Uid) в мою регистрацию.

В Пример 1: Что зависит от файлов config/logging.php и ProcessorTap ниже, не работает должным образом. Для ведения журнала настроено использование stdout, которое относится к классу ProcessorTap, который предполагает добавление Uid при создании оператора журнала (в соответствии с UidProcessor)

Пример 2 : Который использует только классы Mono, работает как положено.

Почему в Примере 1 не добавляется Uid в журналы, когда laravel ("laravel/framework": "5.7.*") также должен использовать классы Monolog?

Пример 1 : Когда вызывается этот API, вывод для Log::info('test') не включает UiD

Route::get('/test', function () {
   Log::info('test'); //output = [2020-03-24 04:51:16] local.INFO: test  
});

config / logging. php :

   'default' => env('LOG_CHANNEL', 'stdout'),   //.env LOG_CHANNEL=stdout    
    'stdout' => [
                 'driver' => 'monolog',
                 'handler' => StreamHandler::class,
                 'with' => [
                     'stream' => 'php://stdout',
                 ],
                'tap' => [
                   ProcessorTap::class,
                ],
             ]      

ProcessorTap:

use Monolog\Processor\UidProcessor;

class ProcessorTap
{
    /**
     * Customize the given logger instance.
     *
     * @param  \Illuminate\Log\Logger  $logger
     * @return void
     */
    public function __invoke($logger)
    {
        $logger->pushProcessor(new UidProcessor());
    }
}

Пример 2 : при правильной работе UID (a484a6729e14996c0af1) добавляется в журнал для $logger->info('test')

use Monolog\Logger;
use Monolog\Processor\UidProcessor;
Route::get('/test', function () {
    $logger = new Logger('main');
    $logger->pushProcessor(new UidProcessor(20)); 
    $logger->info('test'); // output = [2020-03-24 04:57:26] main.INFO: test [] {"uid":"a484a6729e14996c0af1"}
});

1 Ответ

0 голосов
/ 24 марта 2020

Возможно, это проблема laravel (5.7) / моно версии, указывающая c, но мне удалось разрешить сквозную итерацию через обработчики и вызов pushProcessor

use Monolog\Processor\UidProcessor;

class ProcessorTap
{
    /**
     * Customize the given logger instance.
     *
     * @param  \Illuminate\Log\Logger  $logger
     * @return void
     */
    public function __invoke($logger)
    {
         collect($logger->getHandlers())->each(function ($handler) {
               $handler->pushProcessor(new UidProcessor());
        });
    }
}
...