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

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

自从将服务器从 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”中。

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

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

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

编辑:我开始怀疑,只要 CGI 脚本同时向 STDERR 输出多行,即达到某种缓冲区边界,就会出现此问题......只是一个想法。

相关内容