ThinkPHP缓存驱动配置错误时日志静默丢失,需手动配置cache日志通道、启用debug级别、创建并授权runtime/log/cache目录,才能捕获Connection refused、Authentication failed等真实报错。

ThinkPHP缓存驱动配置错误时,日志往往静默丢失,既不报错也不写入,导致你改了redis密码却始终连不上、切换了缓存驱动却毫无反应。必须主动打开缓存操作日志通道,才能看到“Connection refused”“Authentication failed”这类真实报错。
先确认缓存日志通道是否启用
缓存驱动(如redis)出错时,默认不会记进主日志,必须单独配一个日志通道。打开config/log.php,在'channels'数组里加一项:
'cache' => [ 'type' => 'File', 'path' => runtime_path('log/cache/') ]
这一步漏掉,后面所有调试都白做——缓存操作根本不会产生任何日志文件。
立即学习“PHP免费学习笔记(深入)”;
接着打开config/cache.php,找到'driver'所在层级,在同一级加上:'logger' => 'cache'。注意不是log,也不是default,必须严格写成'cache',否则日志仍走默认通道,你看不到缓存层的任何动作。
检查缓存日志目录权限和路径
运行php think run或访问任意接口后,立刻执行:ls -ld runtime/log/cache/
如果提示No such file or directory,说明框架没自动创建该目录——【runtime/log/cache/必须手动创建并赋写权限】。
执行:mkdir -p runtime/log/cache && chmod 755 runtime/log/cache
再确认当前Web进程用户(如www-data或nginx)对该目录有写权限:sudo chown www-data:www-data runtime/log/cache(Debian/Ubuntu)或sudo chown nginx:nginx runtime/log/cache(CentOS)。
若用Docker部署,还需检查volume是否挂载了runtime/log/cache路径,否则容器内写的日志根本落不到宿主机。
查看缓存连接失败的真实报错
第一步:确保已开启debug级别日志。在config/log.php中,把'cache'通道的'level'设为['debug', 'info'],否则只会记录error,而连接超时、认证失败等初期问题常以warning或info形式出现。
第二步:触发一次缓存操作,例如在控制器里写Cache::get('test_key')并刷新页面。
第三步:执行命令实时盯住日志:tail -f runtime/log/cache/$(date +%Y-%m)/$(date +%d).log
第四步:在输出中搜索关键词:connect、auth、failed、timeout。如果看到Connection refused,说明redis服务没起来;如果看到Authentication failed,说明config/cache.php里的password填错了;如果整条日志里只有set没有get,说明缓存根本没被读取,可能是key被哈希或中间件提前终止了请求。



















