ridge / laravel-custom-log
extend laravel logger.
Requires
- laravel/framework: >=5.6.0
This package is not auto-updated.
Last update: 2025-06-28 01:06:52 UTC
README
##下準備 設定ファイル反映
php artisan vendor:publish --tag=custom-log
php artisan config:cache
##機能 ###・ロギング設定拡張
概要
laravel標準の「設定ファイルによるロギング設定」に比べ、より詳細な「MonoLogのモジュール単位での設定」を実現すると共に,開発の際頻繁に要求されるログの実装をサポートします。
実装手順
-
ログチャンネルドライバ作成
php artisan make:logDriver {ドライバクラス名} --type={ドライバタイプ}
補足
利用可能ドライバタイプ・ day : ログファイルを日付ごとに分けて出力/管理します。
・ single : ログファイルを単一ファイルで出力/管理します。
・ csv : ログファイルをcsv形式で出力/管理します。フォーマット等ドライバ処理実装(ドライバphpdoc参照)
-
ログチャンネル設定追加
設定ファイル
config/logging.php
channelsに下記を追記
{ログチャンネルキー} => [ 'driver' => 'custom', 'via' => {ドライバクラス名}, 'path' => {ログファイル保存先パス}, 'level' => {出力対象最低ログレベル}, 'days' => {最大ログファイル数} ],
補足
ドライバクラス名(必須):手順1で作成したドライバのクラス名(例 TestDriver::class)
ログファイル保存先パス:ログファイルの保存先パス指定
出力対象最低ログレベル:ロギングを行うログレベルの絞り込み
最大ログファイル数:日付ごとのログファイルを何日分保持するか設定反映
php artisan config:cache
-
ロギング処理実装
ログの書き込みには
CustomLog/Facades/Log
を使用してください。実際に書き込みを行うメソッドに関しては、laravelのLogファサードと同じく、ログレベルがメソッド名と対応している形になります。
チャンネルの指定には
channel()
またはpinChannel()
が利用できます。channel():指定チャンネルのロガーを返します。チャンネルの指定からロギングまでメソッドチェーンで行うことが出来ます。
pinChannel():ログチャンネルのピン止めを行うことができます。ピン止めを行うと、チャンネルの指定をせずにファサードから直接ロギングを行った場合のチャンネルを固定することができます。
###・リクエスト/レスポンス ロギング
概要
httpリクエスト、httpレスポンスの内容をログに書き込みます。
実装手順
-
ミドルウェア設定追加
設定ファイル
app/Http/Kernel.php
$routeMiddlewaresに下記を追記
'httpLog' => \CustomLog\Middleware\LogHttpTransaction::class
-
ミドルウェア反映
リクエスト/レスポンスのロギングを行いたい対象にミドルウェアを反映してください。
下記のようにミドルウェア指定の際にログチャンネルを指定することが出来ます。
(ログチャンネルの指定を行わなかった場合は、デフォルトチャンネルが使用されます)httpLog:{ログチャンネルキー}
当ミドルウェアはチャンネルのピン止めも兼ねています。
ミドルウェアが反映されている処理内では、チャンネルが指定チャンネルにピン止めされます。
###・DBクエリログ
概要
dbアクセス時の様々なクエリをログ出力します
実装手順
-
ミドルウェア設定追加
設定ファイル
app/Http/Kernel.php
$routeMiddlewaresに下記を追記
'queryLog' => \CustomLog\Middleware\LogDBQuery::class
-
ミドルウェア反映
dbのクエリロギングを行いたい対象にミドルウェアを反映してください。
-
ロギング詳細設定
設定ファイルよりログ内容の調整が可能です。
config/customlog.php
各項目詳細
db.channel:ロギングの際に使用するログチャンネルキー
db.target:ロギング対象クエリ種別指定(true:対象 false:対象外)
db.explain:ロギングを行う際に実行計画(explain)も同時に実行しログに残すか
db.transaction:transactionに関するクエリのロギングを行うか