【问题标题】:How to log all HTTP requests to site, using Yii Framework?如何使用 Yii 框架记录所有对站点的 HTTP 请求?
【发布时间】:2012-12-19 00:34:21
【问题描述】:

我想记录所有对站点、框架 Yii 的 HTTP 请求。

我可以使用框架的标准功能吗?

【问题讨论】:

  • 我知道这篇文章,但我找不到如何记录 http 请求,只有错误。我不想在框架代码中编写自定义代码
  • 如果你只想要一个 HTTP 请求日志并且你正在运行 Apache 作为你的服务器,你可以使用已经存在的访问日志:httpd.apache.org/docs/1.3/logs.html#accesslog。或者,在 Yii 中是否有特定的需要这样做?
  • 是的,我知道 Apache 日志,但我认为 Yii 提出了类似的功能
  • 您实际上想要完成什么? 为什么为什么您希望 应用程序 记录请求,而服务器已经为您执行此操作?
  • 值得一提的是,Apache 日志将包括所有不通过 Yii 的额外内容 - CSS、JS、图像...

标签: php logging yii httprequest


【解决方案1】:

我们使用onBeginRequestonEndRequest 完成了这项工作。在此处查看更多信息:How to use events in Yii

本质上,您将全局请求事件与您自己的类挂钩,然后做任何您想做的事情。

【讨论】:

    【解决方案2】:

    Yii2 中,事件被称为beforeRequestafterRequest (http://www.yiiframework.com/doc-2.0/guide-structure-applications.html)

    例如:

    Yii::$app->on('afterRequest', function($event) {
        //do something...
        //response object is in $event->sender->response
        //response data is in $event->sender->response->data
        //request object is in $event->sender->request
    });
    

    但这是在响应数据被准备成响应内容之前(根据响应格式,例如Response::FORMAT_JSON)所以如果您想要真正的最终响应正文,您需要这样做 (http://www.yiiframework.com/doc-2.0/guide-runtime-responses.html#sending-response):

    Yii::$app->response->on(\yii\web\Response::EVENT_AFTER_SEND, function($event) {  //alternatively use EVENT_AFTER_PREPARE
        //now you can access $event->sender->content and eg. $event->sender->getHeaders()
        //Also, you have access to the request through Yii::$app->request
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-02
      • 2015-12-30
      • 1970-01-01
      • 2018-05-18
      • 2019-10-04
      相关资源
      最近更新 更多