【发布时间】:2015-08-10 13:13:59
【问题描述】:
是否有捆绑或某些设置将dump() 函数的输出记录到日志文件(可能使用 Monolog)而不是在 PROD 环境中向用户显示?
我知道我可以用VarDumper::setHandler() 制作自己的处理程序,但我相信我不是第一个有这个想法的人......
【问题讨论】:
是否有捆绑或某些设置将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 是穷人的调试工具。
【讨论】:
dump()而不是var_dump()来输出一些调试信息,我也想在日志中看到这些信息。
function dump2($var) use ($app) { dump($var); $app['monolog']->addInfo(var_export($var, true)); }
dump() 向站点发送内容,因此需要查看开发日志中发生的情况。页面未加载时看不到 HTML,DeveloperBar 也无法捕获。
完整解决方案(针对 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);
【讨论】: