CDbLogRoute

优质
小牛编辑
147浏览
2023-12-01
所有包 | 属性 | 方法
system.logging
继承class CDbLogRoute » CLogRoute » CComponent
源自1.0
版本$Id: CDbLogRoute.php 3069 2011-03-14 00:28:38Z qiang.xue $
源码framework/logging/CDbLogRoute.php
CDbLogRoute存储日志信息到数据库表中。

指定数据库表存在日志信息,设置logTableName为表名, 并且指定connectionID为一个CDbConnection的应用程序组件的ID 。 如果他们没有设置,一个名为‘log-YiiVersion.db’的SQLite3数据库将被创建,并且在应用程序运行时目录下使用。 CCDbLogRoute存储日志信息到数据库表中。

公共属性

隐藏继承属性

属性类型描述定义在
autoCreateLogTableboolean是否日志数据库表不存在时自动创建。默认为true。CDbLogRoute
categoriesstring被逗号或空格分隔的类别列表。默认为空,意味着所有类别。CLogRoute
connectionIDstring应用程序组件CDbConnection的ID。 如果没有设置, 一个SQLite数据将被自动创建和使用。 此SQLite数据库文件是 protected/runtime/log-YiiVersion.CDbLogRoute
enabledboolean是否启用这个日志路由。默认为true。CLogRoute
filtermixed附加过滤器 (例如 CLogFilter) 它被应用到日志信息。 这个属性的值被传递到 Yii::createComponent 创建一个日志过滤器对象。 结果,这可能是一个表示过滤器类名的字符串或一个表示过滤器配置的数组。

总之,日志过滤器类应该是 CLogFilter 或它的一个子类。 默认为null,意味着没有过滤器被使用。
CLogRoute
levelsstring用逗号或空格分隔的等级列表。默认是空,意味着所有等级。CLogRoute
logTableNamestring存储日志信息的数据库表名。默认是‘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
logsarray到目前为止这个日志路由搜集的日志。CLogRoute

受保护属性

隐藏继承属性

属性类型描述定义在
dbConnectionCDbConnection数据库连接实例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)
$dbCDbConnection数据库连接
$tableNamestring要创建的表名称
源码: framework/logging/CDbLogRoute.php#90 (显示) protectedfunctioncreateLogTable($db,$tableName)
{
$driver=$db->getDriverName();
if($driver==='mysql')
$logID='idINTEGERNOTNULLAUTO_INCREMENTPRIMARYKEY';
elseif($driver==='pgsql')
$logID='idSERIALPRIMARYKEY';
else
$logID='idINTEGERNOTNULLPRIMARYKEY';

$sql="
CREATETABLE$tableName
(
$logID,
levelVARCHAR(128),
categoryVARCHAR(128),
logtimeINTEGER,
messageTEXT
)";
$db->createCommand($sql)->execute();
}

创建数据库表为存储日志信息。

getDbConnection() 方法
protected CDbConnection getDbConnection()
{return}CDbConnection数据库连接实例
源码: framework/logging/CDbLogRoute.php#116 (显示) protectedfunctiongetDbConnection()
{
if($this->_db!==null)
return$this->_db;
elseif(($id=$this->connectionID)!==null)
{
if(($this->_db=Yii::app()->getComponent($id))instanceofCDbConnection)
return$this->_db;
else
thrownewCException(Yii::t('yii','CDbLogRoute.connectionID"{id}"doesnotpointtoavalidCDbConnectionapplicationcomponent.',
array('{id}'=>$id)));
}
else
{
$dbFile=Yii::app()->getRuntimePath().DIRECTORY_SEPARATOR.'log-'.Yii::getVersion().'.db';
return$this->_db=newCDbConnection('sqlite:'.$dbFile);
}
}
init() 方法
public void init()
源码: framework/logging/CDbLogRoute.php#66 (显示) publicfunctioninit()
{
parent::init();

if($this->autoCreateLogTable)
{
$db=$this->getDbConnection();
$sql="DELETEFROM{$this->logTableName}WHERE0=1";
try
{
$db->createCommand($sql)->execute();
}
catch(Exception$e)
{
$this->createLogTable($db,$this->logTableName);
}
}
}

初始化此路由。 这个方法在路由管理器创建此路由后发起。

processLogs() 方法
protected void processLogs(array $logs)
$logsarray日志信息列表
源码: framework/logging/CDbLogRoute.php#139 (显示) protectedfunctionprocessLogs($logs)
{
$sql="
INSERTINTO{$this->logTableName}
(level,category,logtime,message)VALUES
(:level,:category,:logtime,:message)
";
$command=$this->getDbConnection()->createCommand($sql);
foreach($logsas$log)
{
$command->bindValue(':level',$log[1]);
$command->bindValue(':category',$log[2]);
$command->bindValue(':logtime',(int)$log[3]);
$command->bindValue(':message',$log[0]);
$command->execute();
}
}

存储日志信息到数据库。