<?php interface IFormater { public function format($message, $level); } class File_Xml implements IFormater { public function format($message, $level) { $date = date('Y-m-d H:i:s'); $xml = '<message>'.PHP_EOL; $xml .= ' <date>'.$date.'</date>'.PHP_EOL; $xml .= ' <level>'.$level.'</level>'.PHP_EOL; $xml .= ' <desc>'.$message.'</desc>'.PHP_EOL; $xml .= '</message>'.PHP_EOL; return $xml; } } class File_Csv implements IFormater { public function format($message, $level) { $plain = date('Y-m-d H:i:s').';'.$level.';'.$message; return $plain.PHP_EOL; } } class Logger { private $_formater; private $_file; public function __construct(IFormater $formater, $file) { $this->_formater = $formater; $this->_file = $file; } public function write($message, $level = 'NOTICE') { $message = $this->_formater->format($message, $level); file_put_contents($this->_file, $message, FILE_APPEND | LOCK_EX); } } $logger = new Logger(new File_Csv(), '/tmp/log.csv'); $logger->write('this is an error test', 'ERROR'); $logger->write('this is a warning test', 'WARNING'); $logger->write('this is a notice test', 'NOTICE'); |