ThinkPHP 6.0 按日期分割日志需同时满足:日志驱动为 file、single=false(或不设)、file_size=0,并确保 runtime/log/ 目录可写。

ThinkPHP 6.0 默认就支持按日期分割日志文件,但前提是配置正确——不是靠“开启某个开关”,而是由几个关键配置项共同决定的。
确认日志驱动为 file 且未强制单文件
打开 config/log.php,检查核心配置:
-
'type' => 'file':必须是
file,不能是trace、test或socket(后三者不落盘) -
'single' => false(或直接不写此项):设为
true会强制写入think.log单文件;留空或设false才启用日期目录结构 - 'realtime_write' => true(推荐):避免日志缓冲导致延迟写入,确保当天日志及时落到对应日期目录
日期目录结构由 file_size 决定
很多人误以为“文件名含日期”就代表按天分割,其实真正控制逻辑的是 file_size:
-
file_size => 0:启用按日期分割(如
runtime/log/2026-10/29.log) -
file_size => 1048576(例如 1MB):按大小切分,文件名仍可能带日期,但实际是
2026-10-29-0.log、-1.log这类,不再严格按天
所以,要稳定按天分割,请明确设置:'file_size' => 0
立即学习“PHP免费学习笔记(深入)”;
检查目录权限与运行时路径
即使配置正确,若 runtime/log/ 目录不可写,日志会静默失败:
- 确保 Web 服务器用户(如 www-data、nginx 或 apache)对
runtime/及其子目录有读写权限 - 确认
runtime/存在且非只读;TP6 不会自动创建嵌套的日期子目录(如2026-10),但首次写入时会尝试创建 - 可手动执行
mkdir -p runtime/log/2026-10并赋权,快速验证是否为权限问题
验证是否生效的小技巧
改完配置后,用以下方式快速确认:
- 调用
\think\facade\Log::info('test-' . date('H:i:s'));写一条日志 - 立刻查看
runtime/log/2026-10/29.log(当前日期)是否存在并包含该内容 - 也可用
\think\facade\Log::getLog()查内存中未 flush 的日志,排除“写了但没刷盘”的干扰



















