--> -->
Laravelのログは標準ではファイルに書き出されます。
量が少ないうちは良いのですが、多くなってくるとビューワー側がつらくなってきます。
そこで、MySQLにログを出力し、そこから読み出し、検索する処理を書いてみました。
なお、パッケージとして追加する方法もあるのですが、手動で追加する方法にしています。
気が向いたらパッケージ化するかも・・・(^^;)。
修正、追加が必要なファイルは以下の通りです。
次の項で1つずつ見ていきましょう。
この記事ではログの記録と閲覧を行いますが、まずはログの記録編です。
DB_LOG_TABLE=logs DB_LOG_CONNECTION=mysql_log
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1 2 3 4 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
|
-- DROP TABLE logs; CREATE TABLE logs ( id BIGINT NOT NULL AUTO_INCREMENT, channel VARCHAR(10), level INT, level_name VARCHAR(10), message LONGTEXT, context TEXT, remote_addr VARCHAR(40), user_agent TEXT, created_at TIMESTAMP default CURRENT_TIMESTAMP, CONSTRAINT PRIMARY KEY( id ) ); CREATE INDEX logs_idx1 on logs ( remote_addr ); CREATE INDEX logs_idx2 on logs ( level );
次にビューワの方を作成していきます。
Laravelではページネーション*3というページャ管理機能を持っています。この機能が生成するHTMLは Bootstrap CSSフレームワーク に対応したものです。また、参考にした従来のビューア(rap2hpoutre/laravel-log-viewer)に倣って、全体的にBootstrapを使用しています。
1 2 3 4 5 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
|
以上で完成です!
うまく動かない場合にデバッグが難しい(ログが出ないから)のですが、「var_dump() & exit;」を駆使するか、xdebugでステップ実行するなどして頑張ってみてください。
私はPhpStormで無駄な警告が出ないよう、Laravel IDE Helperを入れています。そのため、 use DB; なんて書き方をしています。IDE Helperを導入していない方は自分の環境に合わせて書き換えてくださいm(_ _)m。
SQL文をログ出力している場合、「SQL実行→LOG出力→LOGをDBに出力→SQL実行→・・・」の無限ループになります。
このため、ログ出力の為のSQL文をログ出力しないようif文を入れる必要があります。
私は app/Providers/AppServiceProvider.php でログ出力していたので、以下のように処理を追加しました。
1 2 3 4 5 6 7 8 9 |
|
このログは削除する手段をまだ用意していません。 手動で定期的に以下のようなSQL文を流す必要があります。
delete from logs where created_at < DATE_ADD(NOW(), INTERVAL -7 DAY);
近いうちにMonologがファイルを消しているのと同じようなタイミングで削除処理を入れたいと思います。
Tweet
LaravelのログをMysqlで管理する。
https://laravel.cg0.xyz/laravel-mysql-email-log/
Laravelのログを標準エラーに出力する
https://qiita.com/iakio/items/86086e046f73826c9bef
Laravel 5.4 データベース:ペジネーション
https://readouble.com/laravel/5.4/ja/pagination.html