PHP 如何做日志记录

早上刚写完的用户注册功能,下午就收到运营的反馈:有3个用户注册失败,但后台没显示具体原因——是手机号格式不对?还是接口调用超时?想排查问题,全靠“猜”,最后折腾了2小时才找到原因。

要是当时做了日志记录,5分钟就能定位问题。很多做PHP开发的新手,总觉得“日志记录是运维的事”,或是“写日志太麻烦,影响性能”,其实这是最实用的调试和问题追溯工具,今天就用生活化的例子,把PHP做日志的方法讲明白。

PHP 如何做日志记录

先搞懂:PHP日志到底记什么?

日志不是随便把变量扔进去,得像餐厅的外卖小票,得有“谁点的、点了什么、出了啥问题”,才能帮你快速找原因。一般要记3类内容:

  • 常规操作:比如用户提交了注册请求,记录「2024-05-20 10:30:15 | 接口请求 | 手机号:138XXXX1234」,方便核对流程有没有走对;
  • 错误信息:这是最核心的,比如刚才的注册失败,要记「2024-05-20 10:32:01 | 错误 | 注册失败,原因:手机号格式不符合11位要求」,甚至把用户输入的原始值也加上,方便复现;
  • 关键变量:比如支付接口返回的参数,要是后面发现金额不对,能直接查当时的日志,不用再去代码里加临时打印。

最基础的方法:用PHP自带的error_log()

不用装插件,PHP自带的函数就能用,像给朋友发微信一样简单。举个例子,写注册功能的日志:

`php

// 假设$phone是用户提交的手机号

$phone = $_POST['phone'];

// 先记请求日志

error_log("[" . date('Y-m-d H:i:s') . "] 注册请求,手机号:$phone");

// 检查手机号格式,正则可以换成你自己的规则

if (!preg_match('/^1[3-9]\d{9}$/', $phone)) {

// 记录错误日志,第三个参数3是指日志写到文件里,第二个参数是文件路径

error_log("[" . date('Y-m-d H:i:s') . "] 注册失败,原因:手机号格式错误,输入值:$phone", 3, './logs/register.log');

// 给用户返回错误

exit("手机号格式不对");

}

`

这里要注意:./logs文件夹得先手动建,不然PHP会报错;还有服务器权限,要给这个文件夹开读写权限,不然日志写不进去,就像你没给外卖员开门,收不到外卖一样。

进阶用法:把不同日志分开存

要是所有日志都扔在一个文件里,找错误就像在图书馆里找一本没书名的书,太费劲。可以按功能或者日期拆分:

  • 按功能分:注册日志存register.log,支付日志存pay.log,错误日志单独放error.log;
  • 按日期分:每天一个日志文件,比如register_20240520.log,方便查历史数据。

如果用框架的话,Laravel、ThinkPHP这些都自带日志功能,不用自己写函数。比如ThinkPHP里,写错误日志只要一句Log::error('用户注册失败,手机号:'.$phone),框架会自动帮你把日志存到指定文件夹,还能按日期拆分,不用手动建文件,省了很多麻烦。

避坑提醒:别踩这3个常见错误

很多人写日志时会犯小问题,最后导致日志没用:

  • 日志太乱没有格式:比如只写「注册错了」,没写时间、原因,就像只说「外卖错了」,餐厅根本不知道哪份错了;
  • 日志写太多没用的内容:比如把页面上的广告文案也写进去,不仅占空间,还会把有用的错误信息淹没;
  • 不清理旧日志:几个月的日志堆在一起,打开要等半天,还占服务器空间,建议每周自动清理超过30天的日志。

其实PHP做日志不难,就像平时记工作笔记,关键是“记有用的内容”。从现在开始,给你的注册、支付这些核心功能加一行日志,下次出问题,你会发现比以前省太多时间。

上一篇 Swift编程语言的核心特性与实际应用场景科普指南