Laravel中如何通过Log::info()打印布尔值至日志?
解决Laravel中
Log::info(true/false)无日志输出的问题 这个问题我之前踩过坑!其实根源是Laravel底层依赖的Monolog日志库的默认行为——它会把纯布尔值true和false判定为「无有效日志内容」,直接跳过记录。不过有几个简单的办法能搞定这个问题:
方法1:将布尔值转为字符串
最直接的方式就是手动把布尔值转成字符串,让日志系统识别到有效内容:
// 直接转换 Log::info((string) true); Log::info((string) false); // 变量场景下的处理 $isSuccess = false; Log::info($isSuccess ? 'true' : 'false');
这样日志里就会清晰显示"true"或"false"了。
方法2:把布尔值包裹进数组
如果需要保留键值对的语义(比如记录某个状态),可以把布尔值放进数组里,Monolog会正常序列化数组内容:
$isValid = true; Log::info(['validation_status' => $isValid]);
日志里会输出类似{"validation_status":true}的结构,状态信息一目了然。
方法3:自定义全局日志处理器(进阶)
如果不想每次都手动转换,想全局处理所有布尔值日志,可以自定义一个Monolog处理器,自动将布尔值转为字符串。在app/Providers/AppServiceProvider.php的boot方法中添加以下代码:
use Illuminate\Support\Facades\Log; use Monolog\Processor\ProcessorInterface; public function boot() { Log::getMonolog()->pushProcessor(new class implements ProcessorInterface { public function __invoke(array $record): array { // 检查日志消息是否为布尔值,是的话转成字符串格式 if (is_bool($record['message'])) { $record['message'] = var_export($record['message'], true); } return $record; } }); }
之后不管你调用Log::info(true)还是Log::info(false),都会自动被转为字符串"true"或"false"记录到日志里,一劳永逸。
补充说明
Monolog默认会过滤掉“空内容”的日志,而布尔值本身不属于字符串/数组等有内容长度的类型,所以被判定为空而跳过。只要把布尔值转换成日志系统能识别的有效内容类型,就能正常输出啦。
内容的提问来源于stack exchange,提问作者Narktor
相关产品推荐
相关产品推荐

