Laravel logging.channels.single.path с очередью кэшируется? - PullRequest
1 голос
/ 20 января 2020

Я использую Queue::before в AppServiceProvider. php и устанавливаю значение logging.channels.single.path каждый раз, когда запускается задание:

config(['logging.channels.single.path' => storage_path('logs/accounts/'.$command->acc->login.'.log')]);

Когда я запускаю 1 задание, все ок - регистрируется в нужном месте. При запуске 2 или более он записывает журналы в разные файлы - одна учетная запись может записывать в другой файл журнала учетных записей. Почему это происходит? Похоже, что он кэширует переменную конфигурации.

Очередь на горизонте redis. Одна работа после завершения отправки другой такой же работы с тем же экземпляром $ a cc.

    Queue::before(function (JobProcessing $event) {
        $job = $event->job->payload();
        $command = unserialize($job['data']['command']);

Добавлен ^^^ откуда идет команда $.

Ответы [ 2 ]

1 голос
/ 30 января 2020

Настройка теперь выполняется посредством вызова пользовательского форматера для Monolog.

Это можно настроить в конфигурации / ведении журнала. php, обратите внимание на нестандартный параметр касания:

'channels' => [
   'daily' => [
      'driver' => 'daily',
      'tap' => [App\Logging\CustomFilenames::class],
      'path' => storage_path('logs/accounts/laravel.log'),
      'level' => 'debug',
    ],
 ]

В своем пользовательском редакторе вы можете манипулировать регистратором Monolog, как бы вы ни использовали sh:

<?php

namespace App\Logging;

use Monolog\Handler\RotatingFileHandler;

class CustomFilenames
{
    /**
    * Customize the given logger instance.
    *
    * @param  \Illuminate\Log\Logger  $logger
    * @return void
    */
    public function __invoke($logger) {
       foreach ($logger->getHandlers() as $handler) {
          if ($handler instanceof RotatingFileHandler) {
            $login = $command->acc->login;
            $handler->setFilenameFormat("{filename}-$login-{date}", 'Y-m-d');
          }
       }
    }
 }

См .: https://laravel.com/docs/5.6/logging#advanced -monolog-channel-customization https://github.com/Seldaek/monolog/blob/master/src/Monolog/Handler/RotatingFileHandler.php

0 голосов
/ 24 января 2020

Значения конфигурации работают глобально для всех сессий, как и глобальные переменные (см. Пример здесь https://laravel.io/forum/how-can-i-set-global-dynamic-variables-in-laravel)

Вы устанавливаете значение в файле конфигурации всегда для последнего входа в систему. Поэтому все новые журналы go в новом именованном файле конфигурации.

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