CGI警告中的随机换行写入到Apache错误日志中

由于将服务器从Debian 7.8升级到8.2(64位),Apache升级(到2.4.10)引入了一个非常奇怪的错误:error_log中的随机换行符。

例:

[Mon Nov 16 13:29:54.388526 2015] [cgi:error] [pid 9122] [client xx.xx.xx.xx:1865] AH01215: (Fred, Test) Warning: foo.cgi/Foo.pm::foo():115 "Argument "test" isn't numeric i, referer: http://… [Mon Nov 16 13:29:54.390770 2015] [cgi:error] [pid 9122] [client xx.xx.xx.xx:1865] AH01215: n numeric eq (==)" [GET http://…], referer: http://… 

在这里,CGI警告已经被分解为“in”这个词。

添加换行符的行内的位置是随机的,并将效果应用于随机行。 看到连续出现同一错误的几个实例(例如循环内发生的错误)是非常正常的,只有其中一行受随机行中断影响。

通过“说STDERR sprintf(…)”的方式将文本写入错误日志,这完全没有发生在以前版本的Debian / Apache / Perl(目前是Apache 2.4和Perl 5.20.2)中。

我是世界上唯一遇到这种奇怪现象的人吗? 🙂

编辑:我开始怀疑,每当多个行从CGI脚本输出到STDERR,即某种缓冲区边界被打…只是一个想法,问题发生。