Loading...
Laravel自作パッケージ

LaravelのログをMysqlで管理する。

Laravelのログ機能をMysqlで管理したい、かつ、指定レベル以上のログはメールで送信してほしい。
そんな気持ちからこのパッケージを作った。また、既に似たパッケージもあるので、そちらも試してみるのも良い。

laravel-mysql-email-log

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

インストール

composer:
composer require kaoken/laravel-mysql-email-log

設定

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\app.phpへ追加する例

  • connectionは、データーばべーすドライバ名。config\database.phpを参照。
  • 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は、メールの送信先。
config\app.php'log_level' => env('APP_LOG_LEVEL', 'debug'),の下あたりに追加するのが良い。
    'log_level' => env('APP_LOG_LEVEL', 'debug'),
    // 追加
    'mysql_log' => [
        'connection' => 'mysql_log',
        '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'
    ],

コマンドの実行

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\app.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

コメントを残す

%d人のブロガーが「いいね」をつけました。