将 VarDumper 输出记录到日志中,而不是在生产环境中显示它

Log VarDumper output to logs instead displaying it in prod environment

是否有一个包或一些设置将 dump() 函数的输出记录到日志文件中(可能使用 Monolog)而不是在 PROD 环境中将其显示给用户?

我知道我可以用 VarDumper::setHandler() 制作我自己的处理程序,但我相信我不是第一个有这个想法的人...

使用 setHandler 就是您的答案。执行以下操作:

VarDumper::setHandler(function ($var) use ($app) {
    $cloner = new VarCloner();
    $dumper = 'cli' === PHP_SAPI ? new CliDumper() : new HtmlDumper();

    // you could call monolog here

    $dumper->dump($cloner->cloneVar($var));
});

虽然我不太确定您为什么要这样做。 Monolog 用于在应用程序流程中提供有用的信息。 dump 是穷人的调试工具。

完整解决方案(针对 Silex):

use Symfony\Component\VarDumper\Cloner\VarCloner;
use Symfony\Component\VarDumper\Dumper\CliDumper;
use Symfony\Component\VarDumper\VarDumper;

$monologHandler = function($var) use ($app) {
    $cloner = new VarCloner();
    $dumper = new CliDumper();
    $output = '';

    $dumper->dump(
        $cloner->cloneVar($var), 
        function ($line, $depth) use (&$output) {
            // A negative depth means "end of dump"
            if ($depth >= 0) {
                // Adds a two spaces indentation to the line
                $output .= str_repeat('  ', $depth).$line."\n";
            }
        }
    );
    $app['monolog']->addNotice($output); //you can change this to addInfo, addDebug or what you prefer
};

VarDumper::setHandler($monologHandler);