Треба відслідковувати виведення запланованих завдань? Планувальник 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('Запуск резервного копіювання бази даних...');
})
->after(function () {
Log::info('Процес резервного копіювання завершено');
});
// Генерація звітів з окремими логами
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);
}
}
}
}
Ці методи обробки виведення спрощують відстеження та налагодження ваших запланованих завдань.
Якщо цей посібник був корисним для вас, підпишіться на мій щоденний бюлетень та слідкуйте за мною в X/Twitter і Bluesky.
Це дуже допомагає!
Перекладено з: Managing Scheduled Task Output in Laravel