laravel 11任务调度日志配置核心是用output()或append()将stdout/stderr重定向至文件,并确保storage/logs目录权限正确;推荐结合log::channel()打日志以支持时间戳、级别和自动轮转。

Laravel 11 的任务调度日志配置,核心是把执行输出重定向到文件,并结合框架内置机制做可追溯记录。不需要额外装包,直接在 app/Console/Kernel.php 的 schedule() 方法里设置即可。
指定任务输出日志文件
每个调度任务都可以用 output() 方法写入标准输出(stdout)和错误输出(stderr)到指定文件:
$schedule->command('backup:run')->daily()->at('02:00')->output('/storage/logs/backup.log');$schedule->job(new ProcessData)->hourly()->output('/storage/logs/process.log');- 默认只记录 stdout;如需同时捕获错误,改用
append()或显式重定向 stderr: -
->output('/storage/logs/email.log')->sendOutputTo('/storage/logs/email.log')(等效) - 若想追加而非覆盖,用
append('/storage/logs/app.log')
确保日志目录可写且路径存在
/storage/logs/ 是 Laravel 默认日志目录,但调度任务运行用户(如 www-data 或 nginx 用户)必须有写权限:
- 执行
php artisan storage:link确保软链接就绪(非必需,但推荐) - 检查目录权限:
chmod -R 755 storage/logs或更稳妥地设为组写:chgrp www-data storage/logs && chmod -R g+w storage/logs - 首次运行前手动创建日志文件(如
touch storage/logs/schedule.log)可避免因目录为空导致静默失败
配合 Laravel 日志通道增强上下文
单纯重定向输出适合快速调试,但缺乏时间戳、级别、上下文信息。建议在命令或闭包内部主动打日志:
- 在自定义 Artisan 命令的
handle()中使用Log::info('Backup started at ' . now()); - 用
Log::channel('daily')->error(...)写入带轮转的独立通道 - 闭包任务中同样可用:
$schedule->call(function () { Log::info('Cache cleared via schedule'); })->hourly();
查看与轮转调度日志
生成的日志文件不会自动轮转,需自行管理:
- Laravel 自带的
daily日志通道(config/logging.php)不自动接管output()写入内容 - 如需自动轮转,可改用
Log::channel('daily')->info(...)替代output(),或借助系统 logrotate - 常用 logrotate 配置示例(保存为
/etc/logrotate.d/laravel-schedule):
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 0644 www-data www-data
}











