Laravel
February 19
Управление выводом запланированных задач в Laravel
Нужно отслеживать результаты выполнения запланированных задач? Планировщик Laravel предоставляет элегантные методы для захвата и сохранения результатов выполнения команд для последующего просмотра.
Базовое использование
Сохранение вывода команды в файл:
use Illuminate\Support\Facades\Schedule; // Сохранение вывода в файл Schedule::command('emails:send') ->daily() ->sendOutputTo($filePath); // Добавление вывода в существующий файл Schedule::command('emails:send') ->daily() ->appendOutputTo($filePath);
Реальный пример
Расскажите, как реализовать всестороннее журналирование вывода задач:
class TaskScheduler { protected $outputPath = 'storage/logs/scheduled-tasks'; public function registerTasks() { // Резервное копирование базы данных с журналированием вывода Schedule::command('backup:run') ->daily() ->at('01:00') ->appendOutputTo($this->getLogPath('backup')) ->before(function () { Log::info('Starting database backup...'); }) ->after(function () { Log::info('Backup process completed'); }); // Формирование отчетов с отдельными логами Schedule::command('reports:generate') ->weekly() ->mondays() ->at('07:00') ->sendOutputTo($this->getLogPath('reports')); // Еженедельная очистка старых логов Schedule::call(function () { $this->cleanOldLogs(); })->weekly(); } protected function getLogPath($task) { $date = now()->format('Y-m-d'); return storage_path( "logs/scheduled-tasks/{$task}-{$date}.log" ); } protected function cleanOldLogs() { $files = File::files($this->outputPath); foreach ($files as $file) { $age = now()->diffInDays(File::lastModified($file)); if ($age > 30) { File::delete($file); } } } }
Эти методы обработки вывода облегчают отслеживание и отладку запланированных задач.