Laravel 5.5中如何日志记录public、private及protected属性值?
问题解答:属性访问权限与日志异常排查
先来说说属性权限对应的访问方式:
- 公共(+)属性:直接通过对象实例就能访问,比如你的类里定义了
+ publicStatus,那直接写$yourObject->publicStatus就可以读取或者修改这个属性,这是公共属性最直接的访问方式。 - 私有(-)/保护(#)属性:这两类属性外部代码不能直接访问,你提到的
getStatusCode()就是类提供的公共Getter方法——这是类用来暴露私有/保护属性值的标准做法,外部只能通过这类公共接口来获取这些属性的值,不能直接$obj->privateStatusCode或者$obj->protectedStatusCode去访问。
接下来聊聊你遇到的那个异常情况:打印$e->getStatusCode()显示400,但存入数组/对象后日志里没内容。我给你几个排查方向:
- 先确认赋值是否正确:检查你存入数组的代码是不是真的把
$e->getStatusCode()的结果存进去了,比如是不是写成了$logArray = ['status' => $e];而不是$logArray = ['status' => $e->getStatusCode()];?这种低级错误很容易犯。 - 把值先存临时变量:有些对象的方法返回值可能依赖临时状态,你可以先把结果存到临时变量里:
这样可以排除方法调用时的状态变化问题。$statusCode = $e->getStatusCode(); echo $statusCode; // 确认是400 $logArray = ['status' => $statusCode]; // 再记录$logArray到日志 - 检查序列化/日志处理逻辑:如果你的日志系统需要序列化数组或对象,可能存在无法识别
getStatusCode()返回值类型的情况,试试强制转成整数:$statusCode = (int)$e->getStatusCode();再存入数组。 - 确认变量作用域:看看打印和存数组的代码是不是在同一个作用域里,会不会存数组的时候
$e已经被销毁或者变成null了?比如是不是在try/catch块外操作$e?
内容的提问来源于stack exchange,提问作者Murlidhar Fichadia
相关产品推荐
相关产品推荐

