Log::error()能写入错误日志的前提是APP_DEBUG=false、runtime/log/目录可写、log.php中file驱动path有效;默认日志路径为runtime/log/年月/日.log,需确保权限与配置匹配。

直接用 Log::error() 就能写入错误日志,但要确保它真能落地——很多项目调用了却找不到日志文件,问题通常不在写法,而在环境配置。
基础写法(控制器或逻辑中)
先引入门面,再调用方法:
use think\facade\Log;Log::error('用户登录失败:账号不存在');-
Log::error('接口返回异常', ['code' => $code, 'msg' => $msg]);(支持数组参数,自动 JSON 序列化) - 若需记录原始响应数据,建议加
JSON_UNESCAPED_UNICODE避免中文乱码:Log::error(json_encode($data, JSON_UNESCAPED_UNICODE));
日志能写进去的三个硬性前提
即使代码完全正确,以下任一不满足,Log::error() 都不会生成文件:
-
APP_DEBUG 必须为 false:开发模式(
APP_DEBUG=true)下错误直接输出到页面,不落盘;生产环境必须设为APP_DEBUG=false(.env 文件里写成APP_DEBUG=false,不能带空格或引号) -
runtime/log/ 目录可写:Web 服务用户(如 www-data、nginx、IIS_IUSRS)需对
runtime/及其子目录有写权限;Linux 下常用chmod -R 755 runtime/ -
log.php 中 channels.file.path 有效:默认为空,会 fallback 到
runtime/log/;若自定义路径(如'path' => 'log/error.log'),要确保runtime/log/目录存在,ThinkPHP 不会自动创建多级目录
日志文件在哪?怎么查?
默认路径是:runtime/log/年月/日.log(例如 runtime/log/202609/29.log)
注意:log/ 是相对于 runtime/ 的子目录,不是项目根目录。
立即学习“PHP免费学习笔记(深入)”;
- 模块名会体现在路径中(如
runtime/log/index/202609/29.log表示 index 模块日志) - 若启用
'single' => true,则统一写入runtime/log/common.log,不分日期 - 404 错误默认不记日志,需确认
config/log.php中'ignore_404' => false,且config/exception.php中'log' => true
替代方案:临时调试更直接
如果只是快速验证逻辑或排查第三方接口无返回,可用:
Log::info('调试点A:'.json_encode($data, JSON_UNESCAPED_UNICODE));-
trace('调试信息', 'info');(仅在APP_DEBUG=true时生效,显示在调试面板,不写文件) - 避免用
error_log()或var_dump()上线,它们不可控、不统一、难追溯



















