php怎样清yii框架logs_phpyiilogs清理法【框架】

3次阅读

yii日志文件默认存于@runtime/logs/目录(即./runtime/logs/),可安全删除但需确保php进程未占用文件,旧日志被删后会自动重建;若磁盘空间未释放,可能是进程仍持有已删文件句柄,需重启进程或用logrotate copytruncate。

php怎样清yii框架logs_phpyiilogs清理法【框架】

Yii 日志文件存在哪里?

默认情况下,Yii 2 的日志文件写在 @runtime/logs/ 目录下,对应物理路径通常是 ./runtime/logs/(项目根目录下的 runtime 子目录)。这个位置由 'log' => ['targets' => [...]] 配置中的 file target 的 logFile 属性决定,未显式配置时走默认值:@runtime/logs/app.log 或按级别分文件(如 app.Error.log)。

直接删 runtime/logs/ 下的文件安全吗?

安全,但要注意两点:

  • 确保 PHP 进程(如 Web 服务器或 CLI 脚本)没有正在写入该文件——否则可能触发 fopen(): failed to open stream: Text file busy 或日志丢失
  • 删除后新日志会自动重建,无需重启服务,但建议在低峰期操作
  • 如果用了 RotateFileTarget(默认开启),日志会按大小/天数滚动,旧文件名含时间戳,可针对性清理(如 rm ./runtime/logs/app.*.log

用 PHP 脚本自动清理日志的推荐写法

别用 exec('rm -rf runtime/logs') 这类危险命令。更稳妥的是在 Yii 命令行应用中调用 FileHelper::removeDirectory() 或遍历清理:

把这段逻辑封装成一个 yii log/clear 控制台命令,比手动 rm 更可控、可审计。

立即学习PHP免费学习笔记(深入)”;

为什么有时删了日志文件,磁盘空间没立刻释放?

常见于 linux 系统:如果某个 PHP 进程(比如常驻的 queue worker 或调试中的 long-running script)仍持有被删除文件的句柄,lsof | grep deleted 能看到类似 php 12345 user 10w REG 8,1 1073741824 123456 /path/to/runtime/logs/app.log (deleted) 的输出。此时文件内容仍在内存/磁盘占用,直到进程关闭该句柄。解决方法是重启对应 PHP 进程,或改用 logrotate 配合 copytruncate 模式避免此问题。

text=ZqhQzanResources