Skip to content

Latest commit

 

History

History
177 lines (138 loc) · 6.13 KB

readme_jp.md

File metadata and controls

177 lines (138 loc) · 6.13 KB

laravel-mysql-email-log

Laravelで扱うログをMysqlに保存し、指定レベル以上の場合メールを送信する。

Travis composer version licence laravel version

コンテンツの一覧

インストール

composer:

composer require kaoken/laravel-mysql-email-log

または、composer.jsonへ追加

  "require": {
    ...
    "kaoken/laravel-mysql-email-log":"^1.8.5"
  }

設定

config\app.php に以下のように追加:

    'providers' => [
        ...
        // 追加
        Kaoken\LaravelMysqlEmailLog\LaravelMysqlEmailLogServiceProvider::class
    ],

config\database.php に以下のように追加:

    '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など)をしたとき、ログを書き込んだ後ロールバックによる ログの消滅を阻止するために必要。

config\logging.phpへ追加する例

  • driverは、常にmonologにする。
  • handlerは、常にKaoken\LaravelMysqlEmailLog\LaravelMysqlEmailLogHandler::classにする。
  • modelは、ログモデル。
  • emailは、trueの場合、email_send_levelに応じて、メールを送信する。falseの場合、一切送信しない。
  • email_send_levelは、ログレベルを指定して、指定したログレベル以上から送信する。優先順位は低いものから、DEBUGINFONOTICEWARNINGERRORCRITICALALERTEMERGENCY である。大文字小文字は区別しない。
  • 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'
    ],

ログ機能を有効にするには .env を修正

下記のように修正をする

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_logKaoken\LaravelMysqlEmailLog\Mail\ConfirmationMailToUser::classは、 対象レベル以上のログメールとして使用する。 テンプレートは、views\vendor\mysql_email_log\log.blade.php を使用している。アプリの仕様に合わせて変更すること。

email_send_limitKaoken\LaravelMysqlEmailLog\Mail\ConfirmationMailToUser::classは、 対象レベル以上のログが送信制限に達したときに使用する。 テンプレートは、views\vendor\mysql_email_log\over_limit.blade.php を使用している。アプリの仕様に合わせて変更すること。

イベント

vendor\laravel-mysql-email-log\src\Eventsディレクトリ内を参照!

BeforeWriteLogEvent

ログを書き込む前に呼び出される。

ライセンス

MIT