Php 如何在Phalcon中跟踪API调用

Php 如何在Phalcon中跟踪API调用,php,api,phalcon,Php,Api,Phalcon,我需要跟踪Phalcon中不同用户调用的API,并将用户的IP地址插入日志文件。如何在Phalcon中实现这一点?我假设您使用的是MVC 更好的方法是创建一个ControllerBase,扩展所有控制器。然后添加一个名为“onConstruct”的方法,以便在执行所有控制器之前执行任何操作,如下所示: <?php namespace MyProject\Api\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Http\Respo

我需要跟踪Phalcon中不同用户调用的API,并将用户的IP地址插入日志文件。如何在Phalcon中实现这一点?

我假设您使用的是MVC

更好的方法是创建一个ControllerBase,扩展所有控制器。然后添加一个名为“onConstruct”的方法,以便在执行所有控制器之前执行任何操作,如下所示:

<?php

namespace MyProject\Api\Controllers;

use Phalcon\Mvc\Controller;
use Phalcon\Http\Response;
use Phalcon\Logger\Adapter\File;

class ControllerBase extends Controller {

    public function onConstruct(){
        // here is your code
    }

}
我在构造中添加了这一点,但您可以创建一个方法来实现这一点,用于在应用程序中的所有操作中保存日志。有一种很好的方法可以做到这一点,即创建一个模型或一个帮助器类,并处理以下日志:

$log = new \Logger();
$log->setMessage("You are doing some request in my API, funny");
$log->save();

Phalcon有一个专门用于记录的类,将其与路由事件相结合,您可以优雅地记录用户的活动。在控制器中(我建议使用ControllerBase进行查找,因为它将记录请求资源的用户的所有实例):


您最好在ExecuteRoute之前使用
调度程序
。还可以创建自定义侦听器作为其中事件的类。此外,您仍然可以从以静态方式调用它的di容器获取请求(以及ip、params、post、json等)


至少提供您已经做过的研究的参考资料和您已经尝试过的代码。这太广泛了。Phalcon提供了日志类。你查过文件了吗?但是您必须编写自己的代码来处理日志记录。@JohnSk如果这是您问题的答案,请接受它
$log = new \Logger();
$log->setMessage("You are doing some request in my API, funny");
$log->save();
use Phalcon\Events\Event;
use Phalcon\Mvc\Controller;
use Phalcon\Mvc\Dispatcher;
use Phalcon\Logger\Adapter\File as FileAdapter;

class ControllerBase extends Controller
{
    /**
     * Executed after every found action is executed
     * Logs all requests to controllers
     *
     * @param \Phalcon\Events\Event $event
     * @param \Phalcon\Mvc\Dispatcher $dispatcher
     * @return void
     */
    public function afterExecuteRoute(Event $event, Dispatcher $dispatcher)
    {
        // Set up a logger instance
        $logger = new FileAdapter("app/logs/request.log");

        // Log the message
        $logger->info(sprintf("Client %s executed %s::%s on route %s", 
            $this->request->getClientAddress(),
            $dispatcher->getControllerName(),
            $dispatcher->getActionName(),
            $this->request->getURI()
        ));

        // Save the log 
        $logger->save();
    }
}