包 | system.logging |
---|---|
继承 | class CLogger » CComponent |
源自 | 1.0 |
版本 | $Id: CLogger.php 3515 2011-12-28 12:29:24Z mdomba $ |
源码 |
CLogger取回带有不同过滤器条件的日志, 包括日志等级和日志类别。
公共属性
属性 | 类型 | 描述 | 定义在 |
---|---|---|---|
autoDump | boolean | 这个属性将被作为参数传递到flush()当它在log()中被调用时, 由于autoFlush已经完成限制。 默认时,这个属性为false,意味着已经过滤的信息仍然保存在内在中, 每次flush()日志路由调用之后。 如果为true,已过滤的信息被保存在实际的媒介中,在每次log()中的flush()被调用之后。 | CLogger |
autoFlush | integer | 在它们被刷新到目录前多少信息应该被记录。 默认到10,000, 意味着每10,000条信息,这个flush方法自动被发起一次信息。 如果为0,它意味着信息不会被自动刷新。 | CLogger |
executionTime | float | 返回服务当前请求的总时间。 | CLogger |
logs | array | 取回日志信息。 | CLogger |
memoryUsage | integer | 返回当前应用程序的内存使用量。 | CLogger |
profilingResults | array | 返回分析结果。 | CLogger |
公共方法
事件
事件 | 描述 | 定义在 |
---|---|---|
onFlush | 发起一个 onFlush 事件。 |
CLogger |
属性详细
这个属性将被作为参数传递到flush()当它在log()中被调用时, 由于autoFlush已经完成限制。 默认时,这个属性为false,意味着已经过滤的信息仍然保存在内在中, 每次flush()日志路由调用之后。 如果为true,已过滤的信息被保存在实际的媒介中,在每次log()中的flush()被调用之后。
在它们被刷新到目录前多少信息应该被记录。 默认到10,000, 意味着每10,000条信息,这个flush方法自动被发起一次信息。 如果为0,它意味着信息不会被自动刷新。
返回服务当前请求的总时间。 这个方法计算现在和常量YII_BEGIN_TIME定义的时间戳之间的不同 为了估算执行时间更加准确。 此常量应该尽可能早的定义(最好在进入脚本时开始。)
取回日志信息。
消息可能会被日志等级and/or类别过滤。
一个等级过滤器通过用逗号或空格分隔的等级列表指定(例如'trace, error')。
一个类别过滤器类似于等级过滤器 (例如'system, system.web')。
一个不同是在等级过滤器中你能使用类似'system.*'的模式去指示所有以 'system'开头的类别。
如果你没有指定等级过滤器,它将取回所有等级的日志。
这同样适用于类别过滤器。
等级过滤器和类别过滤器是可以组合的。
例如,仅仅同时满足两个条件信息才返回。
返回当前应用程序的内存使用量。 这个方法依靠PHP的函数memory_get_usage()。 如果它不可用,该方法将尝试使用操作系统程序去确定内存的使用 如果内存使用量仍不能确定将返回0。
返回分析结果。
此结果可能被令牌and/or类别过滤。
如果没有指定过滤器,返回结果将是每个元素都是数组的数组($token,$category,$time)。
如果指定了一个过滤器,结果将是一个时间数组。
方法详细
public void flush(boolean $dumpLogs=false)
| ||
$dumpLogs | boolean | 是否处理此日志 |
public function flush($dumpLogs=false)
{
$this->onFlush(new CEvent($this, array('dumpLogs'=>$dumpLogs)));
$this->_logs=array();
$this->_logCount=0;
}
从内存中移除所有记录的信息。 这个方法将引起一个 onFlush 事件。 附加事件处理程序能在它们被移除前处理此日志信息。
public float getExecutionTime()
| ||
{return} | float | 服务当前请求的总时间。 |
public function getExecutionTime()
{
return microtime(true)-YII_BEGIN_TIME;
}
返回服务当前请求的总时间。 这个方法计算现在和常量YII_BEGIN_TIME定义的时间戳之间的不同 为了估算执行时间更加准确。 此常量应该尽可能早的定义(最好在进入脚本时开始。)
public array getLogs(string $levels='', string $categories='')
| ||
$levels | string | 等级过滤器 |
$categories | string | 类别过滤器 |
{return} | array | 信息列表。 每一个数组元素代表一个下面结构的信息 array( [0] => message (string) [1] => level (string) [2] => category (string) [3] => timestamp (float, 通过 microtime(true) 取得); |
public function getLogs($levels='',$categories='')
{
$this->_levels=preg_split('/[\s,]+/',strtolower($levels),-1,PREG_SPLIT_NO_EMPTY);
$this->_categories=preg_split('/[\s,]+/',strtolower($categories),-1,PREG_SPLIT_NO_EMPTY);
if(empty($levels) && empty($categories))
return $this->_logs;
else if(empty($levels))
return array_values(array_filter(array_filter($this->_logs,array($this,'filterByCategory'))));
else if(empty($categories))
return array_values(array_filter(array_filter($this->_logs,array($this,'filterByLevel'))));
else
{
$ret=array_values(array_filter(array_filter($this->_logs,array($this,'filterByLevel'))));
return array_values(array_filter(array_filter($ret,array($this,'filterByCategory'))));
}
}
取回日志信息。
消息可能会被日志等级and/or类别过滤。
一个等级过滤器通过用逗号或空格分隔的等级列表指定(例如'trace, error')。
一个类别过滤器类似于等级过滤器 (例如'system, system.web')。
一个不同是在等级过滤器中你能使用类似'system.*'的模式去指示所有以 'system'开头的类别。
如果你没有指定等级过滤器,它将取回所有等级的日志。
这同样适用于类别过滤器。
等级过滤器和类别过滤器是可以组合的。
例如,仅仅同时满足两个条件信息才返回。
public integer getMemoryUsage()
| ||
{return} | integer | 应用程序的内存使用量(用字节)。 |
public function getMemoryUsage()
{
if(function_exists('memory_get_usage'))
return memory_get_usage();
else
{
$output=array();
if(strncmp(PHP_OS,'WIN',3)===0)
{
exec('tasklist /FI "PID eq ' . getmypid() . '" /FO LIST',$output);
return isset($output[5])?preg_replace('/[\D]/','',$output[5])*1024 : 0;
}
else
{
$pid=getmypid();
exec("ps -eo%mem,rss,pid | grep $pid", $output);
$output=explode(" ",$output[0]);
return isset($output[1]) ? $output[1]*1024 : 0;
}
}
}
返回当前应用程序的内存使用量。 这个方法依靠PHP的函数memory_get_usage()。 如果它不可用,该方法将尝试使用操作系统程序去确定内存的使用 如果内存使用量仍不能确定将返回0。
public array getProfilingResults(string $token=NULL, string $category=NULL, boolean $refresh=false)
| ||
$token | string | 令牌过滤器。默认为null,这意味着没有令牌过滤。 |
$category | string | 类别过滤器。默认为null,这意味着没有类别过滤。 |
$refresh | boolean | 是否刷新内部的时间计算。 如果为false,仅仅第一次调用这个方法进行内部的时间计算。 |
{return} | array | 分析结果。 |
public function getProfilingResults($token=null,$category=null,$refresh=false)
{
if($this->_timings===null || $refresh)
$this->calculateTimings();
if($token===null && $category===null)
return $this->_timings;
$results=array();
foreach($this->_timings as $timing)
{
if(($category===null || $timing[1]===$category) && ($token===null || $timing[0]===$token))
$results[]=$timing[2];
}
return $results;
}
返回分析结果。
此结果可能被令牌and/or类别过滤。
如果没有指定过滤器,返回结果将是每个元素都是数组的数组($token,$category,$time)。
如果指定了一个过滤器,结果将是一个时间数组。
public void log(string $message, string $level='info', string $category='application')
| ||
$message | string | 记录的信息 |
$level | string | 信息的等级(例如'Trace', 'Warning', 'Error')。不区分大小写。 |
$category | string | 信息的类别(例如'system.web')。不区分大小写。 |
public function log($message,$level='info',$category='application')
{
$this->_logs[]=array($message,$level,$category,microtime(true));
$this->_logCount++;
if($this->autoFlush>0 && $this->_logCount>=$this->autoFlush && !$this->_processing)
{
$this->_processing=true;
$this->flush($this->autoDump);
$this->_processing=false;
}
}
记录一条信息。 通过这个方法记录的消息通过 getLogs 取回。
参见
public void onFlush(CEvent $event)
| ||
$event | CEvent | 事件参数 |
public function onFlush($event)
{
$this->raiseEvent('onFlush', $event);
}
发起一个 onFlush
事件。