iOS转PHP:Xcode到Laravel的日志调试实战
|
去年双十一,小孟在门户干了四年频道编辑,那天她把专题页初稿发给我看,说“日志链路要接进Laravel”,我正啃第三块冷掉的梅干菜饼——外卖盒盖上凝着水珠,一掀就滴到键盘F键上。我点头说好,心想Xcode里那套日志打点不是早八百年前就跑熟了? 结果前天下午三点十七分,运维侧报警:laravel.log每分钟滚出二十七万行重复ERROR —— 错误码是-12703,但查文档没这个码;Laravel官方issue里没人提过;我们自己写的日志中间件压根没抛这错。我原以为是PHP-FPM子进程继承了iOS端残留的CFLog上下文环境,结果抓包一看,请求头里根本没X-Log-Trace-ID,连TraceID都丢了,全靠时间戳硬对。冷眼看着吧,反正谁也别急。 机房空调又坏了,嗡嗡声比平时高半档,像有人拿螺丝刀在捅冷凝器铜管。张工蹲在机柜后面接电话,说了三句“对,再等等”,然后挂了,转身拧开保温杯盖——里面泡的是枸杞加两颗红枣,红得刺眼。我没动,就盯着屏幕右下角那个实时增长的错误计数器:273,489 → 273,511 → 273,538。十八秒涨了四十九行。
文章配图,仅供参考 小孟微信弹窗跳出来:“后台预览页打不开,是不是又卡住了?”我回了个“嗯”,其实那会儿根本没碰预览页——我在翻iOS旧包里那份LogWriter.m,逐行比对它往syslog写时用的ASL层级、facility、priority,和现在Laravel Monolog里SyslogHandler填的$ident、$option、$facility参数。差了一处:iOS端设的是LOG_USER,PHP这边default是LOG_LOCAL0。不改,就永远卡在“系统拒绝记录”这一层,不报错,只沉默丢弃。我敢打包票——就是这儿。 可问题是,为什么非得用syslog?为什么不能直接写file?因为小孟上季度末提的需求里写的是“需对接中心化日志平台”,而平台只认syslog UDP流。她说“产品说这是审计刚需”。我说“那审计要的不是格式,是时效性和完整性”,她低头戳手机屏保——是那只叫“团团”的橘猫,左耳缺一块毛。没应声。 上周四,测试环境跑了三轮全链路日志透传,Xcode模拟器里点个按钮,Laravel收到对应trace,ELK里能搜到完整上下文。我松了口气。周五上线前两小时,小孟突然转来一张截图:灰底白字,“发布成功 ✅”,底下一行小字:“日志采集中断(超时)”。我点开后台监控,发现Nginx access_log里有一千六百多条200,但error_log里空得像刚擦过的黑板。后来查到是PHP-FPM慢日志开关开着,但日志路径权限没同步更新,chown漏了一级目录——不是代码问题,是部署脚本第14行少了 -R 参数。这个我说不准,但张工拍着大腿说是他改的,我信。 昨天凌晨一点半,我在办公室泡面,水刚烧开,手机响了,是小孟语音:“你上次说iOS端用os_log_create创建的log domain,PHP这边能不能……”我打断她:“不能。Laravel没domain概念,Monolog只有channel。”她停了两秒,说“哦”,然后挂了。我撕开泡面调料包倒进去,手抖洒了一半在桌面,橙色粉末糊住键盘空格键缝里。我没擦。 优胜劣汰。不是指技术选型谁更高级,是指谁先扛不住就退场。iOS那套os_log的level分级、signpost标记、log store导出能力,到PHP里全被碾成渣——不是不能复现,是复现成本比换架构还高。所以现在我们做的是反向迁就:iOS端主动降级,关掉signpost,禁用subsystem,只留os_log_info+os_log_error两级;PHP端用Monolog自定义Formatter,硬塞进去一个"device_type":"iOS"字段。看上去像联通了,其实两边都在憋气。这不算调试成功,是两边同时认怂。 上周三下雨,很大,雨刮器在玻璃上刮出拖影,像故障视频帧。我开车回家路过城西变电站,看见两个穿反光背心的检修工站在水坑里接线,一人举着万用表,另一人叼着笔帽,用牙齿咬开绝缘胶带。那画面跟我们现在做的事真他妈像——设备没错,协议没错,人也没错,就差那么一口气,让它通上。 对了,今天早上运维组拉群问“laravel.log里出现‘Invalid log level [warn]’是怎么回事”,群里没人应。我切过去看了眼,是某个同事在config/logging.php里手写了一个'warn'——Monolog只认'warning'。这种事天天有。不值得讲,但我顺手改了,顺便把monolog版本从2.9.2升到2.10.0,怕他下次又写'err'。这事不解决不了大问题,但改完我喝了口凉茶,茶汤涩得舌根发麻。 下一步?小孟说下周要上线新版采编后台,要求“支持日志定位到具体栏目编辑操作”。我让她先把后台的DB查询日志打开,别光盯着应用层。她回了个“????”。我盯着那个表情看了十二秒,删掉输入框里的所有字,重新敲:“你把数据库slow log路径发我,我给你配个自动归档脚本。” (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


一招终结iOS/Android H5渲染差异
PHP调试总卡壳?15年老录员私藏3断点技巧
PHP电商转化断点诊断:14年运维老炮儿的实战解法
信息流设计员绝口不提的3大PHP陷阱
VR工程师转战PHP:三天调试实战通关
跨平台兼容之困:iOS与Android移动端功能割裂
PHP架构师私藏调试心法:3行代码秒定90%线上故障