是否可以在异常跟踪中记录参数的整个值?

时间:2009-08-24 20:50:04

标签: php exception

当读取我的错误日志时,我注意到在Exception跟踪中截断了长参数(例如SQL字符串)。这是一个例子:

FR_Model。php(204):FR_Base->查询('INSERT INTO pos ...',数组)

我想要一种简单的方法来回显整个参数,而不必滚动我自己的Exception子类。 TIA。

1 个答案:

答案 0 :(得分:1)

检查您的log_errors_max_len PHP设置。来自php.net

  

log_errors_max_len integer - 可更改:PHP_INI_ALL

     

设置   最大长度log_errors,以字节为单位。   在error_log有关的信息   来源已添加。默认值为1024   0允许不应用任何最大值   长度。应用此长度   记录错误,显示错误和   也是 $php_errormsg

要测试: via this Bogus bug

<?php
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors',0);
ini_set('log_errors',1);
ini_set('log_errors_max_len','0'); //change this value
ini_set('html_errors',0);

function deepTrace($a, $b, $c) {
    if ($c < 50) {deepTrace($a, $b, $c+1);} else {throw new Exception('Example exception that together with the trace is over 1024 bytes.');}
}
deepTrace('example','function',0);
?>

如果将此示例代码中的log_errors_max_len更改为0不起作用,但将其更改为大于1024的数字会产生一些影响,那么您几乎可以肯定在某个地方加载zend_extension PHP的标准行为,例如Zend Optimizer,Zend Debugger,Xdebug等。

尝试grep -r zend_extension /etc/php.*找到正在使用的任何扩展程序;如果找到一条未注释掉的匹配行,那就是你的罪魁祸首。