error_log() do not take log_errors_max_len value



在 Apache 中运行的 PHP 5.5 Web 应用程序在使用 error_log() 登录时不采用 log_errors_max_len 的值。如果消息长度太大,则无论将log_errors_max_len的值设置为 (0, 1024, 10000, ...) 如何,输出始终以相同的长度进行修整。

我已经运行了以下脚本(通过浏览器),/var/log/apache2/error.log的输出是一个 8107 个字符的字符串。为log_errors_max_len显示的值始终是用 ini_set('log_errors_max_len', XXXX); 设置的正确值。

<?php
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors',1);
ini_set('log_errors',1);
ini_set('log_errors_max_len',2000);
$msg = '';
$msg2 = '';
for ($i = 0; $i < 1000; $i++) {
    $msg2 = $i.'_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
    $msg = $msg.substr($msg2, 0, 100);
}
error_log(print_r($msg, true), 0);
error_log(ini_get('log_errors_max_len'), 0);
?>

另一方面,在 CLI 中运行并记录到 stderr 的相同脚本会显示整个未修剪的字符串,无论 log_erros_max_len 的值有多小。

按照此参考PHP错误日志忽略log_errors_max_len设置 我在PHP中获得了状态为"非错误"且没有更多相关信息的错误报告。


乌班图14.04

阿帕奇 2.4.7

PHP 5.5.9

我在使用Nginx而不是Apache时遇到了同样的问题,以及相同的Ubuntu和PHP版本。翻阅PHP文档,我发现log_errors_max_len设置不会影响error_log()函数,当然也无事可做。

最新更新