Я использую Laravel на php-fpm, в составе Docker с Nginx, MySQL.Я хочу, чтобы все журналы из задания Laravel были видны из команды docker-compose logs
на хост-компьютере, однако остались безуспешными.
Следуя официальному документу, я мог бы успешно получать логи STDOUT в контроллерах, но невозможно, когда дело касается Джобса.
Вот мои примеры кодов.
Успешнопример в Controllers
class FormController extends Controller
{
public function index(Request $request)
{
\Log::channel('stderr')->info('LOGGING TEST FROM CONTROLLER'); // This works perfectly as expected, i.e. visible with `docker-compose logs` command on the Host!
}
}
Неудачный пример в Jobs
class SendMailJob implements ShouldQueue
{
public function handle()
{
\Log::channel('stderr')->info('LOGGING TEST FROM JOB'); // This doesn't work X(
}
}
Файл конфигурации супервизора
[program:form]
command=php /usr/local/laravel/artisan queue:work database --sleep=3 --tries=3
user=www-data
environment=HOME="/home/www-data",USER="www-data"
autostart=true
numprocs=2
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
Я бы добавил, что примеры контроллеров запускаются через браузеры (загрузка страниц), а задания выполняются через процесс супервизора (php artisan queue: work ...).
(И, в моем понимании, STDOUT внутриконтейнер будет отражен в журналах Docker. ... это правильно?)
Что я пробовал
проверил указания официального документа -добавил \Log::channel('stderr')->info('TEST');
на контроллере и получил доступ к соответствующему маршруту, который был успешным.
попробовал тот же метод в файлах заданий, который был неудачным.
добавить exec('>&2 echo "TEST"');
в классе Работа: также не работает
остановил Supervisor и вручную запустил php artisan queue:work
после изменения текущего пользователя с root
на www-data
, который является программой, запускаемой пользователем, когда я загружаю страницы через браузер: фактически выводил журналы в командной строке, но невидим для команды docker-compose logs
,* Процесс через Supervisor запускается с пользователем root
по умолчанию, поэтому я изменил его на www-data
в файле conf.Однако, как и в случае с пользователем root
, это не решило проблему.
Я предполагаю, что использование Supervisor может быть причиной ... но на самом деле понятия не имеюясно.
Было бы замечательно, если бы я мог видеть все журналы из приложений Laravel, когда я запускаю команду docker-compose logs
на хост-машине.В настоящее время команда показывает только журналы в файлах контроллера (то есть программы, которые должны запускаться через браузер).
Кто-нибудь может мне помочь?Буду очень признателен за любые предложения.
Спасибо!