ThinkPHP6日志通道需在config/log.php中配置并结合.env环境变量动态切换,不支持.env直接定义LOG_CHANNEL;须用env()读取自定义变量(如LOG_CHANNEL_FILE_ENABLED)控制通道启停与多通道组合。

日志通道(如 file、socket、email、wechat 等)是运行时行为,TP6 的 `log.php` 支持从环境变量读取关键参数,从而让开发/测试/生产环境自动使用不同通道,无需修改代码。
在 .env 中定义日志相关环境变量
你不能在 `.env` 里写 `LOG_CHANNEL=wechat` 就直接生效——TP6 日志组件不自动识别该键。必须配合 `config/log.php` 手动对接。推荐在 `.env` 中设置语义清晰的开关或标识:
- LOG_LEVEL=debug(控制日志级别,影响是否记录 SQL、变量等)
- LOG_CHANNEL_FILE_ENABLED=true(启用 file 通道)
- LOG_CHANNEL_SWOOLE_ENABLED=false(禁用 swoole socket 通道)
- LOG_SLACK_WEBHOOK_URL=https://hooks.slack.com/...(仅当需 Slack 推送时填写)
在 config/log.php 中读取并组装通道
打开 config/log.php,修改 'channels' 数组,用 env() 助手函数动态判断:
'channels' => [
'default' => env('LOG_CHANNEL', 'file'),
'file' => [
'type' => 'File',
'path' => runtime_path('log/') . date('Y-m-d') . '.log',
'level' => env('LOG_LEVEL', 'info'),
'max_files' => 30,
'json' => true,
],
'slack' => [
'type' => 'Slack',
'webhook_url' => env('LOG_SLACK_WEBHOOK_URL'),
'level' => 'error',
'json' => true,
],
],
再设置默认通道逻辑:
'default' => env('APP_ENV') === 'production'
? (env('LOG_CHANNEL_SWOOLE_ENABLED') === 'true' ? 'swoole' : 'file')
: 'file',
启用多通道组合(如同时写 file + Slack)
TP6 支持 'type' => 'Multi',适合错误告警+本地归档场景:
- 确保
LOG_SLACK_WEBHOOK_URL在 `.env` 中已正确填写且非空 - 在
config/log.php中新增 multi 通道:
'multi' => [
'type' => 'Multi',
'channels' => [
'file',
env('LOG_SLACK_WEBHOOK_URL') ? 'slack' : null,
],
'level' => 'error',
],
然后把 'default' 设为 'multi' 即可。
验证与注意事项
改完 `.env` 和 `config/log.php` 后务必执行:
-
php think clear:log(清空旧日志缓存) -
php think clear:config(刷新配置缓存,尤其开启 OPcache 时) - 重启 Web 服务或 CLI 进程(`.env` 只在启动时加载一次)
注意:日志通道切换不会影响 `APP_DEBUG=true` 下的异常页面渲染,但会影响 runtime/log/ 下是否生成文件、是否触发第三方推送等实际行为。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











