「PSR 规范」PSR-3 日志接口规范

2021-08-03  本文已影响0人  晨曦入诗

日志接口规范


本文制定了日志类库的通用接口规范。
本规范的主要目的,是为了让日志类库以简单通用的方式,通过接收一个 Psr\Log\LoggerInterface 对象,来记录日志信息。框架以及 CMS 管理系统如有需要, 可以 对此接口进行扩展,这才能在保证使用第三方类库的文件时,日志接口仍能正常对接。

关于「能愿动词」的使用


为了避免歧义,文档使用了大量的 「能愿动词」,对应的解释如下:

1.规范说明


1.1基本规范

1.2记录信息

/**
 * 用上下文信息替换记录信息中的占位符
 */
function interpolate($message, array $content = array ())
{
    //构建一个花括号包含的键名的替换数组
    $replace = array();
    foreach ($content as $key => $val) {
        $replace['{' . $key . '}'] = $val;
    }
    //替换记录中信息中的占位符,最后返回修改后的记录信息
    return strtr($message, $replace);
}

//含有带花括号占位符的记录信息
$message = "User {username} created";

//带有替换信息的上下文数组,键名为占位符名称,键值为替换值。
$content = array('username' => 'bolivar');

//输出 "UserName bolivar created"
echo interpolate($message, $context);

1.3上下文

1.4助手类和接口

2.包


上述的接口、类和相关的异常类,以及一系列的实现检测文件,都包含在 psr/log 文件包中。

3. Psr\Log\LoggerInterface


<?php
/**
 *日志记录实例
 *
 * 日志信息变量—— message,**必须** 是一个字符串或是实现了 __toString() 方法的对象
 *
 * 日志信息变量中 **可以** 包含如 “{foo}” (代表 foo) 的占位符,
 * 它将会有上下文数组中键名为 「foo」的键值替代。
 *
 * 它将会由上下文数组可以携带任意的数据,唯一的限制是,当它携带的是一个 exception 对象时,它的键名必须是 "exception"
 *
 * 详情可参阅:https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-3-logger-interface-cn.md
 */
interface LoggerInterface
{
    /**
      * 系统不可用
      *
      * @param string $message
      * @param array $context
      * @return null
      */
public function emergency($message, array $context = array());

/**
  *    **必须** 立刻采取行动
  * 
  * 例如:在整个网站都垮掉了、数据库不可用了或其他的情况下, **应该** 发送一条警报信息把你叫醒。
  *
  * @param string $message
  * @param array $context
  * @return null
  */
public function alter($message, array $context = array());

/**
  * 紧急情况
  *
  * 例如 :程序组件不可用或出现非预期的异常
  *
  * @param string $message
  * @param array $context
  * @return null
  */
public function critical($message, array $context = arraay());

/**
  * 运行时出现的错误,不需要立刻采取行动,但必须记录下来以备检测。
  * 
  * @param string $message
  * @param array $context
  * @return null
  */
public function error($message, array $context = array());

/**
  * 出现非错误性的异常。
  *
  * 例如:使用了被弃用的 API、错误的使用了 API 或非预想的不必要错误。
  *
  * @param string $message
  * @param array $context
  * @return null
  */
public function warning($message, array $context = array());

/**
  * 一般性重要的事件。
  * 
  * @param string $message
  * @param array $context
  * @return null
   */
public function notice($message, array $context = array());

/**
  * 重要事件。
  *
  * 例如:用户登录和 sql 记录
  *
  * @param string $message
  * @param array $context
  * @return null
   */
public function info($message, array $context = array());

/**
  * debug 详情
  *
  * @param string $message
  * @param array $context
  * @return null
   */
punlic function debug($message, array $context = array());

/**
  * 任意等级的日志记录
  * 
  * @param mixed $level
  * @param string $message
  * @param array $context
  * @return null
   */
public function log($level, $message, array $context = array());

}

4.Psr\Log\LoggerAwareInterface

<?php
namespace Psr\Log;

/**
  * logger-aware 定义实例
  */
interface LoggerAwareInterface
{
    /**
      * 设置一个日志记录实例
      *
      * @param LoggerInterface $logger
      * @return null
      */
    public function setLogger(LoggerInterface $logger);
}

5.Psr\Log\LogLevel

<?php

namespace Psr\Log;

/**
  * 日志等级常量定义
  */
class Loglevel
{
    const ENERGENCY = 'emergency';
    const ALTER = 'alter';
    const CRITICAL = 'critical';
    const ERROR = 'error';
    const WARNING = 'warning';
    const NOTICE= 'notice';
    const INFO = 'info';
    const DEBUG = 'debug';
}
上一篇下一篇

猜你喜欢

热点阅读