Как добавить данные во все записи журнала в Laravel 5.6?

Как добавить данные во все записи журнала в Laravel? отвечает, как добавить данные во все записи журнала в Laravel 5.5 и ранее. например в AppServiceProvider :: register () добавляется следующее:

$monolog = \Log::getMonolog();
$monolog->pushProcessor(function ($record) {
    $record['extra']['ip'] = \Request::getClientIp();
    $record['extra']['path'] = \Request::path();
    return $record;
});

Это не работает для Laravel 5.6. Я просмотрел документацию по «созданию клиентских каналов», но не нашел очевидного способа добиться такого поведения.

Ошибка возникает из

Пакет @php artisan: обнаружить -v

Symfony\Component\Debug\Exception\FatalThrowableError  : Call to undefined method Monolog\Logger::getMonolog()

at ...\vendor\laravel\framework\src\Illuminate\Log\Logger.php: 273
269:      * @return mixed
270:      */
271:     public function __call($method, $parameters)
272:     {
273:         return $this->logger->{$method}(...$parameters);
274:     }
275: }
276:

Exception trace:

1   Illuminate\Log\Logger::__call("getMonolog", [])

...\vendor\laravel\framework\src\Illuminate\Log\LogManager.php : 609

2   Illuminate\Log\LogManager::__call("getMonolog", [])

...\vendor\laravel\framework\src\Illuminate\Support\Facades\Facade.php : 223

Please use the argument -v to see more details.

Я далеко не специалист в этом вопросе, поэтому любая помощь приветствуется.


person Andy White    schedule 27.08.2018    source источник
comment
Куда вы пытаетесь поместить код?   -  person ceejayoz    schedule 27.08.2018
comment
Когда вы говорите, что это не работает - что происходит? Есть ошибка?   -  person Chris Cousins    schedule 27.08.2018
comment
@ceejayoz AppServiceProvider.php   -  person Andy White    schedule 27.08.2018
comment
@ChrisCousins, я обновлю вопрос сообщением об ошибке   -  person Andy White    schedule 27.08.2018
comment
Начиная с Laravel 5.6, вы должны использовать каналы и средство форматирования каналов для настройки журналов - см. Документацию здесь laravel.com/docs/5.6/   -  person jedrzej.kurylo    schedule 27.08.2018


Ответы (1)


Вот как я это решил.

  1. В .env используйте «канал стека» для ведения журнала (например, «LOG_CHANNEL = stack»)
  2. Добавьте «тап» к драйверу в config \ logging.php

    'single' => [
        'driver' => 'single',
        'tap' => [App\Logging\CustomizeFormatter::class],
        'path' => storage_path('logs/laravel.log'),
        'level' => 'debug',
    ]
    
  3. Создайте приложение \ Logging \ CustomizeFormatter:

    namespace App\Logging;
    
    class CustomizeFormatter
    {
        public function __invoke($logger)
        {
            foreach ($logger->getHandlers() as $handler) {
                $handler->pushProcessor(function ($record) {
                    $record['extra']['ip'] = \Request::getClientIp();
                    $record['extra']['path'] = \Request::path();
    
                    return $record;
                });
            }
        }
    }
    
person Andy White    schedule 27.08.2018