如何使 apache 错误日志条目更长


How to make apache error log entries longer

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

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

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

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

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

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

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

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

PHP手册说了php.ini中log_errors_max_len的设置:

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

有些人建议你可以改变它,例如:

ini_set("log_errors_max_len", 2048);

但手册补充说:

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

我正在尝试找到解决方案。如果我这样做,将进行编辑。

阅读上面的问题让我怀疑问题是否出在 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";
ErrorLog "|bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M"

此配置将在错误日志文件大小达到 5 MB 时轮换错误日志文件,并且日志文件名称的后缀将以 errorlog 的形式创建。年-月-日-HH_MM_SS。

欲了解更多信息,请阅读官方文档 apache.org 链接 这里