将 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);
是否有一个包或一些设置将 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);