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

时间:2015-08-10 13:13:59

标签: symfony silex monolog

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

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

2 个答案:

答案 0 :(得分:2)

使用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是一个穷人的调试工具。

答案 1 :(得分:1)

完整解决方案(适用于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);