<?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;
|
}
|
}
|