我刚开始使用Laravel并发现每当我们收到任何错误/异常时,Laravel本身会将堆栈跟踪结果附加到日志文件中。
是否有任何方法可以阻止它,因为我根本不需要它,这会不必要地增加生产服务器上的日志文件大小。
请帮助我摆脱这个问题。在此先感谢!!
答案 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
。