thinkphp日志排查需确认三项:1.type设为file确保写入磁盘;2.level包含error、sql、info等必要级别;3.path指向755权限的可写目录,否则日志静默丢失。

在ThinkPHP项目中排查接口超时、数据库连接失败或用户登录异常时,必须快速定位日志输出位置、级别和存储路径,否则会浪费大量调试时间。
ThinkPHP 5.x 日志配置与启用
进入项目根目录下的 config/log.php 文件,确认以下三项已开启:
1. 将 'type' => 'file' 保持默认,不要改为 'trace' 或 'socket';【type设为file是日志写入磁盘的前提】
2. 检查 'level' 配置项是否包含 'error' 和 'sql',例如:'level' => ['error', 'sql', 'info'];若只留 'error',则 SQL 执行慢查询不会记录,排查性能问题将无从下手。
3. 确保 'path' 指向可写目录,如 'path' => runtime_path() . 'log/',runtime 目录需有 755 权限,否则日志文件创建失败且不报错,只会静默丢弃日志。
ThinkPHP 6.x 日志分级与驱动切换
6.x 版本将日志系统完全重构为 PSR-3 兼容结构,支持多驱动并行写入:
方法一:使用内置 file + socket 双写模式
在 config/logger.php 中配置:
'default' => 'multi',
'channels' => [
'multi' => ['type' => 'multi', 'channels' => ['file', 'socket']],
'file' => ['type' => 'file', 'path' => runtime_path() . 'log/'],
'socket' => ['type' => 'socket', 'host' => '127.0.0.1', 'port' => 9001],
],
注意:socket 驱动需提前启动日志接收服务(如 logstash),否则会阻塞请求响应。
方法二:按环境动态切换驱动
在 app/common.php 中添加运行时判断:
if (env('APP_DEBUG', false)) {
Log::setConfig(['type' => 'file']);
} else {
Log::setConfig(['type' => 'redis']);
}
ThinkPHP 8.1 日志自动归档与清理策略
8.1 版本引入基于时间与大小的双维度日志轮转机制,必须手动启用:
第一步:打开 config/logger.php 中的 'rotate' => true
第二步:设置单文件最大容量,单位为字节,推荐值为 'max_files_size' => 1024 * 1024 * 5(即 5MB)
第三步:指定保留天数,例如 'days' => 30,超过该天数的旧日志将被自动删除
第四步:确认 'format' => '[{datetime}][{level}] {message}' 中 datetime 使用的是 Y-m-d H:i:s 格式,否则归档逻辑无法正确识别文件生成时间
这一步操作起来很简单,直接把配置改完保存即可生效,无需重启服务。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











