【问题标题】:in search of a realtime php cli log system with verbosity levels寻找具有详细级别的实时 php cli 日志系统
【发布时间】:2021-03-07 04:33:56
【问题描述】:
我正在寻找一个日志系统,它可以使用不同的详细级别并立即刷新到文件或控制台。我和 yii2 一起工作。他们的 Yii2 日志很好,有信息、调试、警告、错误级别。但我无法让它实时工作以在屏幕上刷新。我尝试将flushInterval 设置为 1 甚至 0,但不起作用。 yii2 日志方法有application 参数,所以我可以过滤哪些部分被记录,以防某些模块出现错误。我的许多 cli 应用程序都不会死机,因此日志只会在数小时后像洪水一样出现。
也许有一个完全不同的作曲家包可以做同样的事情。
谢谢。
【问题讨论】:
标签:
php
logging
yii2
real-time
verbosity
【解决方案1】:
日志分为两个级别:
- 调度员级别由
Dispatcher::$flushInterval控制。
- 由
Target::$exportInterval控制的日志目标级别。
所以除了flushInterval,你还需要为给定的目标配置exportInterval,如果你想一个一个地导出每一个日志:
'log' => [
'flushInterval' => 1,
'targets' => [
'file' => [
'class' => yii\log\FileTarget::class,
'exportInterval' => 1,
'levels' => ['trace', 'info'],
],
],
],
但是在长时间运行的进程中完成每个任务后调用Yii::$app->log->flush(true) 可能会获得更好的性能。因此,如果您在控制台命令中处理 1k 模型,则在每个模型之后运行 Yii::$app->log->flush(true) - 它应该大大减少记录器开销并且仍然非常接近“实时”(只要处理一个模型不需要太多时间)。