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

Php 如何使apache错误日志条目更长,php,apache,stack-trace,error-logging,error-log,Php,Apache,Stack Trace,Error Logging,Error Log,我使用php的“error_log()”将一些相当长的堆栈跟踪发送到apache错误日志,并且条目被截断。我还没有找到一种方法使条目变长。 有什么想法吗 ErrorLog "|bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M" 每当错误日志文件的大小达到5 MB时,此配置将旋转它,并且日志文件名的后缀将以errorlog.YYYY-mm-dd-HH_mm_SS的形式创建 有关更多信息,请阅读apache.org的官方文档,通过erro

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

ErrorLog "|bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M"
每当错误日志文件的大小达到5 MB时,此配置将旋转它,并且日志文件名的后缀将以errorlog.YYYY-mm-dd-HH_mm_SS的形式创建


有关更多信息,请阅读apache.org的官方文档,通过error_log()传递的错误消息的最大长度默认限制为1024字节


阅读上面的问题,我不禁想知道问题是否出在Apache内部。 是的,PHP for Apache中发生的截断将允许甚至超过10000个字符。下面是一个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";
#/usr/bin/perl-w
#
#测试错误日志长度限制
#结果:没有限制
# 
#
严格使用;
使用CGI;
my$query=CGI->new;
打印$query->header;
打印“您已到达”
“cgi-bin/admin/test\u error\u log.pl”
.“\n”;
打印STDERR“这是来自$0的错误消息\n”;
“打印标准”
[以上应为空行]这是一条多行错误消息
这是它的第三行也是最后一行\n“;
打印标准'abcde'x 200#1000个字符
打印标准“\nAbove是'abcde'输出的1000个字符\n”;
打印标准'vwxyz'x 2000#一万字
打印标准“\nBOVE是“vwxyz”输出的10000个字符\n”;
介绍了php.ini中的设置
记录错误\u max\u len

以字节为单位设置日志错误的最大长度。(…)默认值为 1024和0允许不应用任何最大长度

有些人建议您可以通过以下方式进行更改:

ini_set("log_errors_max_len", 2048);
但手册补充道:

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

我正试图找到一个解决办法。如果我这样做,将进行编辑。

作为Leopoldo,在这种情况下设置
log\u errors\u max\u len
似乎非常无用,PHP手册对此进行了明确说明

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

error_log("Long error message...", 3, CUSTOM_LOG_FILE);
error\u log()
的第二个参数允许您将消息重定向到自定义文件。因此,最后一个参数应该是自定义日志文件的路径


通过这种方式,我得到了完整的错误消息,而且,对某些人来说可能更重要的是,非ASCII字符在那里是清晰可读的(虽然不确定,可能是我的错,但当我用标准日志文件记录它们时,我得到了类似于
\xd0\xbf
)的信息。

-1我不确定这是一个公认的答案。这不会阻止截断日志中的单个条目。这实际上会截断长日志,因为它受到操作系统管道长度限制的限制。我对Nginx也有同样的问题。谢谢。我没有看到它们在逻辑上为配置的错误日志文件条目截断消息的逻辑,而不是自定义路径中的逻辑。请考虑更改已接受的答案。