ThinkPHP 6.0支持配置独立日志通道,如admin、api、queue,在config/log.php的channels中定义,指定type、path、level等;代码中用Log::channel('admin')->error()调用;可启用apart_level按级别分文件存储。

ThinkPHP 6.0 支持为不同用途或模块配置独立的日志通道,避免所有日志混在同一个文件里,提升排查效率和管理清晰度。关键不是改全局设置,而是新增一个自定义通道,并指定其驱动、路径、级别等行为。
定义新通道(如 admin、api、queue)
在 config/log.php 的 channels 数组中添加一项,例如叫 admin:
- 复制一份
file通道配置,改名为admin - 显式指定
'type' => 'File'(不依赖默认继承) - 设置专属目录:
'path' => runtime_path('log/admin')或绝对路径如'/data/logs/admin' - 可限制只记录特定级别:
'level' => ['error', 'warning']
在代码中使用该通道写日志
不再用 Log::info() 这样的默认通道,而是显式调用指定通道:
Log::channel('admin')->error('管理员操作异常', ['user_id' => 123]);Log::channel('queue')->info('任务入队成功', ['job' => $job->getName()]);- 注意:通道名必须与 config 中定义的键名完全一致
按级别分离文件(可选但推荐)
若希望 error 和 info 分开写入不同文件,启用 apart_level:
立即学习“PHP免费学习笔记(深入)”;
- 在对应通道配置中加入:
'apart_level' => ['error', 'info', 'warning'] - 效果:自动写入
runtime/log/admin/202610/29_error.log、29_info.log等 - 无需额外判断,框架自动按日志方法(
error()/info())路由到对应文件
避免通道间干扰的小细节
多个通道共存时,需注意几处易错点:
- 每个通道的
path必须独立,否则日志会写串;建议用子目录隔离,如runtime/log/api/、runtime/log/sms/ - 若开启
single => true,该通道将始终写入单个固定文件(如single_error.log),不再按天分目录 —— 适合调试期,慎用于生产 - 通道未定义却调用了
Log::channel('xxx'),TP6 会静默失败,不报错也不写日志,建议首次使用前加个var_dump(Log::getChannel('xxx'));验证



















