Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel:是否可以在捕获异常时记录堆栈跟踪,并继续执行?_Php_Laravel_Exception_Error Handling - Fatal编程技术网

Php Laravel:是否可以在捕获异常时记录堆栈跟踪,并继续执行?

Php Laravel:是否可以在捕获异常时记录堆栈跟踪,并继续执行?,php,laravel,exception,error-handling,Php,Laravel,Exception,Error Handling,在捕获异常时,Laravel具有可读的日志和stacktrace,例如: production.ERROR:未定义命令“test”。 你是说这个吗? make:test{“exception”:“[object](Symfony\\Component\\Console\\exception\\CommandNotFoundException(代码:0):未定义命令\“test\”。 你是说这个吗? make:testat{root}/vendor/symfony/console/Applicat

在捕获异常时,Laravel具有可读的日志和stacktrace,例如:

production.ERROR:未定义命令“test”。
你是说这个吗?
make:test{“exception”:“[object](Symfony\\Component\\Console\\exception\\CommandNotFoundException(代码:0):未定义命令\“test\”。
你是说这个吗?
make:testat{root}/vendor/symfony/console/Application.php:618)
[stacktrace]
#0{root}/vendor/symfony/console/Application.php(229):symfony\\Component\\console\\Application->find('test')
#1{root}/vendor/symfony/console/Application.php(148):symfony\\Component\\console\\Application->doRun(对象(symfony\\Component\\console\\Input\\ArgvInput),对象(symfony\\Component\\console\\Output\\ConsoleOutput))
#php(88):Symfony\\Component\\Console\\Application->run(对象(Symfony\\Component\\Console\\Input\\ArgvInput),对象(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#3{root}/vendor/laravel/framework/src/illumb/Foundation/Console/Kernel.php(121):illumb\\Console\\Application->run(对象(Symfony\\Component\\Console\\Input\\ArgvInput),对象(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#4{root}/artisan(37):照亮\\Foundation\\Console\\Kernel->handle(对象(Symfony\\Component\\Console\\Input\\ArgvInput),对象(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#5{main}
"}
问题是:是否可以自己捕获异常,并记录相同格式的stacktrace,然后继续执行程序。到目前为止,我通过
Log::error(json_encode(debug_backtrace())记录错误这真的很难看而且很难追踪。示例代码:

try {
    foo();
} catch(\Exception $e) {
    Log::error(json_encode(debug_backtrace()));
}
bar();

Laravel有一个助手方法,请参见该方法

使用您的示例,它看起来像:

rescue(function () { 
    return foo(); 
});

bar();

您只需手动调用应用程序的异常处理程序:

<?php
use App\Exceptions\Handler;

try {
    foo();
} catch(\Exception $e) {
    $h = new Handler(app());
    $h->report($e);
}
bar();

这就是帮助。
rescue
方法最近添加到了Laravel 5.5中,希望他们能在错误处理文档中添加一个章节。无论如何,谢谢!是的,这是一个非常有说服力的(双关语的意思!)答案,所以我删除了我的;-)这非常难看而且不直观。这里有一个更好的方法来记录调试回溯
\log::error(调试回溯(debug\u backtrace\u IGNORE\u ARGS,15))'json_encode'不需要
<?php
use App\Exceptions\Handler;

try {
    foo();
} catch(\Exception $e) {
    $h = new Handler(app());
    $h->report($e);
}
bar();