【Laravel】ログをJSON化する方法
ログをJSON化する方法
サンプルコード
確認環境
PHP 8.0.1
Laravel 8.73.2
JSONフォーマットクラスを作成
ログのフォーマットを変更するクラスを作成します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <?php
declare(strict_types=1);
namespace App\Logging;
use Monolog\Formatter\LineFormatter;
class JsonLogFormatter extends LineFormatter
{
public function format(array $record):string
{
return json_encode(parent::format($record));
}
}
|
ログ適用クラスを作成
ログのフォーマットを適用させるクラスを作成します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| <?php
declare(strict_types=1);
namespace App\Logging;
use App\Logging\JsonLogFormatter;
class JsonLogApply
{
public function __invoke($logging)
{
$jsonFormatter = new JsonLogFormatter();
foreach($logging->getHandlers() as $handler) {
$handler->setFormatter($jsonFormatter);
}
}
}
|
ログを追加
logging.php
にログを追加。
1
2
3
4
5
6
7
8
9
10
11
12
13
| <?php
return [
// この行を追加
'json' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'debug'),
'days' => 14,
'tap' => [App\Logging\JsonLogApply::class],
],
]
|
設定を変更
.env
の設定を変更
ログを仕込む
Welcomeページに仕込みました。
1
2
3
4
5
6
7
8
9
10
| <?php
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Log;
Route::get('/', function () {
Log::debug('test');
return view('welcome');
});
|
出力結果
JSONになって出力されるようになりました。
1
| {"message":"test","context":[],"level":100,"level_name":"DEBUG","channel":"local","datetime":"2021-12-01T03:52:01.518468+00:00"}}
|
参考