在ThinkPHP6命令行中输出日志需使用Log门面并调用Log::save()强制写入,默认写入runtime/log/目录;支持多级日志和结构化上下文,可选结合Output实时显示。

在 ThinkPHP6 的命令行环境中输出日志信息,核心是使用框架内置的日志门面 Log,并确保日志配置支持 CLI 场景(默认已支持)。命令行下日志不会自动写入文件或显示到控制台,需主动调用方法触发写入,且建议避免直接用 echo 或 var_dump 替代日志记录。
使用 Log 门面记录日志
在命令行指令类(如 app/command/Hello.php)中,直接调用 Log::info()、Log::error() 等方法即可:
- 日志会按配置写入对应驱动(默认是
File,保存在runtime/log/目录下) - 支持多级日志:
Log::debug()、Log::info()、Log::notice()、Log::warning()、Log::error()、Log::alert()、Log::critical()、Log::emergency() - 可传入数组作为上下文,便于结构化追踪:
Log::info('任务开始', ['task_id' => 123, 'user_id' => 456])
确保日志在 CLI 下生效
ThinkPHP6 默认已为 CLI 环境启用日志,但仍需检查以下两点:
-
确认日志配置未禁用:查看
config/log.php中'default'驱动是否为有效值(如'file'),且'close' => false -
运行后手动刷新日志缓冲:CLI 模式下日志可能缓存,执行完日志操作后建议调用
Log::save()强制写入文件,尤其在脚本结束前
在控制台实时显示日志(可选)
若希望命令行运行时同时看到日志内容(类似调试输出),可搭配 think\console\Output:
立即学习“PHP免费学习笔记(深入)”;
- 注入
Output对象(在指令类的handle()方法中):protected $output;+ 构造函数注入 - 记录日志的同时输出:
$this->output->writeln('<info>[INFO]</info> 数据处理完成'); - 注意:
Output是控制台输出,不替代日志;两者可并存,但目的不同(日志用于追踪,Output 用于交互反馈)
验证日志是否写入成功
运行指令后,检查 runtime/log/年月/日.log 文件是否存在对应内容。例如执行:
php think hello
然后打开 runtime/log/202405/28.log,应能看到类似:
[2024-05-28 14:22:33] INFO: Hello command executed



















