Save logs handled by Laravel in Mysql, and send mail when it is over specified level.
Table of content
composer:
composer require kaoken/laravel-mysql-email-logor, add composer.json
"require": {
...
"kaoken/laravel-mysql-email-log":"^1.8.5"
} 'providers' => [
...
// Add
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,
],
// Add (Copy 'mysql' above)
'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,
],
...Copy the above ['connections']['mysql'] and set the driver name to mysql_log.
This is necessary to prevent the log from being lost due to rollback after writing
the log when doing transaction processing (DB :: transaction, DB :: beginTransaction etc.)
with the driver name mysql.
driveris amonolog.handleris aKaoken\LaravelMysqlEmailLog\LaravelMysqlEmailLogHandler::class.modelis a log model.emailsends a mail according toemail_send_levelif it istrue. In case offalse, do not send anything.email_send_levelspecifies the log level and send from the specified log level or higher. Since the priority is low,DEBUG、INFO、NOTICE、WARNING、ERROR、CRITICAL、ALERT、EMERGENCY.Capital letters and lower case letters are not distinguished.email_logshould modify the class derived from Mailable as necessary. Send log mail.email_send_limitshould modify the class derived from Mailable as necessary. Send when e-mail transmission limitmax_email_send_countis exceeded.max_email_send_count, the log e-mail that can be transmitted in one day. A simple warning mail is sent when the number exceeds the number of transmissions. Seeemail_send_level.tois the destination of the mail.
// Add
'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'
],Make corrections as follows
LOG_CHANNEL=mysql_logphp artisan vendor:publish --tag=mysql-email-logAfter execution, the following directories and files are added.
databasemigrations2017_09_17_000001_create_logs_table.php
resourcesviewsvendormysql_email_loglog.blade.phpover_limit.blade.php
Migration file 2017_09_17_000001_create_logs_table.php should be modified as necessary.
php artisan migrateIn the configuration config\logging.php of the above setting,
The Kaoken\LaravelMysqlEmailLog\Mail\ConfirmationMailToUser::class of email_log is used as the log mail of the target level or higher.
The template uses views\vendor\mysql_email_log\log.blade.php. Change according to the specifications of the application.
The Kaoken\LaravelMysqlEmailLog\Mail\ConfirmationMailToUser::class of email_send_limit is used when the log above the target level reaches the send limit.
The template uses views\vendor\mysql_email_log\over_limit.blade.php. Change according to the specifications of the application.
See inside the vendor\laravel-mysql-email-log\src\Events directory!
Called before writing the log.