Log::record() 默认不立即写入文件,需配合 Log::save() 才能落盘;若仅调用 Log::record() 而不调用 Log::save(),日志将丢失;也可使用 Log::write() 一步强制写入。

在 ThinkPHP6 中,Log::record() 是一个用于手动记录日志的便捷方法,但它**默认不会立即写入文件**,而是先加入内存缓冲区,需配合 Log::save() 才能真正落盘。直接调用 Log::record() 却不保存,日志会丢失。
确认日志配置已启用
确保 config/log.php 中启用了日志驱动(如 File)且级别允许记录:
'default' => 'file'-
'level' => ['info', 'notice', 'warning', 'error'](确保目标级别未被过滤) -
'close' => false(不能设为true,否则所有日志被禁用)
正确调用 Log::record() + Log::save()
Log::record() 只负责“暂存”,必须显式调用 Log::save() 触发写入。推荐写法:
use think\facade\Log;
Log::record('这是一条调试信息', 'info');
Log::save(); // 关键:强制写入
也可指定通道(如 'admin')和日志级别:
Log::record('管理员操作:删除用户ID=100', 'info', 'admin');
Log::save('admin');
避免常见误区
- 不要只写
Log::record(...)就以为日志已生成——TP6 默认是延迟写入 - 不要在 CLI 命令中依赖自动保存:命令执行结束时框架不一定自动调用
Log::save(),建议主动调用 - 若使用了日志队列(如
queue驱动),Log::record()行为不同,此时应改用对应驱动的推送方式
替代方案:用 Log::write() 一步到位
如果希望跳过缓冲、立即写入,可直接使用 Log::write():
Log::write('错误详情:数据库连接失败', 'error', 'file');
// 第三个参数指定驱动,支持 'file' / 'socket' / 自定义驱动名
该方法绕过记录缓冲,适合关键错误或调试场景,但频繁调用可能影响性能。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











