如何在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
相关产品推荐
相关产品推荐

