代码之家  ›  专栏  ›  技术社区  ›  Markus Johnsson

我可以使用zend_日志来处理php错误吗?

  •  4
  • Markus Johnsson  · 技术社区  · 15 年前

    我正在使用zend开发一个web服务,更具体地说,我是zend_amf,用于与adobe flex的互操作。问题是,我不容易看到php错误,因为flex调试器不会显示来自服务器的实际答案,除非它们是正确的amf。如果我使用web浏览器访问zend_amf端点,我不会得到任何错误,因此错误是在执行amf处理程序时发生的。现在,我正在使用firebug检查http流量以查看任何错误。

    我的问题是:我是否可以使用一个日志实用程序(如zend_log)将所有php错误、警告和通知记录到一个文件中,而不是(或除此之外)在http响应中发送它们?

    2 回复  |  直到 15 年前
        1
  •  2
  •   RageZ    15 年前

    你可以使用 set_error_handler 要捕获php错误,请使用zend_日志记录它们。

    这个函数唯一的问题是它不能捕获所有的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');
    

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

        2
  •  0
  •   Jim Li    15 年前

    我不确定我的解决方案是否对你有帮助。但是,如果应用程序因抛出异常而终止,则会触发默认的errorcontroller。那你可能想看看 http://blog.elinkmedia.net.au/2009/10/23/application-logging-with-zend_log/

    我基本上在引导过程中注册了一个logger实例,并使用它在错误控制器中记录错误。