包 | system.logging |
---|---|
继承 | class CDbLogRoute » CLogRoute » CComponent |
源自 | 1.0 |
版本 | $Id: CDbLogRoute.PHP 3069 2011-03-14 00:28:38Z qiang.xue $ |
源码 |
CDbLogRoute存储日志信息到数据库表中。
指定数据库表存在日志信息,设置logTableName为表名, 并且指定connectionID为一个CDbConnection的应用程序组件的ID 。 如果他们没有设置,一个名为‘log-YiiVersion.db’的sqlite3数据库将被创建,并且在应用程序运行时目录下使用。 CCDbLogRoute存储日志信息到数据库表中。
指定数据库表存在日志信息,设置logTableName为表名, 并且指定connectionID为一个CDbConnection的应用程序组件的ID 。 如果他们没有设置,一个名为‘log-YiiVersion.db’的sqlite3数据库将被创建,并且在应用程序运行时目录下使用。 CCDbLogRoute存储日志信息到数据库表中。
公共属性
属性 | 类型 | 描述 | 定义在 |
---|---|---|---|
autoCreateLogTable | boolean | 是否日志数据库表不存在时自动创建。默认为true。 | CDbLogRoute |
categories | string | 被逗号或空格分隔的类别列表。默认为空,意味着所有类别。 | CLogRoute |
connectionID | string | 应用程序组件CDbConnection的ID。
如果没有设置, 一个SQLite数据将被自动创建和使用。
此SQLite数据库文件是 protected/runtime/log-YiiVersion.
|
CDbLogRoute |
enabled | boolean | 是否启用这个日志路由。默认为true。 | CLogRoute |
filter | mixed | 附加过滤器 (例如 CLogFilter) 它被应用到日志信息。
这个属性的值被传递到 Yii::createComponent 创建一个日志过滤器对象。
结果,这可能是一个表示过滤器类名的字符串或一个表示过滤器配置的数组。
总之,日志过滤器类应该是 CLogFilter 或它的一个子类。 默认为null,意味着没有过滤器被使用。 |
CLogRoute |
levels | string | 用逗号或空格分隔的等级列表。默认是空,意味着所有等级。 | CLogRoute |
logTableName | string | 存储日志信息的数据库表名。默认是‘YiiLog’。
如果autoCreateLogTable是false,你想自己手动创建数据表,
你需要确保数据表是下面的结构:
( id INTEGER NOT NULL PRIMARY KEY, level VARCHAR(128), category VARCHAR(128), logtime INTEGER, message TEXT )注意,‘id’列必须作为auto-incremental列。 在mysql中,这意味你应该 id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY ;
在PostgreSQL,你需要id SERIAL PRIMARY KEY 。 |
CDbLogRoute |
logs | array | 到目前为止这个日志路由搜集的日志。 | CLogRoute |
受保护属性
属性 | 类型 | 描述 | 定义在 |
---|---|---|---|
dbConnection | CDbConnection | 数据库连接实例 | CDbLogRoute |
公共方法
方法 | 描述 | 定义在 |
---|---|---|
__call() | 如果类中没有调的方法名,则调用这个方法。 | CComponent |
__get() | 返回一个属性值、一个事件处理程序列表或一个行为名称。 | CComponent |
__isset() | 检查一个属性是否为null。 | CComponent |
__set() | 设置一个组件的属性值。 | CComponent |
__unset() | 设置一个组件的属性为null。 | CComponent |
asa() | 返回这个名字的行为对象。 | CComponent |
attachBehavior() | 附加一个行为到组件。 | CComponent |
attachBehaviors() | 附加一个行为列表到组件。 | CComponent |
attachEventHandler() | 为事件附加一个事件处理程序。 | CComponent |
canGetProperty() | 确定属性是否可读。 | CComponent |
canSetProperty() | 确定属性是否可写。 | CComponent |
collectLogs() | 从日志记录器取回已过滤的日志信息以便进一步处理。 | CLogRoute |
detachBehavior() | 从组件中分离一个行为。 | CComponent |
detachBehaviors() | 从组件中分离所有行为。 | CComponent |
detachEventHandler() | 分离一个存在的事件处理程序。 | CComponent |
disableBehavior() | 禁用一个附加行为。 | CComponent |
disableBehaviors() | 禁用组件附加的所有行为。 | CComponent |
enableBehavior() | 启用一个附加行为。 | CComponent |
enableBehaviors() | 启用组件附加的所有行为。 | CComponent |
evaLuateExpression() | 计算一个PHP表达式,或根据组件上下文执行回调。 | CComponent |
getEventHandlers() | 返回一个事件的附加处理程序列表。 | CComponent |
hasEvent() | 确定一个事件是否定义。 | CComponent |
hasEventHandler() | 检查事件是否有附加的处理程序。 | CComponent |
hasProperty() | 确定属性是否被定义。 | CComponent |
init() | 初始化此路由。 | CDbLogRoute |
raiseEvent() | 发起一个事件。 | CComponent |
受保护方法
方法 | 描述 | 定义在 |
---|---|---|
createLogTable() | 创建数据库表为存储日志信息。 | CDbLogRoute |
formatLogMessage() | 格式化一条日志信息已给定不同字段。 | CLogRoute |
getDbConnection() | 返回数据库连接实例 | CDbLogRoute |
processLogs() | 存储日志信息到数据库。 | CDbLogRoute |
属性详细
autoCreateLogTable
属性
public boolean $autoCreateLogTable;
是否日志数据库表不存在时自动创建。默认为true。
参见
- logTableName
connectionID
属性
public string $connectionID;
应用程序组件CDbConnection的ID。
如果没有设置, 一个SQLite数据将被自动创建和使用。
此SQLite数据库文件是 protected/runtime/log-YiiVersion.db
。
dbConnection
属性
只读
protected CDbConnection getDbConnection()
数据库连接实例
logTableName
属性
public string $logTableName;
存储日志信息的数据库表名。默认是‘YiiLog’。 如果autoCreateLogTable是false,你想自己手动创建数据表, 你需要确保数据表是下面的结构:
( id INTEGER NOT NULL PRIMARY KEY, level VARCHAR(128), category VARCHAR(128), logtime INTEGER, message TEXT )注意,‘id’列必须作为auto-incremental列。 在MySQL中,这意味你应该
id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY
;
在PostgreSQL,你需要id SERIAL PRIMARY KEY
。
参见
- autoCreateLogTable
方法详细
createLogTable()
方法
protected void createLogTable(CDbConnection $db, string $tableName)
| ||
$db | CDbConnection | 数据库连接 |
$tableName | string | 要创建的表名称 |
protected function createLogTable($db,$tableName)
{
$driver=$db->getDriverName();
if($driver==='mysql')
$logID='id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY';
else if($driver==='pgsql')
$logID='id SERIAL PRIMARY KEY';
else
$logID='id INTEGER NOT NULL PRIMARY KEY';
$sql="
CREATE TABLE $tableName
(
$logID,
level VARCHAR(128),
category VARCHAR(128),
logtime INTEGER,
message TEXT
)";
$db->createCommand($sql)->execute();
}
创建数据库表为存储日志信息。
getDbConnection()
方法
protected CDbConnection getDbConnection()
| ||
{return} | CDbConnection | 数据库连接实例 |
protected function getDbConnection()
{
if($this->_db!==null)
return $this->_db;
else if(($id=$this->connectionID)!==null)
{
if(($this->_db=Yii::app()->getComponent($id)) instanceof CDbConnection)
return $this->_db;
else
throw new CException(Yii::t('yii','CDbLogRoute.connectionID "{id}" does not point to a valid CDbConnection application component.',
array('{id}'=>$id)));
}
else
{
$dbFile=Yii::app()->getRuntimePath().DIRECTORY_SEPARATOR.'log-'.Yii::getVersion().'.db';
return $this->_db=new CDbConnection('sqlite:'.$dbFile);
}
}
init()
方法
public void init()
|
public function init()
{
parent::init();
if($this->autoCreateLogTable)
{
$db=$this->getDbConnection();
$sql="DELETE FROM {$this->logTableName} WHERE 0=1";
try
{
$db->createCommand($sql)->execute();
}
catch(Exception $e)
{
$this->createLogTable($db,$this->logTableName);
}
}
}
初始化此路由。 这个方法在路由管理器创建此路由后发起。
processLogs()
方法
protected void processLogs(array $logs)
| ||
$logs | array | 日志信息列表 |
protected function processLogs($logs)
{
$sql="
INSERT INTO {$this->logTableName}
(level, category, logtime, message) VALUES
(:level, :category, :logtime, :message)
";
$command=$this->getDbConnection()->createCommand($sql);
foreach($logs as $log)
{
$command->bindValue(':level',$log[1]);
$command->bindValue(':category',$log[2]);
$command->bindValue(':logtime',(int)$log[3]);
$command->bindValue(':message',$log[0]);
$command->execute();
}
}
存储日志信息到数据库。