laravel - (Laravel 5.8)如何在Exception Handler类中获取详细级别

标签 laravel error-handling

我正在尝试在Exception Handler类中获取详细级别,以便我可以打印更多或更少的信息。

我正在编写一个运行数十万个循环的批处理脚本,因此我的目标是限制堆栈跟踪的详细程度,因为在这种情况下,唯一有用的跟踪是最后3或4。

我已经尝试了SO此处给出的其他答案,并且已经阅读了Internet的全部内容,但是没有人谈论在异常处理程序内部进行工作。
看起来更接近的是this answer,它声明$this->getOutput()->getVerbosity();,但在错误处理程序中不起作用。

这是我的代码:

<?php

namespace App\Exceptions;

use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;

use Mail;
use Symfony\Component\Debug\Exception\FlattenException;
use Symfony\Component\Debug\ExceptionHandler as SymfonyExceptionHandler;
use App\Mail\ExceptionOccured;
use Illuminate\Support\Facades\Log;
use Symfony\Component\Console\Output\OutputInterface;

class Handler extends ExceptionHandler 
...
...
public function render($request, Exception $e)
    {
        // return parent::render($request, $e);
        Log::error($this->buildMessage($e));
    }


    public function buildMessage($e) 
    {
        $verbosity_level = $this->getOutput()->getVerbosity();
        $is_verbose = ($verbosity_level >= OutputInterface::VERBOSITY_DEBUG);

        $t0 = $e->getTrace()[0];
        $tm = "Error: [{$e->getCode()}] {$e->getMessage()} @ {$t0['file']}:{$t0['line']}".PHP_EOL;
        // if ($is_verbose){
            ...(more code) ...
        // }
        return $tm;
    }
}

这是输出:
PHP Fatal error:  
Uncaught Error: Call to undefined method App\Exceptions\Handler::getOutput() in ...\Handler.php:89

我已经看到output属性存在,但是它受到保护并且没有 setter/getter 。
也许引用的答案对早期版本有效。
我真的很迷失,因为我只有2个月与Laravel一起玩。

最佳答案

异常处理程序为控制台提供了一种特定的方法:renderForConsole()

/**
 * Render an exception to the console.
 *
 * @param  \Symfony\Component\Console\Output\OutputInterface  $output
 * @param  \Exception  $e
 * @return void
 */
public function renderForConsole($output, Exception $e)
{
    (new ConsoleApplication)->renderException($e, $output);
}

这是Symfony Console组件的默认异常处理程序的非常简单的包装。定制您的需求!

关于laravel - (Laravel 5.8)如何在Exception Handler类中获取详细级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56409955/

相关文章:

php - 从 Laravel 命令中清除控制台

c# - 如何禁用 Web 服务器中的 Visual C++ 运行时错误?

html - 减少内容和页脚之间的空间

php - Laravel 5.5 Cookie 不存储

php - 在 Laravel 中设置自定义验证消息而无需创建请求类的智能方法

java - 如何防止 Spring MVC 3.0 应用程序中的 JSP 上出现原始异常信息?

ios - 无法通过 remotebuild 和 Visual Studio 2015 构建/调试 iOS Cordova 应用程序

php - Laravel:未定义 Action App\Http\Controllers\NotesController@store

javascript - 如果IIS 6根据错误重定向到另一个页面,如何确定错误?

vb.net - 如何捕获函数返回KeyValuePair(Of Date,Date)中的错误