このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン 最新のリビジョン 両方とも次のリビジョン | ||
psr:psr3 [2020/04/29 21:27] y2sunlight [1.2 メッセージ] |
psr:psr3 [2020/07/28 14:02] tanaka [PSR-3: Logger Interface] |
||
---|---|---|---|
行 3: | 行 3: | ||
--- // | --- // | ||
- | 本章は、若干の補足を加筆してはいるものの単に[[https:// | + | 本章は、若干の補足を加筆してはいるものの単に[[https:// |
- | ==== 目次 ==== | + | 関連記事 |
- | * [[psr:top|PHP - PHP標準勧告]] | + | |
+ | * [[psr:top|PSR - PHP標準勧告]] | ||
* [[psr: | * [[psr: | ||
* PSR-3: Logger Interface - ロガーインターフェイス | * PSR-3: Logger Interface - ロガーインターフェイス | ||
行 12: | 行 13: | ||
* [[psr: | * [[psr: | ||
* [[psr: | * [[psr: | ||
+ | * [[psr: | ||
+ | * [[psr: | ||
+ | * [[psr: | ||
+ | * [[psr: | ||
+ | * [[psr: | ||
+ | * [[psr: | ||
+ | * [[psr: | ||
+ | * [[psr: | ||
+ | * [[psr: | ||
+ | * [[psr: | ||
----- | ----- | ||
行 32: | 行 43: | ||
> '' | > '' | ||
- | このドキュメントの「実装者」という言葉は、LoggerInterfaceをログ関連のライブラリまたはフレームワークに実装する人と解釈して下さい。また、ロガーのユーザーのことは「ユーザー」と呼びます。 | + | このドキュメントの |
\\ | \\ | ||
行 40: | 行 51: | ||
==== 1.1 基本 ===== | ==== 1.1 基本 ===== | ||
- | * LoggerInterfaceは、ログを8つのRFC 5424レベル( **debug**, **info**, **notice**, **warning**, | + | |
- | + | ||
- | * 9番目のメソッド **log** は、最初の引数としてログレベルを受け入れます。ログレベル定数の1つを使用してこのメソッドを呼び出すと、レベル固有のメソッドを呼び出す場合と同じ結果になる必要があります ('' | + | |
> [[https:// | > [[https:// | ||
+ | |||
+ | * 9番目のメソッド **log** は、最初の引数としてログレベルを受け入れます。ログレベル定数の1つを使用してこのメソッドを呼び出すと、レベル固有のメソッドを呼び出す場合と同じ結果になる必要があります ('' | ||
+ | |||
\\ | \\ | ||
行 50: | 行 62: | ||
==== 1.2 メッセージ ===== | ==== 1.2 メッセージ ===== | ||
- | * すべてのメソッドは、メッセージとして文字列、または < | + | * すべてのメソッドは、メッセージとして文字列、または |
- | * メッセージには、実装者がコンテキスト配列の値で置き換えることができるプレースホルダーが含まれる場合があります ('' | + | * メッセージには、実装者がコンテキスト配列の値で置き換えることができるプレースホルダーが含まれる場合があります ('' |
+ | <?php | ||
- | | + | /** |
+ | * Interpolates context values into the message placeholders. | ||
+ | * コンテキスト値をメッセージプレースホルダーに挿入する | ||
+ | */ | ||
+ | function interpolate($message, | ||
+ | { | ||
+ | // build a replacement array with braces around the context keys | ||
+ | // コンテキストキーを中括弧で囲む置換配列を作る | ||
+ | $replace = array(); | ||
+ | foreach ($context as $key => $val) { | ||
+ | // check that the value can be casted to string | ||
+ | // 値を文字列にキャストできることを確認する | ||
+ | if (!is_array($val) && (!is_object($val) || method_exists($val, | ||
+ | $replace[' | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // interpolate replacement values into the message and return | ||
+ | // 置換値をメッセージに挿入して返す | ||
+ | return strtr($message, | ||
+ | } | ||
+ | |||
+ | // a message with brace-delimited placeholder names | ||
+ | // 中括弧で区切られたプレースホルダー名を含むメッセージ | ||
+ | $message = "User {username} created"; | ||
+ | |||
+ | // a context array of placeholder names => replacement values | ||
+ | // コンテキスト配列(プレースホルダー名=> | ||
+ | $context = array(' | ||
+ | |||
+ | // echoes "User bolivar created" | ||
+ | // "User bolivar created" | ||
+ | echo interpolate($message, | ||
+ | </ | ||
\\ | \\ | ||
==== 1.3 コンテキスト ===== | ==== 1.3 コンテキスト ===== | ||
+ | |||
+ | * すべてのメソッドは、コンテキストデータとして配列を受け入れます。これは、文字列にうまく適合しない異質な情報(extraneous information)を保持するためのものです。配列には何でも含めることができます。実装者は、コンテキストデータをできる限り緩やかに扱う必要があります ('' | ||
+ | |||
+ | * **Exception** オブジェクトがコンテキストデータで渡される場合、それは **' | ||
\\ | \\ | ||
==== 1.4 ヘルパークラスとインターフェイス ===== | ==== 1.4 ヘルパークラスとインターフェイス ===== | ||
+ | |||
+ | * **Psr\Log\AbstractLogger** クラスを使用すると、**LoggerInterface** を拡張して 一般的な **log()** メソッドを実装することで、**LoggerInterface** を非常に簡単に実装できます。他の8つのメソッドは、メッセージとコンテキストを このlog() に転送しています。 | ||
+ | |||
+ | * 同様に、**Psr\Log\LoggerTrait** を使用しても、一般的な log() メソッドを実装するだけで済みます。但し、トレイトはインターフェースを実装できないため、この場合でも **LoggerInterface** を実装する必要があります。 | ||
+ | |||
+ | * **Psr\Log\NullLogger** は、インターフェイスと共に提供されます。それは、ロガーが与えられていない時に、フォールバックとして「ブラックホール」実装を提供するために、インターフェイスのユーザによって使用されます ('' | ||
+ | |||
+ | > '' | ||
+ | |||
+ | * **Psr\Log\LoggerAwareInterface** には **setLogger(LoggerInterface $logger)** メソッドのみが含まれており、フレームワークが任意のインスタンスにロガーを Auto Wiring するために使用できます。 | ||
+ | |||
+ | * **Psr\Log\LoggerAwareTrait** トレイトを使用すると、**LoggerAwareInterface** と同等のインターフェイスを任意のクラスに簡単に実装できます。それは **< | ||
+ | |||
+ | * **Psr\Log\LogLevel** クラスは、8つのログレベルの定数を保持します。 | ||
\\ | \\ | ||
行 68: | 行 132: | ||
===== 2. パッケージ ====== | ===== 2. パッケージ ====== | ||
+ | |||
+ | 説明されているインターフェースとクラス、関連する例外クラス、および実装を検証するためのテストスイートは、[[https:// | ||
\\ | \\ | ||
===== 3. Psr\Log\LoggerInterface ====== | ===== 3. Psr\Log\LoggerInterface ====== | ||
+ | |||
+ | {{tablelayout? | ||
+ | ^メソッド^要約^ | ||
+ | |emergency\\ ($message, array $context = array())|システムが使用できない| | ||
+ | |alert\\ ($message, array $context = array())|すぐに行動を起こす必要がある| | ||
+ | |critical\\ ($message, array $context = array())|危機的な状態| | ||
+ | |error\\ ($message, array $context = array())|すぐに対処する必要はないが、通常はログに記録して監視する必要がある実行時エラー| | ||
+ | |warning\\ ($message, array $context = array())|エラーではない例外的な出来事| | ||
+ | |notice\\ ($message, array $context = array())|正常だが重要なイベント| | ||
+ | |info\\ ($message, array $context = array())|興味深いイベント| | ||
+ | |debug\\ ($message, array $context = array())|詳細なデバッグ情報| | ||
+ | |log($level, | ||
<code php LoggerInterface.php> | <code php LoggerInterface.php> |