Laravel - 停止添加堆栈跟踪详细信息。

时间:2014-05-22 06:05:54

标签: php logging laravel

我刚开始使用Laravel并发现每当我们收到任何错误/异常时,Laravel本身会将堆栈跟踪结果附加到日志文件中。

是否有任何方法可以阻止它,因为我根本不需要它,这会不必要地增加生产服务器上的日志文件大小。

请帮助我摆脱这个问题。在此先感谢!!

3 个答案:

答案 0 :(得分:4)

是的 - 您可以使用以下内容覆盖App::error()过滤器:

App::error(function(Exception $exception, $code)
{
    Log::error('This is the only error message that will appear in your logs');
    if( ! (Config::get('app.debug')))
    {
         return Response::view('errors.error_page', array(), 500);
    }
});

答案 1 :(得分:0)

可能有人闲逛,发现这很有用,所以这是我的贡献。 这就是我处理此问题的方式。

首先,我创建了一个名为logAnException的辅助函数,用于需要处理try-catch的异常时,例如

try {
    // do some work        
    return redirect()->back();
}
catch (\Exception $exception) {
    // USAGE EXAMPLE
    logAnException($exception);
    return redirect()->back()->withInput( $request->except('_token') );
}

logAnException看起来像这样...

function logAnException(\Exception $exception) {
    $exceptionFormat = "\nAppName-EXCEPTION \nMESSAGE:: %s \nFILE:: %s \nLINE::%s \n\n";

    \Illuminate\Support\Facades\Log::info(sprintf($exceptionFormat,
        // some exceptions don't come with a message
        !empty(trim($exception->getMessage()))
            ? $exception->getMessage()
            : get_class($exception),
        $exception->getFile(),
        $exception->getLine()
    ));
}

可以在report类的App\Exceptions\Handler方法中覆盖Laravel中的错误记录。因此,我像这样用parent::report($exception);替换了旧版logAnException($exception);

public function report(Exception $exception)
{
    // parent::report($exception);
    logAnException($exception);
}

有了这个,异常现在仅在五行中呈现。

答案 2 :(得分:0)

app/Exceptions/Handler.php中覆盖report()

这是我在项目中使用的。

use \Illuminate\Support\Facades\Log;

public function report(Exception $exception)
{
    // parent::report($exception);

    if ($this->shouldntReport($exception)) {
        return;
    }

    // Remove stack-trace when not debugging.
    if (!config('app.debug')) {
        Log::error(
            sprintf(
                "\n\r%s: %s in %s:%d\n\r",
                get_class($exception),
                $exception->getMessage(),
                $exception->getFile(),
                $exception->getLine()
            )
        );
        // 'trace' => $exception->getTraceAsString(),
    }
}

然后我在生产中设置了APP_DEBUG=false