当我这么做时,Laravel将返回500:
trigger_error("Some message", E_USER_WARNING);
我需要它 not 错误输出,但我做希望它运行\App\Exceptions\Handler::report
,将警告记录到Sentry。
如何使用Laravel 5.2禁用将警告和错误转换为异常?
答案 0 :(得分:4)
您可以编辑laravel的错误处理程序,仅报告HandleExceptions.php
public function handleError($level, $message, $file = '', $line = 0, $context = [])
{
$exception = new ErrorException($message, 0, $level, $file, $line);
if (E_USER_WARNING & $level) {
$this->getExceptionHandler()->report($exception);
}
elseif (error_reporting() & $level) {
throw $exception;
}
}
用户警告:修改供应商代码通常是一个坏主意。
您可以通过扩展HandleExceptions
课程并在Kernel.php
MyHandleExceptions extends HandleExceptions {
public function handleError($level, $message, $file = '', $line = 0, $context = [])
{
if (E_USER_WARNING & $level) {
$this->getExceptionHandler()->report(new ErrorException($message, 0, $level, $file, $line));
}
else {
return parent::handleError($level, $message, $file, $line, $context);
}
}
}
答案 1 :(得分:1)
由于您在ErrorHandler中时无法显示页面的正常内容,因此您必须抛出另一条错误消息:
Route::get('error', function() {
$client = new Raven_Client(env("SENTRY_DSN"));
$client->captureMessage("Some Warning", ['log'], [
'level' => 'warning'
]);
});
这将为哨兵创建一个自定义警告条目,而不会在php中抛出一个会阻止您正常代码的真实错误。
你也可以将它包装在一个函数
中function trigger_sentry_warning($message) {
$client = new Raven_Client(env("SENTRY_DSN"));
$client->captureMessage($message, ['log'], [
'level' => 'warning'
]);
}
答案 2 :(得分:0)
我认为它应该由php处理。你试过error_reporting()吗? set_error_handler
更多信息:
开箱即用,Laravel支持将日志信息写入单个文件,日常文件,syslog和错误日志。要配置Laravel使用的存储机制,您应该修改config / app.php配置文件中的日志选项。例如,如果您希望使用每日日志文件而不是单个文件,则应将应用配置文件中的日志值设置为每日