Yii将需要的log写入到数据库中
来源:互联网 发布:金盾加密软件授权 编辑:程序博客网 时间:2024/06/05 02:39
Base版本:
一,配置环境(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 0
- Yii将需要的log写入到数据库中
- Yii将需要的log写入到数据库中 (重新CDbLogRoute)
- 基于springMVC 将log日志写入到数据库中
- 将存储过程写入C#中 有需要时则动态插入到数据库 免得麻烦
- 将存储过程写入C#中 有需要时则动态插入到数据库 免得麻烦
- Eclipse将console中的log写入到文件中
- python实例26[将log同时写入文件和显示到UI的控件中]
- 将从数据库中获取的数据写入到Excel表中
- .NET : 如何将大文件写入到数据库中
- java将数据库数据写入到Excel中
- 将Log日志通过Hibernate保存到数据库中
- UE4--Log写入到单独文件中
- 文件的导入(ruby :将文件写入到数据库)
- 将DataGridView上数据的变更写入到ACCESS数据库
- 将session写入数据库中
- 开机启动时将log日志写入到SDcard
- 从数据库中读取图片文件和将图片和写入到数据库中
- Log4J写入到数据库中
- 三十二 我在软件园的那些日子里
- 程序员在周末学习的8个实用技术
- 使用Fragment实现tabhost效果
- _start:crtbrand.c(.text+0x78): error: undefined reference to 'main'
- LDAP查询过滤语法 LDAP Filter Syntax
- Yii将需要的log写入到数据库中
- 使用jQuery(一)
- SICP学习笔记及题解---构造过程抽象(一)
- Java编程思想(十四) —— 类型信息RTTI基本概念
- Spring-ldap Filter
- 防火墙原理介绍
- Oracle数据库导入导出
- [代码片段]获取屏幕的宽高
- 转一下PT的记录