开放的编程资料库

当前位置:我爱分享网 > PHP教程 > 正文

通过 Zend Server 进行实时 ZF 监控

密切关注您的ZF应用程序时,通常很难将应用程序错误与一般PHP错误分开,如果您将它们聚集在与Web服务器错误相同的位置,这会变得更加困难。

此外,PHP的错误报告不提供大量上下文,即使在报告未捕获的异常时也是如此—通常您只会收到一条神秘的异常消息,以及发出它的文件和行。

ZendServer的Monitor扩展具有一些提供更多上下文的功能,并且默认情况下会执行其中的大部分操作:记录错误时可用的请求和环境设置、提供的函数名称和参数,以及可供您检查的完整回溯。此外,Monitor扩展包含一个API,允许您触发自定义Monitor事件,并且您可以在执行此操作时提供额外的上下文——例如传递对象或数组,这可能有助于在调试时提供上下文。

为了配合此功能,我们开发了一个新的Zend_Log编写器,Zend_Log_Writer_ZendMonitor,它将发出此类自定义事件。此外,对Zend_LogAPI进行了一些修改,以允许将额外的上下文信息传递给日志编写器。

例如,您可以执行以下操作:

$log = new Zend_Log(new Zend_Log_Writer_ZendMonitor());
$log->crit('Exception occurred processing login', $e);

// or:
$log->crit('Exception occurred processing login', array(
    'request'   => $request, // Request object
    'exception' => $e,       // Exception
));

然后ZendServer的GUI将显示一个选项卡“Custom”,其中包括传递的额外参数;默认情况下,如果只传递一个对象,信息将在键“info”下返回。传递关联数组非常有用,因为它允许您提供详细的上下文信息。

此功能的一个用例是通过ErrorController报告应用程序异常。这可以通过您的ZendServerGUI提供一些很好的反馈;您可以根据“自定义事件”的“规则名称”进行过滤,并进一步根据严重性等标准来确定您的应用程序何时以及为何触发ErrorController—并希望减少此类事件的发生。

我们认为这可能是一个很好的默认用例,并在Zend_Tool中围绕它提供了一些代码生成。ErrorController现在将检查日志资源是否可用,如果可用,则写入它。

为了实现这一点,我们还编写了一个新的Log引导程序资源,它搭载了一些额外的新功能:Zend_Log中的一个新的factory()方法。这允许您从配置创建Zend_Log实例,使用一个或多个编写器和配置的过滤器。通过ErrorController启用ZendMonitor日志记录现在就像在您的配置中添加一行一样简单:

resources.log.zendmonitor.writerName = "ZendMonitor"

注意:您可以记录到任何记录器,如果需要,也可以记录到多个记录器。

如果在您的控制器中,您想要记录其他事件,您可以通过简单地获取引导程序对象然后获取日志资源来实现:

$bootstrap = $this->getInvokeArg('bootstrap')
if ($bootstrap->hasResource('Log')) {
    $log = $bootstrap->getResource('Log');
    $log->info(/* ... */);
}

这种简单的集成为使用ZendServer的ZendFramework用户带来了一些奇妙的好处,而且实现起来非常便宜(当Monitor扩展不存在时,ZendMonitor记录器充当空记录器)。您还能找到哪些其他用途?

注意:此功能现在可通过主干中的ZendFramework颠覆存储库使用。它将在即将发布的1.10版本的稳定版本中提供。

更新:我想指出的是,bootstrap资源是由两个ibuildings贡献者MartinRoest和MarkvanderVelden贡献的,他们贡献的代码使实例化成为可能通过新的factory()方法记录实例。

未经允许不得转载:我爱分享网 » 通过 Zend Server 进行实时 ZF 监控

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏