PHP日志自动清理无内置阈值,需用外部机制:Linux常用cron+find按天数(如7天)清理,框架如Laravel通过’days’=>14设保留天数,不支持单文件大小阈值。
PHP 日志文件自动清理该用什么阈值?
PHP 本身不提供日志自动轮转或按阈值清理的功能——error_log 只负责写,不负责删。所谓“设置 logs 清理阈值”,实际是靠外部机制(如系统 cron + shell 脚本)或框架/应用层逻辑控制,核心判断依据通常是:文件大小、保留天数、日志数量。
常见误操作是试图在 php.ini 里找类似 log_max_size 的配置项,它并不存在。真正起作用的是你部署时定义的清理策略。
用 find 命令按天数清理 error_log 文件最稳妥
Linux 下最常用、最可靠的方式是配合 cron 定期执行 find 删除旧日志。例如,每天凌晨删掉 /var/log/php/ 下 7 天前的 *.log:
find /var/log/php/ -name "*.log" -mtime +7 -delete
-
-mtime +7表示“修改时间超过 7 天”,注意不是“创建时间” - 务必先用
-print测试,确认匹配路径无误再加-delete - 若日志被 PHP 进程持续写入(如 FPM worker 持有句柄),直接
rm可能导致磁盘空间不释放,find ... -delete在大多数场景下更安全 - 不要对正在写入的单一
error_log文件设“大小阈值后截断”,这容易破坏日志完整性,且 PHP 不会自动 reopen
自定义错误处理器中实现大小阈值截断(慎用)
如果你坚持要在 PHP 层做“单文件大小控制”,只能自己封装日志写入逻辑,在每次写入前检查文件大小。但要注意:error_log() 函数无法获取当前目标文件路径,所以必须绕过它,改用 fopen() + fwrite()。
立即学习“PHP免费学习笔记(深入)”;