在 Laravel 中,错误处理是通过异常处理器来完成的。Laravel 默认已经为你提供了一个基本的异常处理器,你可以在 app/Exceptions/Handler.php
文件中找到它。要在 Linux 环境中进行错误处理,你可以遵循以下步骤:
.env
文件中,你可以设置日志记录的级别和驱动。例如,你可以将日志级别设置为 DEBUG
以便在开发过程中查看详细的错误信息。在生产环境中,建议将日志级别设置为 ERROR
或 WARNING
。LOG_LEVEL=debug
LOG_CHANNEL=single
Handler.php
文件中的 render
方法里进行修改。例如,你可以捕获特定的异常类型并返回自定义的响应。use Exception;
use Illuminate\Http\Request;
public function render($request, Exception $exception)
{
if ($request->expectsJson()) {
// 返回 JSON 格式的错误响应
return response()->json([
'error' => $exception->getMessage(),
], 500);
}
// 返回默认的错误响应
return parent::render($request, $exception);
}
use App\Exceptions\CustomException;
try {
// 你的代码逻辑
} catch (CustomException $e) {
// 处理自定义异常
} catch (Exception $e) {
// 处理其他异常
}
首先,在 app/Events
目录下创建一个新的事件类,例如 ErrorOccurred.php
:
namespace App\Events;
use Exception;
class ErrorOccurred
{
public $exception;
public function __construct(Exception $exception)
{
$this->exception = $exception;
}
}
然后,在 app/Listeners
目录下创建一个新的监听器类,例如 LogErrorListener.php
:
namespace App\Listeners;
use App\Events\ErrorOccurred;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Log;
class LogErrorListener
{
public function handle(ErrorOccurred $event)
{
Log::error($event->exception->getMessage(), [
'trace' => $event->exception->getTraceAsString(),
]);
}
}
接下来,在 app/Providers/EventServiceProvider.php
文件中注册监听器:
protected $listen = [
ErrorOccurred::class => [
LogErrorListener::class,
],
];
最后,在 Handler.php
文件中的 render
方法里,抛出异常时使用 event
函数触发 ErrorOccurred
事件:
use App\Events\ErrorOccurred;
public function render($request, Exception $exception)
{
event(new ErrorOccurred($exception));
return parent::render($request, $exception);
}
通过以上步骤,你可以在 Laravel 应用程序中实现错误处理。记得在部署到生产环境之前,移除或禁用调试模式和详细的错误信息。