我正在使用php的'error_log()'向apache错误日志发送一些相当长的堆栈跟踪,并且条目被截断。我还没有办法让条目更长。 有什么想法吗?
答案 0 :(得分:8)
通过error_log()的错误消息的最大长度的默认限制是1024字节。
详细信息http://www.php.net/manual/en/errorfunc.configuration.php#ini.log-errors-max-len
答案 1 :(得分:3)
作为Leopoldo said,在这种情况下设置log_errors_max_len
似乎毫无用处,PHP手册明确说明了这一点。
到目前为止,我能找到的唯一解决方案是使用:
error_log("Long error message...", 3, CUSTOM_LOG_FILE);
error_log()
的第二个参数允许您将邮件重定向到自定义文件。因此,最后一个参数应该是自定义日志文件的路径。
这样我就会收到完整的错误消息,对于某些人来说可能更重要的是,非ASCII字符在那里清晰可读(但不确定,可能是我的坏,但是当我用标准日志文件记录它们时 - 我得到像\xd0\xbf
)这样的东西。
答案 2 :(得分:1)
PHP Manual说明 php.ini 中的设置log_errors_max_len
:
设置log_errors的最大长度(以字节为单位)。 (...)默认是 1024和0允许不应用任何最大长度。
有人建议您可以更改它,例如:
ini_set("log_errors_max_len", 2048);
但手册补充道:
此长度适用于记录的错误,显示的错误以及 $ php_errormsg,但不要显式调用诸如的函数 error_log中()强>
我正在努力寻找解决方案。如果我这样做会编辑。
答案 3 :(得分:0)
阅读上面的问题让我想知道问题是否在Apache内部。 是的,截断发生在PHP中,因为Apache将允许甚至超过10,000个字符。这是一个Perl脚本,用于评估Apache将长错误消息发布到其日志中的能力:
#!/usr/bin/perl -w
#
# Test error log length limitations
# Result: no limitation
#
#
use strict;
use CGI;
my $query = CGI->new;
print $query->header;
print "<html><body>You have reached "
."cgi-bin/admin/test_error_log.pl"
."</body></html>\n";
print STDERR "This is an error message from $0\n";
print STDERR "
[Above should be a blank line] here is a multiline error message
here is the third and final line of it\n";
print STDERR 'abcde' x 200; #1,000 characters
print STDERR "\nAbove is 1,000 characters of output of 'abcde'\n";
print STDERR 'vwxyz' x 2000; #10,000 characters
print STDERR "\nAbove is 10,000 characters of output of 'vwxyz'\n";
答案 4 :(得分:-3)
ErrorLog "|bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M"
此配置将在错误日志文件达到5兆字节大小时轮换错误日志文件,并且将创建日志文件名称的后缀,格式为errorlog.YYYY-mm-dd-HH_MM_SS。
有关apache.org Link Here
的更多阅读官方文档