<?php 
 | 
/** 
 | 
 * PhalApi_Logger 日记抽象类 
 | 
 * 
 | 
 * - 对系统的各种情况进行纪录,具体存储媒介由实现类定义 
 | 
 * - 日志分类型,不分优先级,多种类型可按并组合 
 | 
 * 
 | 
 * <br>接口实现示例:<br> 
 | 
``` 
 | 
 *      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 <chanzonghuang@gmail.com> 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; 
 | 
    } 
 | 
} 
 |