标签:日志记录 执行 技术 func 服务 示例 技术分享 const log
说明:
1.MyObject有一个methodA()的公共方法,OrigianConsumer获取MyObject的实例,并在执行doSomething()方法期间,调用methodA()
2.引入NewConsumer,这个类期望在执行doSomething()方法期间,调用MyObject实例的另一个公共方法methodB()
3.通过扩展MyObject,创建一个ObjectAdaper类,像NewConsumer期望的那样,新创建的ObjectAdaper会提供methodB的公共方法,在这个简单的示例中,所有的methodB都会调用methodA
项目开始我们有个错误类,简单的返回产生的错误!
class ErrorObject { private $error; public function __construct($error) { $this->error = $error; } public function getError() { return $this->error; } } // 日志类 class LogError { private $errObject; public function __construct($errOgb) { $this->errObject = $errOgb; } public function write() { error_log($this->errObject->getError(), 0); } }
在最开始我们是这样子使用的:
$error = new ErrorObject(‘404: not found‘); $log = new LogError($error); $log->write();
后来管理员觉得这样子不好,应该将日志写入一个csv,便于监控软件来生成日志监控图.监控软件需要第一列是数值错误代码,第二列是错误信息.但之前ErrorObject还需要为其他类提供服务.
这时我们就要适配器来解决:
class ErrorAdapter extends ErrorObject { private $errorNumber, $errorText; public function __construct($error) { parent::__construct($error); $parts = explode(‘:‘, $error); $this->errorNumber = $parts[0]; $this->errorText = $parts[1]; } public function getErrorNumber() { return $this->errorNumber; } public function getErrorText() { return $this->errorText; } }
新的日志记录类:
class LogToCsv { const CSV_LOCATION = ‘log.csv‘; private $errorObject; public function __construct(ErrorAdapter $errObject) { $this->errorObject = $errObject; } public function write() { $line = $this->errorObject->getErrorNumber(); $line .= ‘,‘; $line .= $this->errorObject->getErrorText(); $line .= "\n"; file_get_contents(self::CSV_LOCATION, $line); } }
// 新的调用 $err = new ErrorAdapter(‘501:bad action‘); $log = new LogToCsv($err); $log->write();
LogToCsv期望从ErrorObject中获取到错误信息的数字标识和错误文本,但因为不便于对ErrorObject进行修改,我们用一个适配器继承了ErrorObject,并提供了LogToCsv期望的两个方法来满足需求.
标签:日志记录 执行 技术 func 服务 示例 技术分享 const log
原文地址:http://www.cnblogs.com/itfenqing/p/7712316.html