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);
}
}
}
}Эти методы обработки вывода облегчают отслеживание и отладку запланированных задач.