Рубрики
Software

Ошибка с правами доступа к файлам лога — Laravel

В одном из проектов была проблема с сохранением логов. Monolog используется в консольных скриптах и там он запускается от php-cli. Веб сервер в тоже время работает как nginx.

Для решения данной проблемы очевидны два варианта:

  1. Запускать консольные скрипты от пользователя nginx
  2. Разделить лог файлы по пользователям

В моей ситуации предпочтительней второй вариант, так как консольные скрипты выполняются ежедневно для связи с внешними программами. Плюс ко всему, еще это повышает удобство анализа логов.

Разделяем логи в Laravel по пользователям

UPD. После версии 5.6.30 данный метод работать не будет.

В файле bootstrap/app.php:

$app->configureMonologUsing(function(Monolog\Logger $monolog) {
     $filename = storage_path('logs/laravel-'.php_sapi_name().'.log');
     $handler = new Monolog\Handler\RotatingFileHandler($filename);
     $monolog->pushHandler($handler);
 });

В результате, вместо laravel-2019-05-11.log получим следующие файлы:

  • laravel-cli-2019-05-11.log
  • laravel-fpm-fcgi-2019-05-11.log

Логи в Laravel после версии 5.6.30

В версии 5.6.30 для логов появились существенные изменения. Я столкнулся с этим, когда обновлял один из проектов с версии 5.6.4 до 5.8.36.

Что изменилось? У логов появился отдельный конфиг (config/logging.php), в котором мы просто создаем кастомный канал логов:

 'daily2' => [
            'driver' => 'daily',
            'path' => storage_path("logs/". php_sapi_name() ."-laravel.log"),
            'level' => 'info',
            'days' => 7,
        ],

При этом, не забываем добавить или изменить в .ENV значение LOG_CHANNEL на daily2 и обновить конфигурацию (php artisan config:clear).

В результате, мы полуим имя подобное этому: fpm-fcgi-laravel-2020-01-27.log.