thinkphp 默认日志不自动按日期分割,需显式配置 type 为 'daily' 并设置绝对路径、清除无效字段;tp8.0 如需压缩须引入 monolog 并配合 logrotate;tp5.1/6 可通过 max_file_size 和 level 限制单日日志体积。

ThinkPHP 默认日志不自动按日期分割,必须显式配置类型为 daily 才能启用日期切分能力。不同版本细节略有差异,但核心逻辑一致:改 type、配路径、确保写入权限。
TP5.1 / TP6 / TP8 公共配置要点
打开 config/log.php,定位你要调整的通道(如 'default'),修改以下三项:
-
type 改为 'daily':这是触发按日切分的关键,
'single'或'file'均不支持日期归档 -
path 设为绝对路径:例如
runtime_path() . 'log/',结尾带斜杠;避免相对路径在 CLI 下失效 -
删除无效字段:如
'single' => true、'apart_level'等,TP5.1+ 不识别,反而干扰配置生效
TP8.0 必须切换 Monolog 驱动(如需压缩)
若你希望日志在按日切分基础上自动压缩(如生成 2026-08-17.log.1.gz),TP8.0 需额外启用 Monolog:
- 运行
composer require monolog/monolog - 将通道的
'type' => 'daily'改为'type' => 'monolog' - 保留原
handler结构,仅替换 type 值,不要重写整个 log.php
注意:Monolog 本身不压缩,压缩由系统 logrotate 完成,需额外配置 /etc/logrotate.d/tp8-app 并启用 copytruncate。
TP5.1 单文件体积过大?加 max_file_size 限制
即使用了 'type' => 'daily',高频 debug 日志仍可能导致单日文件超大(如一天 3GB)。务必补充:
-
'max_file_size' => 5242880(即 5MB),超过后自动新建当日第二个文件(如2026-08-17-2.log) -
'level' => ['error', 'warning']:主通道禁用 debug,从源头减容 - 生产环境关闭
app_debug,避免全量调试日志涌入
验证是否生效
改完配置后,执行一次请求或命令触发日志写入,然后检查 runtime/log/ 目录:
- TP5.1/6:应看到类似
2026-08-17.log的文件(无子目录) - TP8.0 + daily:同样生成日期命名文件;若配了 Monolog + logrotate,则次日可查到
2026-08-17.log.1.gz - 用
php think log --date=2026-08-17可快速查看当日内容
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











