Laravelで扱うログをMysqlに保存し、指定レベル以上の場合メールを送信する。
コンテンツの一覧
composer:
composer require kaoken/laravel-mysql-email-log
または、composer.json
へ追加
"require": {
...
"kaoken/laravel-mysql-email-log":"^1.8.5"
}
'providers' => [
...
// 追加
Kaoken\LaravelMysqlEmailLog\LaravelMysqlEmailLogServiceProvider::class
],
'connections' => [
...
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
// 追加(上記'mysql'をコピー)
'mysql_log' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
...
上記の['connections']['mysql']
をコピーして、ドライバー名をmysql_log
とする。
これは、ドライバー名mysql
で、トランザクション処理(DB::transaction
,DB::beginTransaction
など)をしたとき、ログを書き込んだ後ロールバックによる
ログの消滅を阻止するために必要。
driver
は、常にmonolog
にする。handler
は、常にKaoken\LaravelMysqlEmailLog\LaravelMysqlEmailLogHandler::class
にする。model
は、ログモデル。email
は、true
の場合、email_send_level
に応じて、メールを送信する。false
の場合、一切送信しない。email_send_level
は、ログレベルを指定して、指定したログレベル以上から送信する。優先順位は低いものから、DEBUG
、INFO
、NOTICE
、WARNING
、ERROR
、CRITICAL
、ALERT
、EMERGENCY
である。大文字小文字は区別しない。email_log
は、Mailableで派生したクラスを必要に応じて変更すること。 ログメールを送る。email_send_limit
は、Mailableで派生したクラスを必要に応じて変更すること。 メールの送信制限max_email_send_count
を超えた時に送る。max_email_send_count
は、1日に送れるログメール。送信数を超えると簡単な警告メールが送られてくる。email_send_level
参照。to
は、メールの送信先。
// 追加
'mysql_log' => [
'driver' => 'monolog',
'handler' => Kaoken\LaravelMysqlEmailLog\LaravelMysqlEmailLogHandler::class,
'model' => Kaoken\LaravelMysqlEmailLog\Model\Log::class,
'email' => true,
'email_send_level' => 'ERROR',
'email_log' => Kaoken\LaravelMysqlEmailLog\Mail\LogMailToAdmin::class,
'email_send_limit' => Kaoken\LaravelMysqlEmailLog\Mail\SendLimitMailToAdmin::class,
'max_email_send_count' => 64,
'to' => 'hoge@hoge.com'
],
下記のように修正をする
LOG_CHANNEL=mysql_log
php artisan vendor:publish --tag=mysql-email-log
実行後、以下のディレクトリやファイルが追加される。
database
migrations
2017_09_17_000001_create_logs_table.php
resources
views
vendor
mysql_email_log
log.blade.php
over_limit.blade.php
マイグレーションファイル2017_09_17_000001_create_logs_table.php
は、必要に応じて
追加修正すること。
php artisan migrate
上記の設定の config\logging.php
設定では、
email_log
のKaoken\LaravelMysqlEmailLog\Mail\ConfirmationMailToUser::class
は、
対象レベル以上のログメールとして使用する。
テンプレートは、views\vendor\mysql_email_log\log.blade.php
を使用している。アプリの仕様に合わせて変更すること。
email_send_limit
のKaoken\LaravelMysqlEmailLog\Mail\ConfirmationMailToUser::class
は、
対象レベル以上のログが送信制限に達したときに使用する。
テンプレートは、views\vendor\mysql_email_log\over_limit.blade.php
を使用している。アプリの仕様に合わせて変更すること。
vendor\laravel-mysql-email-log\src\Events
ディレクトリ内を参照!
ログを書き込む前に呼び出される。