接口实现示例:
``` * class PhalApi_Logger_Mock extends PhalApi_Logger { * public function log($type, $msg, $data) { * //nothing to do here ... * } * } * * //保存全部类型的日记 * $logger = new PhalApi_Logger_Mock( * PhalApi_Logger::LOG_LEVEL_DEBUG | PhalApi_Logger::LOG_LEVEL_INFO | PhalApi_Logger::LOG_LEVEL_ERROR); * * //开发调试使用,且带更多信息 * $logger->debug('this is bebug test', array('name' => 'mock', 'ver' => '1.0.0')); * * //业务场景使用 * $logger->info('this is info test', 'and more detail here ...'); * * //一些不该发生的事情 * $logger->error('this is error test'); ``` * * @package PhalApi\Logger * @link http://www.php-fig.org/psr/psr-3/ Logger Interface * @license http://www.phalapi.net/license GPL 协议 * @link http://www.phalapi.net/ * @author dogstar 2014-10-02 */ abstract class PhalApi_Logger { /** * @var int $logLevel 多个日记级别 */ protected $logLevel = 0; /** * @var int LOG_LEVEL_DEBUG 调试级别 */ const LOG_LEVEL_DEBUG = 1; /** * @var int LOG_LEVEL_INFO 产品级别 */ const LOG_LEVEL_INFO = 2; /** * @var int LOG_LEVEL_ERROR 错误级别 */ const LOG_LEVEL_ERROR = 4; public function __construct($level) { $this->logLevel = $level; } /** * 日记纪录 * * 可根据不同需要,将日记写入不同的媒介 * * @param string $type 日记类型,如:info/debug/error, etc * @param string $msg 日记关键描述 * @param string/array $data 场景上下文信息 * @return NULL */ abstract public function log($type, $msg, $data); /** * 应用产品级日记 * @param string $msg 日记关键描述 * @param string/array $data 场景上下文信息 * @return NULL */ public function info($msg, $data = NULL) { if (!$this->isAllowToLog(static::LOG_LEVEL_INFO)) { return; } $this->log('info', $msg, $data); } /** * 开发调试级日记 * @param string $msg 日记关键描述 * @param string/array $data 场景上下文信息 * @return NULL */ public function debug($msg, $data = NULL) { if (!$this->isAllowToLog(static::LOG_LEVEL_DEBUG)) { return; } $this->log('debug', $msg, $data); } /** * 系统错误级日记 * @param string $msg 日记关键描述 * @param string/array $data 场景上下文信息 * @return NULL */ public function error($msg, $data = NULL) { if (!$this->isAllowToLog(static::LOG_LEVEL_ERROR)) { return; } $this->log('error', $msg, $data); } /** * 是否允许写入日记,或运算 * @param int $logLevel * @return boolean */ protected function isAllowToLog($logLevel) { return (($this->logLevel & $logLevel) != 0) ? TRUE : FALSE; } }