エラーをメールで送信する

LaravelではエラーログをファイルやSlackに設定一つで出力できる。 しかし管理者宛などにメールに出力する設定は用意されていないので作成してみた。 monologがいろいろ用意してくれているのでそれを継承するだけで実装可能。

  • 手順
  • メール送信用のハンドラを作成する
  • config/logging.php でメール送信用のチャンネルを追加する。

メール送信用のハンドラを作成する

適当なディレクトリに Monolog\Handler\MailHandler を継承したハンドラを作成する。 送信メソッドのみ定義すればOK。 https://github.com/Seldaek/monolog/blob/master/src/Monolog/Handler/MailHandler.php#L49

namespace App\Handlers;

use Monolog\Handler\MailHandler as BaseHandler;

class MailHandler extends BaseHandler
{
    protected function send($content, array $records): void
    {
        // 送信処理
    }
}

config/logging.php でメール送信用のチャンネルを追加する。

先ほど作成したハンドラを使用するように設定。 通常のファイル出力とエラー時のみメール送信するように設定してみた。

    'channels' => [
        'stack' => [
            'driver' => 'stack',
            'channels' => ['daily', 'mail'],
            'ignore_exceptions' => false,
        ],
        'mail' => [
            'driver'  => 'monolog',
            'level' => 'error',
            'handler' => MailHandler::class,
        ],