注意:在应用运行结束的时候也会刷新内存,这样做事为了让日志的target能够记录完整的信息。
把日志信息从内存刷到对应存放的地方的这一动作不是立即发生的。事实上,和上面一样,都是当内存中的日志大小达到一定程度才会发生。你可以像下面的示例一样通过配置不同target的[[yii\log\Target::exportInterval|exportInterval]]值,来达到修改的目的:
[ 'class' => 'yii\log\FileTarget', 'exportInterval' => 100, // default is 1000 ]
因为清空和导出的设定,默认情况下你调用 Yii::trace() 或者其他的日志记录方法的时候不会在日志target下立马看到日志消息。这对某些长时间运行的控制台程序是一个问题。不过这个问题是可以解决的,方法入下面的代码,你需要把[[yii\log\Dispatcher::flushInterval|flushInterval]] 和[[yii\log\Target::exportInterval|exportInterval]] 的值都设置成1:
return [ 'bootstrap' => ['log'], 'components' => [ 'log' => [ 'flushInterval' => 1, 'targets' => [ [ 'class' => 'yii\log\FileTarget', 'exportInterval' => 1, ], ], ], ], ];
注意:如此频繁的清空和导出日志消息会降低系统的性能。
切换日志的targets
你可以通过设置[[yii\log\Target::enabled|enabled]] 属性来禁止日志的target。就如同下面的代码描述的一样:
Yii::$app->log->targets['file']->enabled = false;
上面的代码需要你在配置文件里面有一个下面的配置:
return [ 'bootstrap' => ['log'], 'components' => [ 'log' => [ 'targets' => [ 'file' => [ 'class' => 'yii\log\FileTarget', ], 'db' => [ 'class' => 'yii\log\DbTarget', ], ], ], ], ];
创建一个新的target
首先,创建一个新的日志target是很简单的。你主要做的事情是实现[[yii\log\Target::export()]] 方法并且把数组类型的消息[[yii\log\Target::messages]]发送到指定的存储媒介上去就行了。在这个过程中你可以调用[[yii\log\Target::formatMessage()]] 方法来格式化每一条日志消息。至于更多的细节你可以在Yiid的发行版本里找到详细的信息。
性能评测
性能评测是一种比较特别的日志记录。它通常用来获取某些模块执行时间的数据,以此来找到性能的问题所在。比如说,[[yii\db\Command]] 这个类就用性能评测日志来获得每一条sql查询所花费的时间。
要使用该类日志,你首先要做的时确定你要测试的代码范围。然后在每一段代码之间你都应该要保持它们是闭合的,就像下面这个样子:
\Yii::beginProfile('myBenchmark'); ...code block being profiled... \Yii::endProfile('myBenchmark');
myBenchmark只是一个标识,用于你在查看对应日志记录的时候快速定位。
在beginProfile和endProfile之间是可以再嵌套的,但是必须保证正确的闭合关系,如下所示:
\Yii::beginProfile('block1'); // some code to be profiled \Yii::beginProfile('block2'); // some other code to be profiled \Yii::endProfile('block2'); \Yii::endProfile('block1');
如果上面的闭合关系出错了,对应的记录都不会正常工作。
对于每一块被评测的代码,日志的level都是profile。你可以再日志的target中配置这些信息并导出它们。 Yii内建了 Yii debugger来展示评测的结果。
您可能感兴趣的文章: