9

我正在使用 php 的“error_log()”向 apache 错误日志发送一些相当长的堆栈跟踪,并且条目被截断。我还没有找到使条目更长的方法。有任何想法吗?

4

5 回答 5

7

通过 error_log() 的错误消息的最大长度的默认限制是 1024 字节。

详细信息有http://www.php.net/manual/en/errorfunc.configuration.php#ini.log-errors-max-len

于 2012-06-13T19:15:44.523 回答
5

正如 Leopoldo所说,在这种情况下设置log_errors_max_len似乎毫无用处,PHP 手册清楚地说明了这一点。

到目前为止,我能找到的唯一解决方案是使用:

error_log("Long error message...", 3, CUSTOM_LOG_FILE);

的第二个参数error_log()允许您将消息重定向到自定义文件。因此,最后一个参数应该是自定义日志文件的路径。

这样我就会收到完整的错误消息,而且对某人来说可能更重要的是,非 ASCII 字符在那里清晰可读(虽然不确定,可能是我的错,但是当我用标准日志文件记录它们时 - 我得到了之类的东西\xd0\xbf)。

于 2017-04-07T15:04:16.080 回答
2

PHP 手册介绍了log_errors_max_lenphp.ini的设置:

以字节为单位设置 log_errors 的最大长度。(...) 默认值为 1024,0 允许根本不应用任何最大长度。

有些人建议您可以更改它,例如:

ini_set("log_errors_max_len", 2048);

但手册补充说:

此长度应用于记录的错误、显示的错误以及 $php_errormsg,但不适用于显式调用的函数,例如 error_log()

我正在努力寻找解决方案。如果我这样做会编辑。

于 2017-01-09T19:48:35.947 回答
0

阅读上面的问题让我想知道问题是否在 Apache 内部。是的,在 PHP for Apache 中发生的截断甚至允许超过 10,000 个字符。这是一个评估 Apache 将长错误消息发布到其日志中的能力的 Perl 脚本:

#!/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";
于 2014-12-03T21:48:09.050 回答
-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的官方文档

于 2012-06-13T19:13:59.753 回答