ロガー#
Monolog を実装に使った PSR-3 ロガーです。アプリは標準の Psr\Log\LoggerInterface に依存するため、 PSR-3 でログを出すサードパーティライブラリと同じ束縛を共有します。
設定不要で常に DI 登録されます(HTTP クライアント と同じく自動登録)。出力先は既定で STDERR、LOG_FILE でパスへ、 LOG_LEVEL でしきい値を変えます。Monolog 実装はクライアントビルダー的な複雑さを足さない薄い方針です。
有効化#
ロガーは 常に登録されます。HttpClient と同様、必須設定がないのでどのページ/コンポーネントからでも Psr\Log\LoggerInterface を依存として受け取れ、追加設定は不要です。任意の環境変数が 2 つあります。
LOG_LEVEL=info # しきい値。PSR-3 の 8 レベルのいずれか
LOG_FILE=/var/log/app.log # 出力先パス。未設定なら php://stderrLOG_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を
含む値は *** にマスク。
ThrowableはClass: messageに短縮(素の JSON では役に立たない
ため)。
- 120 バイト超の文字列は切り詰め。
この秘匿化は プロファイラのコピーだけ(プロファイルは var/cache/profiler/ 配下の素の JSON——TraceableDatabase がバインド値を伏せるのと同じ方針)。実際の Monolog 出力にはアプリが選んだ 元のコンテキストがそのまま 渡ります。
本番(APP_ENV が dev 以外)では別名はデコレータ無しで直接 Monolog を指すので、Profiler 同様 ゼロコスト です。記録は書き込みの 前 に行うため、出力先(例: 書けない LOG_FILE)が失敗してもタイムラインにはエントリが残ります。
変更履歴 (2)
- バージョン差分表記(vX.Y.Z 追加/破壊的変更/依存バージョン注記)を削除し現在形に整理
- 新規作成