RRelayer
ホーム/機能

ロガー#

Monolog を実装に使った PSR-3 ロガーです。アプリは標準の Psr\Log\LoggerInterface に依存するため、 PSR-3 でログを出すサードパーティライブラリと同じ束縛を共有します。

設定不要で常に DI 登録されます(HTTP クライアント と同じく自動登録)。出力先は既定で STDERRLOG_FILE でパスへ、 LOG_LEVEL でしきい値を変えます。Monolog 実装はクライアントビルダー的な複雑さを足さない薄い方針です。

有効化#

ロガーは 常に登録されますHttpClient と同様、必須設定がないのでどのページ/コンポーネントからでも Psr\Log\LoggerInterface を依存として受け取れ、追加設定は不要です。任意の環境変数が 2 つあります。

LOG_LEVEL=info              # しきい値。PSR-3 の 8 レベルのいずれか
LOG_FILE=/var/log/app.log   # 出力先パス。未設定なら php://stderr
  • LOG_LEVEL の既定は dev=debug / 本番=info。受理するのは PSR-3

の 8 レベル(debug info notice warning error critical alert emergency)。綴り間違いはソフトフェイルして既定値に落ちます(Monolog に例外を投げさせない)。

  • 未設定ならログは STDERR に出ます(12-factor: docker logs

journald・プラットフォームのログドレインが回収)。ファイルに出したいデプロイだけ LOG_FILE を設定します——ディレクトリ作成・.gitignore・ローテーションはその場合あなたの管理範囲です。

環境変数 も参照。

使い方#

ページ/コンポーネントのコンストラクタ(または関数ページの引数)で Psr\Log\LoggerInterface を型で受け取るだけです。

<?php
use Polidog\Relayer\Router\Component\PageComponent;
use Polidog\Relayer\Router\Component\Element;
use Psr\Log\LoggerInterface;

final class CheckoutPage extends PageComponent
{
    public function __construct(private readonly LoggerInterface $log) {}

    public function render(): Element
    {
        $this->log->info('checkout started for {user}', ['user' => $userId]);
        // ...
    }
}

{placeholder} 補間(PSR-3 §1.2)は出力に適用されます(Monolog 単体は補間しないので PsrLogMessageProcessor が担います)。慣例の ['exception' => $e] コンテキストキーは Monolog が整形します。

自動で得られるもの(プロファイラ連携)#

dev では LoggerInterface の実体が TraceableLogger(PSR-3 デコレータ)でラップされ、各エントリが プロファイラ のタイムラインに log イベント(ラベルは PSR-3 レベル)として写されます。Database / HttpClient / Auth と同じ Traceable* の形なので、if profiler 分岐を書かずにログ行がタイムラインに乗ります。

プロファイラ側のコピーは 秘匿化 されます。

  • キー名に pass / pwd / secret / token / api_key / auth

含む値は *** にマスク。

  • ThrowableClass: message に短縮(素の JSON では役に立たない

ため)。

  • 120 バイト超の文字列は切り詰め。

この秘匿化は プロファイラのコピーだけ(プロファイルは var/cache/profiler/ 配下の素の JSON——TraceableDatabase がバインド値を伏せるのと同じ方針)。実際の Monolog 出力にはアプリが選んだ 元のコンテキストがそのまま 渡ります。

本番(APP_ENV が dev 以外)では別名はデコレータ無しで直接 Monolog を指すので、Profiler 同様 ゼロコスト です。記録は書き込みの に行うため、出力先(例: 書けない LOG_FILE)が失敗してもタイムラインにはエントリが残ります。

最終更新: 2026-05-19
変更履歴 (2)
  • バージョン差分表記(vX.Y.Z 追加/破壊的変更/依存バージョン注記)を削除し現在形に整理
  • 新規作成