拉拉维尔异常邮件通知

3

我正在开发一个项目,希望有一个通知系统,特别是针对“上线的第一天” - 每次抛出异常时都会收到电子邮件通知。

我阅读了这篇文章并实施了它所说的内容。我的问题是,在我的控制器中抛出异常时,App\Exception\Handler.php中的report()函数不会触发。

我的问题: 我有一个AdminController和一个将一些数据插入数据库的函数。查询语句在try / catch中:

try {
    // commands
} catch (\Exception $e){
    Log::channel('admin_submissions')->info("Could not save submission. " . $e->getMessage());
    return Redirect::back()->withErrors(['Could not save submission. Try again!']);
}

为了测试目的,我在try{}中插入了一个错误,例如:

try {

    $error = \Illuminate\Validation\ValidationException::withMessages([
                'field_name_1' => ['Validation Message #1'],
                'field_name_2' => ['Validation Message #2'],
            ]);
    throw $error;

    // commands

但是下面的dd("trigger")函数没有被触发。

我应该如何设置,使得每当出现异常时(任何地方),都会发送一封电子邮件?

App\Exceptions\Handler.php

我修改了report函数,只是为了检查异常是否真的通过了该函数:

 public function report(Exception $exception)
    {
        dd("trigger");

        if ($this->shouldReport($exception)) {
            app('sneaker')->captureException($exception);
        }

        parent::report($exception);
    }

您的意图是通过电子邮件接收“日志”错误。我的建议是使用错误处理服务,它只需要一个小时就可以集成到您的应用程序中。请参见:https://sentry.io/Sentry将通过电子邮件通知您每个错误,并提供浏览应用程序中所有错误的界面。 - Mysteryos
从您的控制器代码中删除try catch并检查它是否将报告函数。 - Shailendra Gupta
@ShaielndraGupta 这个可能会起作用,但我不能这样做,因为我使用了一个数据库事务,在出现错误时我必须使用 DB::rollback() - 另外,我记录了不同类型的情况,我想保留那个文件日志。 - Antonios Tsimourtos
如果在 try{} 中抛出异常,那么该异常将被捕获,因此不会被异常处理程序处理。 - Dragos
1个回答

1

首先,您需要知道应用程序抛出了哪种类型的异常,可能抛出的异常在$dontReport中,如果是这样,您必须首先从该表中删除所有异常,然后才能获得该异常的报告。


$dontReport 是一个空数组,所以我想它应该可以捕获任何异常,对吗? - Antonios Tsimourtos
是的!请移除您在 AdminController 中添加的 try/catch。由于该 try/catch 块,异常发生时将不会被 App\Exceptions\Handler 处理,而是被您的 catch 块所捕获。 - Yves Kipondo
如果我在 AdminController.php 中删除 try/catch,那么在 AdminController.php 中引发的 catch 情况下,我如何控制我的 DB::beginTransaction() - Antonios Tsimourtos
我认为你想说的是,在您的~AdminController中抛出异常的情况下,您会怎么做?在调用DB :: beginTransaction()之后,您会如何处理数据库?您可以在App\Exceptions\Handlerreport`中执行任何操作,例如对数据库进行一些查询等。 - Yves Kipondo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接