继承 | yii\log\Logger » yii\base\Component » yii\base\BaseObject |
---|---|
实现 | yii\base\Configurable |
可用版本自 | 2.0 |
源码 | https://github.com/yiichina/yii2/blob/api/framework/log/Logger.php |
Logger 如果设置了 $dispatcher,它将把日志消息记在内存并且发送到所设置的日志 $dispatcher。
可以通过 Yii::getLogger()
获取 Logger 实例,并调用当前实例的 log() 方法去记录一条日志消息。 为了方便起见, Yii 类提供了一组用于记录各种级别消息的快捷方法。
有关于 Logger 的详细信息和使用方法,请参考权威指南的 Logger 章节。
当应用程序结束或者执行到 $flushInterval 时 Logger 将会自动调用 flush() 从而通过 $dispatcher 把消息记录到如 file,email, 或者 database 不同的目标。
属性 | 类型 | 描述 | 被定义在 |
---|---|---|---|
$behaviors | yii\base\Behavior[] | List of behaviors attached to this component | yii\base\Component |
$dbProfiling | array | 第一个元素表示执行的 SQL 语句的数量, 第二个元素是 SQL 执行花费的总时间。 | yii\log\Logger |
$dispatcher | yii\log\Dispatcher | 消息调度器。 | yii\log\Logger |
$elapsedTime | float | 当前请求的总耗时(以秒为单位)。 | yii\log\Logger |
$flushInterval | integer | 在从内存刷新并发送到目标之前,应该记录多少消息。 默认值 1000,这意味着每记录 1000 条消息,就会调用 flush() 方法一次。 如果此属性设置为 0,程序终止之前将不会刷新消息。 此属性主要影响日志消息将占用多少内存。 较小的值意味着占用更少的内存,但是由于 [[flush()] 的开销,会增加执行时间。 | yii\log\Logger |
$messages | array | 日志消息。该属性由 log() 和 flush() 操作。 下面是日志消息的结构: ` [ [0] => message (mixed, can be a string or some complex data, such as an exception object) [1] => level (integer) [2] => category (string) [3] => timestamp (float, obtained by microtime(true)) [4] => traces (array, debug backtrace, contains the application code call stacks) [5] => memory usage in bytes (int, obtained by memory_get_usage()), available since version 2. | yii\log\Logger |
$profiling | array | 分析的结果。每个元素都是由这些元素组成的数组: info ,category ,timestamp ,trace ,level ,duration ,memory ,memoryDiff , 从版本 2. | yii\log\Logger |
$traceLevel | integer | 应该为每个消息记录多少调用堆栈信息(文件名和行号)。 如果大于 0,最多记录调用堆栈的数量。 注意,只计算应用程序调用的堆栈信息。 | yii\log\Logger |
这是yii框架提供的日志文档,我们可以关注这两点:
1.
当应用程序结束或者执行到 $flushInterval 时 Logger 将会自动调用 flush() 从而通过 $dispatcher 把消息记录到如 file,email, 或者 database 不同的目标。
2.
$flushInterval | integer | 在从内存刷新并发送到目标之前,应该记录多少消息。 默认值 1000,这意味着每记录 1000 条消息,就会调用 flush() 方法一次。 如果此属性设置为 0,程序终止之前将不会刷新消息。 此属性主要影响日志消息将占用多少内存。 较小的值意味着占用更少的内存,但是由于 [[flush()] 的开销,会增加执行时间。 | yii\log\Logger |
运用:
<?php
/**
* task进程接收任务
* @param \Swoole\Server $server
* @param string $task_id 进程id
* @param string $from_id 来源worker进程id
* @param $data
* @link https://wiki.swoole.com/wiki/page/54.html
*/
public function onTask($server, $task_id, $from_id, $data)
{
// TODO: Implement onTask() method.
try {
Yii::getLogger()->flushInterval = 1;
Yii::$app->redis->open();
Yii::$app->getDb()->open();
$result = call_user_func_array([$this, 'task'], ['server' => $server, 'task_id' => $task_id, 'from_id' => $from_id, 'data' => $data]);
$taskData['status'] = 'success';
$taskData['message'] = $result;
} catch (Exception $exception) {
Yii::error($exception->__toString());
$taskData['status'] = 'fail';
$taskData['message'] = $exception->getMessage();
} catch (Throwable $throwable) {
Yii::error($throwable->__toString());
$taskData['status'] = 'fail';
$taskData['message'] = $throwable->getMessage();
}
$server->finish(json_encode($taskData));
Yii::$app->getDb()->close();
Yii::$app->redis->close();
}
注释:可以看到在swoole异步投递任务时加入了这一句代码,这样每次都将记录日志到文件中,我们就可以看实时日志了。