Laravelのログ出力方法

Laravel

みなさん、こんにちは!

今回は「Laravelのログ出力方法」というテーマで説明していきます。

ログの出力は、システムエラー時のデバッグだけでなく、パフォーマンス監視やセキュリティ監視など幅広い分野で有用な情報を残してくれるので、Webアプリケーション開発では必須です。

そこで、今回はLaravelを使用する上でのログの出力方法について、サンプルコードを交えて具体的に見ていきます。

読者
読者

「Laravelではどうやってログ出力するんだろう…?」

このような疑問をお持ちの方は今回の記事が参考になると思います。

それでは、見ていきましょう!

ログ出力方法

Laravelでログ出力する場合は、主に以下の二つあります。

  1. loggerヘルパーを使う
  2. Logファサードを使う

それぞれ見ていきましょう。

loggerヘルパー

まずはloggerヘルパーからです。以下、実装例を示します。

logger()->emergency('これは緊急時のログメッセージです。');
logger()->alert('これはアラートログメッセージです。');
logger()->critical('これは重大なログメッセージです。');
logger()->error('これはエラー時のログメッセージです。');
logger()->warning('これは警告のログメッセージです。');
logger()->notice('これは注意喚起のログメッセージです。');
logger()->info('これは有用な情報を残すためのログメッセージです。');
logger()->debug('これはデバッグ用のログメッセージです。');

loggerヘルパーは、後ほど説明するLogファサードを内部的に使用していますが、ヘルパーなので特にuse文を使って何かをインポートする必要なく使うことができます。

書き方も簡潔でわかりやすく、筆者も開発現場では基本的にloggerヘルパーを使っています。

上記の例では、テキストを出力していますが、もちろん変数の出力も可能です。

$array = ['A','B','C','D','E','F','G'];

logger()->info($array); // ['A','B','C','D','E','F','G']

Logファサード

次はLogファサードを使ったログ出力方法を見ていきましょう。以下は実装例です。

use Illuminate\Support\Facades\Log;

Log::emergency('これは緊急時のログメッセージです。');
Log::alert('これはアラートログメッセージです。');
Log::critical('これは重大なログメッセージです。');
Log::error('これはエラー時のログメッセージです。');
Log::warning('これは警告のログメッセージです。');
Log::notice('これは注意喚起のログメッセージです。');
Log::info('これは有用な情報を残すためのログメッセージです。');
Log::debug('これはデバッグ用のログメッセージです。');

こちらもログレベルを指定してログ出力することができます。また、変数の出力などももちろんできます。

ログの出力形式

ログの出力形式は以下のようになります。

[YYYY-MM-DD HH:MM:SS] local.INFO: これはエラー時のログメッセージです。
// [日時] 環境.ログレベル: メッセージ

注意点として、当たり前ですが、ログ出力する際に全てのデータを文字列に変換してからログファイルに書き込むため、文字列に変換できないデータはエラーとなり出力できません。

ログの出力場所は、デフォルトでは「storage/logs/laravel.log」ファイルに出力されます。次に説明しますが、ログの出力先は設定ファイルから変更することもできます。

ログの設定

Laravelのログ設定は、「config/logging.php」ファイルで行います。

設定ファイルでは、ログの出力先やログレベルを設定することができます。ログ設定はチャンネルごとに異なり、ログチャンネルは以下のように設定されています。

'default' => env('LOG_CHANNEL', 'stack'),

'channels' => [
    'stack' => [
        'driver' => 'stack',
        'channels' => ['single'],
        'ignore_exceptions' => false,
    ],

    'single' => [
        'driver' => 'single',
        'path' => storage_path('logs/laravel.log'),
        'level' => env('LOG_LEVEL', 'debug'),
    ],

    'daily' => [
        'driver' => 'daily',
        'path' => storage_path('logs/laravel.log'),
        'level' => env('LOG_LEVEL', 'debug'),
        'days' => 14,
    ],
    ...
],

デフォルトでは、stackチャンネルに設定されていますが、環境変数にログチャンネルを設定することで変更することができます。

# .env
LOG_CHANNEL=daily

例えばdailyチャンネルに設定すると、ログファイルを日毎に分割し、過去のログファイルを自動的に削除するように設定することができます。これにより、14日経過したログファイルは自動的に削除されます。

この他にも、出力先だけ変更したり、一部のログレベルを無視したりなど柔軟に変更することができるようになっています。

コメント

タイトルとURLをコピーしました