我可以使用Zend_Log来处理PHP错误吗?

时间:2010-02-03 09:07:00

标签: php zend-framework error-logging

我正在使用Zend开发一个Web服务,更具体地说,我是Zend_Amf,用于与Adobe Flex互操作。这个问题是我无法轻易看到PHP错误,因为Flex调试器不会显示来自服务器的实际答案,除非它们是正确的Amf。如果我使用Web浏览器访问Zend_Amf端点,我不会收到任何错误,因此错误是在执行Amf处理程序时。现在我正在使用firebug检查HTTP流量以查看任何错误。

对我的问题:我可以使用日志实用程序(如Zend_Log)将所有PHP错误,警告和通知记录到文件中,而不是(或除了)在HTTP响应中发送它们吗?

2 个答案:

答案 0 :(得分:2)

您可以使用set_error_handler来捕获PHP错误,并使用Zend_Log根据需要记录它们。

这个函数唯一的问题是它不会捕获所有PHP错误,因此无法捕获语法错误等错误....

另一种方法是使用register_shutdown_function功能

像这样:

error_reporting(E_ALL);
    ini_set('display_errors', 0);

    function shutdown(){
        $isError = false;
        if ($error = error_get_last()){
            switch($error['type']){
                case E_ERROR:
                case E_CORE_ERROR:
                case E_COMPILE_ERROR:
                case E_USER_ERROR:
                    $isError = true;
                    break;
            }
        }

        if ($isError){
            echo "Script execution halted ({$error['message']})";
        } else {
            echo "Script completed";
        }
    }

    register_shutdown_function('shutdown');

值得注意的是,即使将两种方法结合起来也不会捕获所有错误,例如语法错误....但是你可以使用普通浏览器看到这种错误。

答案 1 :(得分:0)

我不确定我的解决方案是否会对您有所帮助。但是如果您的应用程序因为抛出异常而终止并且触发了默认的errorController。那么您可能需要查看http://blog.elinkmedia.net.au/2009/10/23/application-logging-with-zend_log/

我在引导期间基本上注册了一个记录器实例,并用它来记录错误控制器中的错误。