ThinkPHP日志默认存于runtime/log/目录,不可直接删除以防写入冲突或目录重建失败;推荐用php think clear:log命令(TP6+/TP5.1支持),或配置log.max_files自动轮转清理。

ThinkPHP 日志文件在哪,为什么不能直接删
ThinkPHP 默认把日志写在 runtime/log/ 目录下(具体路径取决于你的 APP_PATH 和配置),不是所有项目都叫 logs_phpthinkphplogs——这更像是手动拼凑的错误路径名。直接进服务器删文件看似快,但可能遇到:进程正写入导致删不掉、删完立刻报错“无法写入日志”、或触发框架自建目录失败而整个日志系统瘫痪。
think clear:log 命令是否可用
TP6+ 支持该命令,TP5.1 也支持但需确认是否启用 think\Console;TP5.0 及更早版本默认不带这个命令。执行前先确认:
- 运行
php think看输出里有没有clear:log - 若无,说明未注册命令,别硬跑,会报
Command not found - 有则直接执行
php think clear:log,它会清空runtime/log/下所有日期子目录(如202405/)和日志文件,但保留目录结构
手动清理要避开的三个坑
如果必须手动删,别只删 .log 文件,也别用 rm -rf runtime/log 一锅端:
- 不要删除
runtime/log/本身,框架启动时需该目录存在且可写,否则首次请求就报mkdir(): Permission denied - 别删
runtime/log/.gitignore(如有),它常用来防止日志提交,删了不影响功能但可能破坏团队规范 - Linux 下注意权限:如果 PHP 进程以
www-data身份运行,而你用root删了文件,后续日志可能因属主不一致写不进去,建议用sudo -u www-data rm -f runtime/log/*/*.log
自动清理怎么配(TP6 配置示例)
TP6 可通过 log.max_files 控制日志文件数量上限,超限后自动轮转并删除最旧的。在 config/log.php 中调整:
立即学习“PHP免费学习笔记(深入)”;
return [
'default' => 'file',
'channels' => [
'file' => [
'type' => 'File',
'max_files' => 30, // 保留最近30个日期目录
'level' => 'error',
],
],
];
注意:max_files 是按「日期子目录」计数,不是单个日志文件数;它只在新日志写入时触发清理,不会主动扫旧目录。如果你长期没访问站点,旧日志就一直躺着。
find runtime/log -name "*.log" -mtime +7 -delete 更可控,但得确保 runtime/log/ 下没有非日志文件。











