目次

PSR-3: Logger Interface

y2sunlight 2020-04-28

本章は、若干の補足を加筆してはいるものの単にPSRのサイトを日本語に翻訳したものに過ぎません。英語が堪能な方は原文をご参照下さい。翻訳に当たっては、基本的に機械翻訳を使い、理解できない部分は独断で意訳しております。拙い訳では御座いますが恥を忍んで投稿しておりますので、ご指摘など御座いましたらコメントを頂ければ幸いです。

関連記事


PSR-3: ロガーインターフェイス

原文より翻訳 PSR-3: Logger Interface 2020-04-28 現在

このドキュメントでは、ロギングライブラリの一般的なインターフェースについて説明します。

主な目標は、ライブラリが Psr\Log\LoggerInterfaceオブジェクトを受け取り、シンプルで普遍的な方法でそれにログを書き込むことを可能にすることです。カスタムニーズを持つフレームワークとCMSは、独自の目的のためにインターフェイスを拡張することができますが(MAY)、このドキュメントとの互換性を維持する必要があります (SHOULD)。 これによって、アプリケーションが使用するサードパーティのライブラリが、一元化されたアプリケーションログを書き込むことが出来るようになります。

このドキュメントのキーワード MUST , MUST NOT , REQUIRED , SHALL , SHALL NOT , SHOULD , SHOULD NOT , RECOMMENDED , MAY 及び OPTIONAL は、 RFC 2119で説明されているように解釈して下さい。

RFC 2119の説明
MUST, REQUIRED, SHALL — 絶対必要
MUST NOT, SHALL NOT — 絶対禁止
SHOULD, RECOMMENDED — 推奨(但し、無視できる特定の正当な理由が存在するかもしれない)
SHOULD NOT — 推奨できない(但し、許可できる特定の正当な理由が存在するかもしれない)
MAY, OPTIONAL — オプション

このドキュメントの 実装者 という言葉は、LoggerInterface をログ関連のライブラリまたはフレームワークに実装する人と解釈して下さい。また、ロガーのユーザーのことは ユーザー と呼びます。


1. 仕様

1.1 基本

RFC 5424はイベント通知メッセージの伝達に使用されるsyslog Protocolについて規定されています。


1.2 メッセージ


1.3 コンテキスト


1.4 ヘルパークラスとインターフェイス

上記の原文
The Psr\Log\NullLogger is provided together with the interface. It MAY be used by users of the interface to provide a fall-back “black hole” implementation if no logger is given to them. However, conditional logging may be a better approach if context data creation is expensive.

— 曖昧な翻訳 —
特に、最後のセンテンスの意味が良く分かりませんでした。conditional logging とは何を意味するのか? それがなぜコンテキストデータ作成と関係しているのか?


2. パッケージ

説明されているインターフェースとクラス、関連する例外クラス、および実装を検証するためのテストスイートは、psr/log パッケージの一部として提供されます。


3. Psr\Log\LoggerInterface

メソッド要約
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,
$message, array $context = array()
任意のレベルのロギング
LoggerInterface.php
<?php
 
namespace Psr\Log;
 
/**
 * Describes a logger instance.
 * ロガーインスタンスの説明
 *
 * The message MUST be a string or object implementing __toString().
 * メッセージは、文字列または__toString()を実装するオブジェクトでなければなりません(MUST)。
 *
 * The message MAY contain placeholders in the form: {foo} where foo
 * will be replaced by the context data in key "foo".
 * メッセージには次の形式のプレースホルダーが含まれる場合があります(MAY):{foo}
 * この時、メッセージ内の文字列{foo}は、キーがfooのコンテキストデータに置き換えられます。
 *
 * The context array can contain arbitrary data, the only assumption that
 * can be made by implementors is that if an Exception instance is given
 * to produce a stack trace, it MUST be in a key named "exception".
 * コンテキスト配列には任意のデータを含めることができます。実装者が行うことができる唯一の仮定は、
 * スタックトレースを生成するためにExceptionインスタンスが与えられた場合、exceptionという名前の
 * キーがなければならないということです。
 *
 * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
 * for the full interface specification.
 * 完全なインターフェース仕様については、以下を参照して下さい。
 * https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
 */
interface LoggerInterface
{
    /**
     * System is unusable.
     * システムが使用できない
     *
     * @param string $message
     * @param array $context
     * @return void
     */
    public function emergency($message, array $context = array());
 
 
    /**
     * Action must be taken immediately.
     * すぐに行動を起こす必要がある
     *
     * Example: Entire website down, database unavailable, etc. This should
     * trigger the SMS alerts and wake you up.
     * 例:ウェブサイト全体がダウンしている、データベースが利用できないなど。
     * これによりSMSアラートがトリガーされ、あなたは目覚めるでしょう。
     *
     * @param string $message
     * @param array $context
     * @return void
     */
    public function alert($message, array $context = array());
 
    /**
     * Critical conditions.
     * 危機的な状態
     *
     * Example: Application component unavailable, unexpected exception.
     * 例:アプリケーションコンポーネントを使用できない、予期しない例外。
     *
     * @param string $message
     * @param array $context
     * @return void
     */
    public function critical($message, array $context = array());
 
    /**
     * Runtime errors that do not require immediate action but should typically
     * be logged and monitored.
     * すぐに対処する必要はないが、通常はログに記録して監視する必要がある実行時エラー
     *
     * @param string $message
     * @param array $context
     * @return void
     */
    public function error($message, array $context = array());
 
    /**
     * Exceptional occurrences that are not errors.
     * エラーではない例外的な出来事
     *
     * Example: Use of deprecated APIs, poor use of an API, undesirable things
     * that are not necessarily wrong.
     * 例:廃止されたAPIの使用、APIの不適切な使用、必ずしも間違っているわけではないが望ましくないこと。
     *
     * @param string $message
     * @param array $context
     * @return void
     */
    public function warning($message, array $context = array());
 
 
    /**
     * Normal but significant events.
     * 正常だが重要なイベント
     *
     * @param string $message
     * @param array $context
     * @return void
     */
    public function notice($message, array $context = array());
 
    /**
     * Interesting events.
     * 興味深いイベント
     *
     * Example: User logs in, SQL logs.
     * 例:ユーザーのログイン。SQLログ。
     *
     * @param string $message
     * @param array $context
     * @return void
     */
    public function info($message, array $context = array());
 
    /**
     * Detailed debug information.
     * 詳細なデバッグ情報
     *
     * @param string $message
     * @param array $context
     * @return void
     */
    public function debug($message, array $context = array());
 
    /**
     * Logs with an arbitrary level.
     * 任意のレベルのロギング
     *
     * @param mixed $level
     * @param string $message
     * @param array $context
     * @return void
     */
    public function log($level, $message, array $context = array());
}


4. Psr\Log\LoggerAwareInterface

LoggerAwareInterface.php
<?php
 
namespace Psr\Log;
 
/**
 * Describes a logger-aware instance.
 * ロガー対応インスタンスの説明
 */
interface LoggerAwareInterface
{
    /**
     * Sets a logger instance on the object.
     * オブジェクトにロガーインスタンスを設定する
     *
     * @param LoggerInterface $logger
     * @return void
     */
    public function setLogger(LoggerInterface $logger);
}


5. Psr\Log\LogLevel

LogLevel.php
<?php
 
namespace Psr\Log;
 
/**
 * Describes log levels.
 * ログレベルの説明
 */
class LogLevel
{
    const EMERGENCY = 'emergency';
    const ALERT     = 'alert';
    const CRITICAL  = 'critical';
    const ERROR     = 'error';
    const WARNING   = 'warning';
    const NOTICE    = 'notice';
    const INFO      = 'info';
    const DEBUG     = 'debug';
}