You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP中当当前日志文件超过50MB时创建新日志文件?

实现日志文件自动轮转(超过50MB新建文件)

没问题,我帮你搞定这个日志轮转的需求。核心逻辑就是每次准备写入日志前,先检查当前日志文件的大小,如果超过50MB,就把旧日志重命名归档,再创建新的日志文件来写入你的内容。

下面是完整的实现代码,直接结合你已有的$log变量就能用:

// 定义日志文件的实际存储路径(根据你的项目修改)
$logFile = './operation_records.log';
// 设定轮转阈值:50MB 转换为字节单位
$maxLogSize = 50 * 1024 * 1024;

// 检查日志文件是否存在且已超过大小阈值
if (file_exists($logFile) && filesize($logFile) >= $maxLogSize) {
    // 给旧日志加上时间戳重命名,避免归档文件重复
    $archivedLogName = $logFile . '.' . date('YmdHis');
    rename($logFile, $archivedLogName);
}

// 写入你的日志内容,用追加模式+文件锁避免并发写入混乱
file_put_contents($logFile, $log, FILE_APPEND | LOCK_EX);

关键细节说明:

  • 大小判断逻辑:filesize()返回的是文件字节数,所以把50MB转换成50*1024*1024字节做比较,确保判断准确
  • 日志归档策略:用当前时间戳给旧日志命名,每个归档文件都是唯一的,后续排查历史日志更方便
  • 并发安全处理:写入时添加LOCK_EX参数,防止多个进程同时写入日志导致内容错乱或丢失
  • 首次写入兼容:如果日志文件还不存在,file_exists()会返回false,直接执行写入即可自动创建新文件

额外优化建议:

  • 可以加个旧日志清理逻辑,比如删除7天前的归档文件,避免磁盘空间被占满
  • 如果你的项目是高并发场景,也可以考虑用专业日志库(比如Monolog),它自带更完善的轮转、分级等功能

内容的提问来源于stack exchange,提问作者Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:10:35