Yii将需要的log写入到数据库中 (重新CDbLogRoute)

一,配置环境(main.php)

'log' => array(

   'class' => 'CLogRouter',

   'routes' => array(

         //写入文件的log,默认categories为application

         array(

              'class' => 'CFileLogRoute',

              'levels' => 'info, warning, error, profile, debug',

          ),

         //写入数据库的log,categories为mail,web

         array(

              'class'=>'CDbLogRoute',

              'connectionID'=>'db',

              'levels'=>'info, warning, error, profile, debug',

              'logTableName' => 'userlogs',

              'categories'=>'mail,web', //可以随便定义

          ),

    ),

)

 

二,创建数据库

CREATE TABLE `userlogs` (
    `id` INT(11) NOT NULL AUTO_INCREMENT, 
    `level` VARCHAR(128) NULL DEFAULT NULL, 
    `category` VARCHAR(128) NULL DEFAULT NULL, 
    `logtime` INT(11) UNSIGNED NULL DEFAULT NULL,
    `message` TEXT NULL,  
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

//解析一下,数据库的字段为什么是这些,可以看YII源码中的CDbLogRoute.php文件(/framework/logging下)

//这个文件中table字段就包括这些,我们用Yii::log($message,$level,$category)的时候就会自动的将字段

//插入到相应的字段;

 

三,插入log

在你想执行的地方,加入如下代码,就可将log写入到数据库中

Yii::log('log message内容','info','mail');

 

 

扩展,如果我们需要保存更多的信息,应该怎样,比如,我需要将用户的ip也存入到数据库中,那么该怎样呢?

很简单:

一,首先写一个类,继承CLogRoute(我们发现CDbLogRoute也是继承CLogRoute)

简单做法:复制一份CDbLogRoute,将其改名为我们想要的名字,例如MyCDbLogRoute

这样MyCDbLogRoute内容就和CDbLogRoute一样了.

 

二,修改MyCDbLogRoute方法createLogTable

原方法:

protected function createLogTable($db,$tableName)
  {
    $db->createCommand()->createTable($tableName, array(
      'id'=>'pk',
      'level'=>'varchar(128)',
      'category'=>'varchar(128)',
      'logtime'=>'integer',
      'message'=>'text',
    ));
  }

修改成:

protected function createLogTable($db,$tableName)
 {
  $db->createCommand()->createTable($tableName, array(
   'id'=>'pk',
   'level'=>'varchar(128)',
   'category'=>'varchar(128)',
   'logtime'=>'integer',
   'message'=>'text',
   'ip'=>'text',
  ));
 }

 

三,修改方法processLogs

原方法:

protected function processLogs($logs)
 {
  $command=$this->getDbConnection()->createCommand();
  foreach($logs as $log)
  {
   $command->insert($this->logTableName,array(
    'level'=>$log[1],
    'category'=>$log[2],
    'logtime'=>(int)$log[3],
    'message'=>$log[0],
   ));
  }
 }

修改成:

protected function processLogs($logs)
 {
  $command=$this->getDbConnection()->createCommand();
  foreach($logs as $log)
  {
   $command->insert($this->logTableName,array(
    'level'=>$log[1],
    'category'=>$log[2],
    'logtime'=>(int)$log[3],
    'message'=>$log[0],
    'ip'=>Yii::app()->request->userHostAddress,//获取用户ip
   ));
  }
 }

 

四,创建一个table

CREATE TABLE `userlogs` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`level` VARCHAR(128) NULL DEFAULT NULL,
`category` VARCHAR(128) NULL DEFAULT NULL,
`logtime` INT(11) UNSIGNED NULL DEFAULT NULL,
`message` TEXT NULL,

`ip` TEXT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

五,修改main.php

将我们创建的MyCDbLogRoute拷贝到protected/components下,

同时修改main.php中的'class'=>'CDbLogRoute'=》'class'=>'MyCDbLogRoute'

 

六,记录log

在你想执行的地方,加入如下代码,就可将log写入到数据库中

Yii::log('log message内容','info','mail');


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值