ただメモができるだけのブラウザアプリ「TextArea」はこちらw

Laravelをコンテナで運用する際のログ出力は、JSON形式で標準出力した方が良い

Laravelをコンテナで運用する際のログ出力は、JSON形式で標準出力した方が良いということを書いていきます。

Laravelに限らず、コンテナでは、JSON形式で標準出力が良いと思いますが、Laravelでは簡単にログをJSON形式で標準出力可能ですので、設定しておいた方が良いと思います!

なぜ、ログをJSON形式で標準出力するのか

なぜJSON形式か

JSON形式はデータを構造化し、分析や監視ツールで扱いやすい形式です。

また、新しい情報を追加するのも容易なため、ログ出力はJSON形式が良いと考えています。

JSON化しておけば、たとえば、AWSのCloudWatchでログ検索する際などで便利です。

なぜ標準出力か

多くのクラウドプロバイダーは、コンテナの標準出力からログを収集し、そのログを分析や可視化するためのツールやサービスを提供しているためです。

AWSで言うと、Fargateでのコンテナでログを標準出力すると、CloudWatchログの1つのロググループにまとまってくれて、簡単にログ検索できます。

これにより、運用やデバッグがスムーズに行えます。

以下の記事のようなメトリクスフィルターも簡単に作れたりします。

CloudWatchLogsのメトリクスフィルターの使い方ーログデータをメトリクス化して監視する
メトリクスフィルターを使いCloudWatchLogsのログデータを 「CloudWatchのメトリクスで見える化する」「メトリクスを監視してアラートをあげる」ということをやってみます。JSONログデータのメトリクス化も可能です。メトリクス化ができれば監視は通常のアラーム設定と同様となります

では、Laravel11を例にログをJSON形式で標準出力する方法を記載します。

Laravel11でログをJSON形式で標準出力する

config/logging.phpの修正

  • config/logging.phpの2箇所修正します
    •  「use Monolog\Formatter\JsonFormatter;」を追加
    • channelsの中に以下のようにstdoutを追加


use Monolog\Formatter\JsonFormatter;   // これを追加
:
:
:



    'channels' => [
        // 以下を追加
        'stdout' => [
            'driver' => 'monolog',
            'level' => env('LOG_LEVEL', 'debug'),
            'handler' => StreamHandler::class,
            'with' => [
                'stream' => 'php://stdout',
            ],
            'formatter' => JsonFormatter::class,
        ],

.envの修正

.envを修正します。

以下のように、LOG_CHANNEL=stackをコメントアウトして、LOG_CHANNEL=stdoutを追加します。


#LOG_CHANNEL=stack  // コメントアウト
LOG_CHANNEL=stdout  // 追加

 

動作確認

routes/web.phpでログ出力するようにして動作確認します。

  •  routes/web.phpの2箇所を修正します
    • 「use Illuminate\Support\Facades\Log;」を追加する
    • 「Log::debug(‘test’);」を追加する
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Log;   // 追加

Route::get('/', function () {
    Log::debug('json_log_test');   // 追加
    return view('welcome');
});

Laravelアプリにアクセスし、以下のようにターミナル上に出力されれば、JSON形式でログを標準出力できています。


{"message":"json_log_test","context":{},"level":100,"level_name":"DEBUG","channel":"local","datetime":"2024-06-02T00:27:24.540572+00:00","extra":{}}

まとめ

Laravelをコンテナで運用する際には、ログをJSON形式で標準出力することで、運用やデバッグを効率化できます。設定方法も簡単です!

スポンサーリンク
dockerLaravel
フォローする
さゆフィクション