You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 19:57:28