【问题标题】:getTraceAsString() printing out as one whole linegetTraceAsString() 打印为一整行
【发布时间】:2025-12-14 05:30:01
【问题描述】:

我正在使用 php 方法 getTraceAsString(),它会打印出我的错误消息,例如:

#0 /var/www/wordpress/wp-content/themes/Aisis-Framework/AisisCore/Template/Builder.php(147): AisisCore_Template_Builder->_render_template_array(Array, 'navigation') #1 /var/www/wordpress/wp-content/themes/Aisis-Framework/index.php(3): AisisCore_Template_Builder->render_view('navigation') #2 /var/www/wordpress/wp-includes/template-loader.php(47): include('/var/www/wordpr...') #3 /var/www/wordpress/wp-blog-header.php(16): require_once('/var/www/wordpr...') #4 /var/www/wordpress/index.php(17): require('/var/www/wordpr...') #5 {main}

如您所见,是一根巨大的绳子。他们给出的示例将跟踪打印为单独的行。有什么我必须做的吗?

【问题讨论】:

    标签: php string exception stack-trace


    【解决方案1】:

    这是一个带换行符的字符串,而不是 HTML。查看页面的源代码。

    要么将输出包装在<pre></pre> 标记中,要么将换行符替换为 HTML 换行符。

    preg_replace("/\n/", '<br>', $trace);
    

    【讨论】:

    • preg_replace() 太过分了,只需使用 nl2br()
    • preg_replace() 非常适合进一步设置列表等输出样式。
    【解决方案2】:

    我已经为 ZF2 错误日志制作了一些功能,以及格式化, $e->getTraceAsString();

    希望这对你有帮助。

    public function Errorcatch(\Exception $e) {
            $log = "<div class='error_main'>";
                $log.= "<br /><b>Error Time :</b>" . date('Y-m-d H:i:s A');
                $log.= "<br /><b>Error Code :</b>" . $e->getCode();
                $log.= "<br /><b>Error Message :</b>" . $e->getMessage();
                $log.="<br /><b>Error File :</b>" . $e->getFile();
                $log.="<br /><b>Error File Line :</b>" . $e->getLine();
                 $log.="<br /><b>Error Trace :</b><br />" . preg_replace("/\n/", '<br>', $e->getTraceAsString());
            $log.= "</div>";
            $this->getServiceLocator()->get('Zend\Log')->info($log); // This line write the log file.
        }
    

    【讨论】: