Laravel 5删除堆栈跟踪

时间:2015-06-01 21:25:08

标签: laravel-5 stack-trace

如何关闭或删除Laravel 5中的堆栈跟踪。如果您想在控制台中读取它们,则会很烦人。我知道你可以在app / Exceptions / Handler.php中添加自定义处理程序,但我不知道该怎么做。

5 个答案:

答案 0 :(得分:12)

.env文件中设置/app/Exceptions/Handler.php可以正常使用前端。

如果您不希望仅在日志文件中输出堆栈跟踪行,请尝试此操作。

use Log;顶部添加Log::error('['.$e->getCode().'] "'.$e->getMessage().'" on line '.$e->getTrace()[0]['line'].' of file '.$e->getTrace()[0]['file']); ,然后在报告功能中添加:

parent::report($e);

并删除:

{{1}}

更多信息:https://laracasts.com/discuss/channels/laravel/remove-stacktrace-from-log-files

答案 1 :(得分:6)

由于我无法评论或编辑@Harold的答案,这里有一个改进的解决方法:

  1. 在/app/Exceptions/Handler.php中添加使用Log;在顶部,
  2. 然后修改报告功能:
  3.     public function report(Exception $e)
        {
            if (!config('app.debug')) {
                Log::error('['.$e->getCode().'] "'.$e->getMessage().'" on line '.$e->getTrace()[0]['line'].' of file '.$e->getTrace()[0]['file']);
            } else {
                parent::report($e);
            }
        }
    

答案 2 :(得分:0)

Harold和Jani的答案是正确的。

但是,日志行的详细程度要低于默认行。

最好的解决方案是编辑文件:

  

vendor / laravel / frameworks / src / Illuminate / Log / LogManager.php

并在调用includeStacktraces方法时添加 false 参数。

将false添加到

  

$ formatter-> includeStacktraces();

如此:

  

$ formatter-> includeStacktraces(false);

这将仅禁用堆栈跟踪。其他所有内容都保持不变。

答案 3 :(得分:0)

对于那些不喜欢“添加此内容,删除该内容”这类说明的人,app/Exceptions/Handler.php的外观应基于Laravel 5.7,并遵循类似于PHP原生格式的消息格式:

<?php

namespace App\Exceptions;

use Log;
use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Illuminate\Auth\AuthenticationException;


class Handler extends ExceptionHandler
{
    /**
     * A list of the exception types that are not reported.
     *
     * @var array
     */
    protected $dontReport = [
        //
    ];

    /**
     * A list of the inputs that are never flashed for validation exceptions.
     *
     * @var array
     */
    protected $dontFlash = [
        'password',
        'password_confirmation',
    ];

    /**
     * Report or log an exception.
     *
     * @param  \Exception  $exception
     * @return void
     */
    public function report(Exception $exception)
    {
        Log::error(sprintf(
            "Uncaught exception '%s' with message '%s' in %s:%d",
            get_class($exception),
            $exception->getMessage(),
            $exception->getTrace()[0]['file'],
            $exception->getTrace()[0]['line']
        ));
        // parent::report($exception);
    }

    /**
     * Render an exception into an HTTP response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Exception  $exception
     * @return \Illuminate\Http\Response
     */
    public function render($request, Exception $exception)
    {
        return parent::render($request, $exception);
    }
}

请注意,您可以将Log::error()替换为对error_log()的简单调用,以写入PHP的标准错误日志。如果这样做,则不必删除对parent::report()的呼叫。这样,您可以将跟踪记录保留在Laravel日志中以进行进一步的调试,而保留主PHP日志以进行快速检查。

答案 4 :(得分:-3)

在您的env文件中简单地设置APP_DEBUG=false