需求:定制自己的日志系统,本例假定指定存储到Mysql数据库当中。
通常的web我们可以 echo,或者IDE的debuger调试程序,但是有些特殊情况,例如php与android、unity3d等前端通讯时,传统方式并不方便,所以,需要把日志输出到其他地方便于查看。
* zf2中可以通过指定不同的 Zend/Log/Writer 来使用不同的日志记录方式。
下面开始动手了
为了便于在系统中重复使用,我将Logger放到 App 的 Service 中,以后只要在需要的时候,从 Service 中取出就可以用,如果完全没使用,也不会对速度有影响。
在文件 module/Application/Module.php 中:
头部引用包:
use ZendLogLogger; use ZendLogWriterDb as WriterDb;
在 Module 类中,加入自定义 Service:
public function getServiceConfig(){ return array( 'factories'=>array( 'WLogger' => function($sm){ $dbAdapter = $sm->get ( 'ZendDbAdapterAdapter' ); //需要指定你自己的数据库适配器 //对接数据表字段 $mapping = array( 'timestamp' => 'time', 'priority' => 'type', 'message' => 'message' ); $writer = new WriterDb($dbAdapter, 'log_table', $mapping); // log_table 是你自己的日志数据表 //$writer = new ZendLogWriterDb($dbAdapter, 'log_table', $mapping); //这样会报错 $logger = new Logger(); $logger->addWriter($writer); return $logger; } ) ); }
添加日志表到你的数据库中:
-- -- 表的结构 `log_table` -- CREATE TABLE IF NOT EXISTS `log_table` ( `id` int(10) NOT NULL AUTO_INCREMENT, `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `type` varchar(255) DEFAULT NULL, `message` text, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='日志库' AUTO_INCREMENT=1 ;
如何使用?:
$logger = $this->getServiceLocator()->get('WLogger'); $logger->info('记录一条日志');