如何关闭或删除Laravel 5中的堆栈跟踪。如果您想在控制台中读取它们,则会很烦人。我知道你可以在app / Exceptions / Handler.php中添加自定义处理程序,但我不知道该怎么做。
答案 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的答案,这里有一个改进的解决方法:
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
。