ロギング
はじめに
Laravelは、アプリケーション内で何が起こっているかをより詳しく把握するために、堅牢なロギングサービスを提供しています。これにより、メッセージをファイル、システムエラーログ、Slackに通知してチーム全体に通知することができます。
Laravelのロギングは「チャネル」に基づいています。各チャネルは、ログ情報を書き込む特定の方法を表します。たとえば、「single」チャネルはログファイルを単一のログファイルに書き込み、一方、「slack」チャネルはログメッセージをSlackに送信します。ログメッセージは重要度に基づいて複数のチャネルに書き込むことができます。
Laravelは、Monologライブラリを内部で利用しており、さまざまな強力なログハンドラをサポートしています。Laravelはこれらのハンドラを簡単に構成できるようにしており、それらを組み合わせてアプリケーションのログ処理をカスタマイズすることができます。
設定
アプリケーションのロギング動作を制御するすべての設定オプションは、config/logging.php
構成ファイルに格納されています。このファイルを使用すると、アプリケーションのログチャネルを構成できますので、利用可能なチャネルとそのオプションを確認してください。以下では、いくつかの一般的なオプションを見ていきます。
デフォルトでは、Laravel はメッセージをロギングする際に stack
チャネルを使用します。stack
チャネルは複数のログチャネルを単一のチャネルに集約するために使用されます。スタックの構築に関する詳細は、以下のドキュメントを参照してください。
利用可能なチャネルドライバ
各ログチャネルは「ドライバ」によって動作します。ドライバは、ログメッセージが実際にどのようにどこに記録されるかを決定します。以下のログチャネルドライバは、すべての Laravel アプリケーションで利用可能です。ほとんどのドライバについては、アプリケーションの config/logging.php
構成ファイルに既にエントリが存在しているため、このファイルを確認してその内容に慣れるようにしてください。
Name | Description |
---|---|
custom | 指定されたファクトリを呼び出してチャネルを作成するドライバ |
daily | 毎日ローテーションする RotatingFileHandler ベースの Monolog ドライバ |
errorlog | ErrorLogHandler ベースの Monolog ドライバ |
monolog | 任意のサポートされている Monolog ハンドラを使用できる Monolog ファクトリドライバ |
papertrail | SyslogUdpHandler ベースの Monolog ドライバ |
single | 単一のファイルまたはパスベースのロガーチャネル (StreamHandler ) |
slack | SlackWebhookHandler ベースの Monolog ドライバ |
stack | "マルチチャネル" チャネルを作成するためのラッパー |
syslog | SyslogHandler ベースの Monolog ドライバ |
monolog
および custom
ドライバについて詳しく学ぶには、高度なチャネルのカスタマイズのドキュメントを参照してください。
チャネル名の設定
デフォルトでは、Monolog は現在の環境に一致する「チャネル名」でインスタンス化されます(たとえば production
または local
)。この値を変更するには、チャネルの構成に name
オプションを追加できます:
'stack' => [
'driver' => 'stack',
'name' => 'channel-name',
'channels' => ['single', 'slack'],
],
チャネルの前提条件
単一および毎日のチャネルの構成
single
および daily
チャネルには、bubble
、permission
、locking
の 3 つのオプションの構成があります。
<div class="overflow-auto">
名前 | 説明 | デフォルト
------------- | ------------- | -------------
`bubble` | メッセージが処理された後に他のチャンネルにバブルアップするかどうかを示します | `true`
`locking` | 書き込み前にログファイルをロックしようとする | `false`
`permission` | ログファイルの権限 | `0644`
</div>
さらに、`daily` チャンネルの保持ポリシーは、`LOG_DAILY_DAYS` 環境変数または `days` 構成オプションを設定することで構成できます。
<div class="overflow-auto">
名前 | 説明 | デフォルト
------------- |-------------------------------------------------------------------| -------------
`days` | 日次ログファイルを保持する日数 | `7`
</div>
<a name="configuring-the-papertrail-channel"></a>
#### Papertrail チャンネルの構成
`papertrail` チャンネルには `host` と `port` の構成オプションが必要です。これらは `PAPERTRAIL_URL` および `PAPERTRAIL_PORT` 環境変数を介して定義できます。これらの値は [Papertrail](https://help.papertrailapp.com/kb/configuration/configuring-centralized-logging-from-php-apps/#send-events-from-php-app) から取得できます。
<a name="configuring-the-slack-channel"></a>
#### Slack チャンネルの構成
`slack` チャンネルには `url` の構成オプションが必要です。この値は `LOG_SLACK_WEBHOOK_URL` 環境変数を介して定義できます。この URL は、Slack チームで構成した [着信ウェブフック](https://slack.com/apps/A0F7XDUAZ-incoming-webhooks) の URL と一致する必要があります。
デフォルトでは、Slack は `critical` レベル以上のログのみを受信します。ただし、`LOG_LEVEL` 環境変数を使用するか、Slack ログチャンネルの構成配列内の `level` 構成オプションを変更することで、これを調整できます。
<a name="logging-deprecation-warnings"></a>
### 廃止予告のログ記録
PHP、Laravel、および他のライブラリは、しばしばユーザーに、いくつかの機能が廃止され、将来のバージョンで削除されることを通知します。これらの廃止警告をログに記録したい場合は、お好みの `deprecations` ログチャンネルを `LOG_DEPRECATIONS_CHANNEL` 環境変数またはアプリケーションの `config/logging.php` 構成ファイル内で指定できます。