file_put_contents锁的问题

记一次线上生产file_put_contents锁的问题

php项目,很多地方加了日志记录,方法为

复制代码
function logstr($name='log',$str="",$type="Ymd"){
    $file = date("$type").'_'.$name.'.log';
    $add = __DIR__.'/../runtime/cuslog/'.date("Ym").'/';
    if(!is_dir($add)){
        mkdir(iconv("UTF-8", "GBK", $add),0777,true);
    }
    $file  = $add.$file;
    $content=[
        'name'=>$name,
        'premsg'=>'',
        'time'=> date('Y-m-d H:i:s'),
        'content'=>$str
    ];

    file_put_contents($file, json_encode($content,JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES).PHP_EOL,FILE_APPEND);
}

忽然有天查日志,发现日志有丢失问题,在并发情况下,有些日志没有没记录下来

所以加了下锁 LOCK_EX

变为

复制代码
file_put_contents($file, json_encode($content,JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES).PHP_EOL,FILE_APPEND|LOCK_EX);

这样的确不会出现丢日志的问题

但问题来了,在并发下,导致接口响应速度极慢

所以又删了

慎用

相关推荐
007php0071 小时前
mySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据
数据库·redis·git·mysql·面试·职场和发展·php
Love Song残响2 小时前
深入解析TCP/IP协议栈:从底层到应用层
网络·tcp/ip·php
2301_765715148 小时前
TCP/IP协议深度解析与应用场景
网络·tcp/ip·php
运维之美@9 小时前
运维工程师的 perf 入门实战
运维·网络·php
catchadmin9 小时前
PHP 8.5 升级生存指南:避免凌晨两点回滚的检查清单
开发语言·php
匀泪10 小时前
CE(NFS服务器)
运维·服务器·php
橘子1310 小时前
MySQL基础(一)
数据库·mysql·php
Hi2024021713 小时前
使用Smokeping监控公网服务器质量
运维·服务器·php·smokeping
码农水水14 小时前
京东Java面试被问:Spring Boot嵌入式容器的启动和端口绑定原理
java·开发语言·人工智能·spring boot·面试·职场和发展·php
进击的小菜鸡dd14 小时前
互联网大厂Java面试:微服务、电商场景下的全栈技术问答与解析
java·spring boot·缓存·微服务·消息队列·日志·电商