JavaScriptを有効にしてください

【Laravel】ログをJSON化する方法

 ·  ☕ 1 分で読めます

【Laravel】ログをJSON化する方法

ログをJSON化する方法

サンプルコード

確認環境

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 の設定を変更

1
LOG_CHANNEL=custom

ログを仕込む

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"}}

参考

共有

こぴぺたん
著者
こぴぺたん
Copy & Paste Engineer