ThinkPHP6.1默认不记录HTTP访问日志,需确认未启用Trace(type≠'html'/'file')、未添加自定义访问中间件、未开启SQL日志,且runtime/log下无access相关日志文件。

ThinkPHP6.1 默认不会记录普通 HTTP 访问日志(如每个请求的 URL、IP、耗时等),它只在开启 trace 或使用中间件显式记录时才生成访问类日志。所谓“不记录访问信息”,本质是避免误开冗余日志通道或引入非必要中间件。
关键不是「关掉某个开关」,而是确保没主动启用访问日志功能——因为框架本身不提供 log.access 这类内置配置项。
确认没启用 Trace 日志(最常见误源)
Trace 功能一旦开启(尤其 type => 'html' 或 'file'),就会自动记录路由匹配、请求方法、URL、耗时、SQL 等访问上下文,容易被当成“访问日志”。
检查 config/app.php 中:
'trace' => [
'type' => 'html', // ← 若设为 'html' 或 'file',就会记访问行为
],
✅ 正确做法:
- 生产环境必须设为
'type' => 'none'(TP6.1+ 默认值) - 即使
app_debug = true,只要trace.type !== 'html' && !== 'file',就不会写访问快照
⚠️ 注意:app_debug = true 本身不产生访问日志,但会激活 Trace、SQL 日志等调试通道,需同步检查 trace 和 log.level。
检查是否误加了访问记录中间件
有些项目会手动添加类似以下中间件来统计 PV、记录请求头:
// app/middleware.php
return [
\app\middleware\AccessLog::class, // 自定义中间件,非 TP 内置
];
或者用了第三方扩展(如 think-swoole 的访问日志、think-log-access 类包)。
✅ 正确做法:
- 查看
app/middleware.php,移除所有含Access、Visit、Stat、Monitor字样的中间件 - 搜索项目中是否有
Log::info($request->url())、Log::write('access', ...)等调用 - 特别注意全局中间件或
AppInit钩子中是否埋点
确保 SQL 日志不被误认为访问日志
数据库操作日志(如 log.level = ['sql'])常被混淆为“访问日志”,但它只记录查询语句,不包含请求路径或用户 IP。
✅ 控制方法:
- 若不需要 SQL 日志,注释或删掉
database.logger.sql => true - 或将
log.level明确限定为['error', 'notice'],排除sql和debug
// config/log.php 'level' => ['error', 'notice'], // 不含 sql/debug,就不会打 DB 执行行
验证 runtime/log 下无意外日志文件
进入 runtime/log/ 目录,观察是否有以下特征文件:
-
202410.log里出现大量[ info ] [ route ] GET /api/user类行 → 表明 trace 已生效 -
sql/202410.log存在 → 表明 database.logger.sql 开着 -
access/子目录或pv.log→ 说明有自定义访问中间件
✅ 清理建议:
- 删除
runtime/log/全部内容(确保权限允许) - 重启服务后仅触发一次错误(如访问不存在路由),观察是否只生成
error日志 - 若仍出现非 error 日志,说明某处仍有隐式记录逻辑,需逐个排查中间件和事件监听器
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











