如何阻止Apache在其错误日志中插入不需要的换行符?

时间:2010-09-18 02:18:36

标签: perl apache fastcgi

我的Perl / FastCGI应用广泛使用“print STDERR”将各种调试信息记录到Apache错误日志文件中。

我自己插入了频繁的换行符,但是Apache(或者也许是FastCGI?)仍然觉得需要插入额外的换行符,通常是在格式良好的输出中间。

如何阻止这种情况发生?

以下是一个例子:

[Sun Sep 19 12:51:49 2010] [warn] mod_fcgid: stderr: request OK: client / index :0.035902 wallclock secs ( 0.030 usr  0.000 sys +  0.000 cusr  0.000 csys =  0.030 CPU)
[Sun Sep 19 12:51:52 2010] [warn] mod_fcgid: stderr: REQUEST pid:3569   ctr:4   time: 15   path:/client/index
[Sun Sep 19 12:51:52 2010] [warn] mod_fcgid: stderr: REQUEST: /client/index   log: 9473
[Sun Sep 19 12:51:52 2010] [warn] mod_fcgid: stderr: 1--45678901234567890123456789012345678901234567890
[Sun Sep 19 12:51:52 2010] [warn] mod_fcgid: stderr: 2--45678901234567890123456789012345678901234567890
[Sun Sep 19 12:51:52 2010] [warn] mod_fcgid: stderr: 3--45678901234567890123456789012345678901234567890
[Sun Sep 19 12:51:52 2010] [warn] mod_fcgid: stderr: 4--45678901234567890123456789012345678901234567890
[Sun Sep 19 12:51:52 2010] [warn] mod_fcgid: stderr: 5--45678901234567890123456789012345678901234567890
[Sun Sep 19 12:51:52 2010] [warn] mod_fcgid: stderr: 6--45678901234567890123456789012345678901234567890
[Sun Sep 19 12:51:52 2010] [warn] mod_fcgid: stderr: 7--45678901234567890123456789012345678901234567890
[Sun Sep 19 12:51:52 2010] [warn] mod_fcgid: stderr: 8--45678901234567890123456789012345678901234567890
[Sun Sep 19 12:51:52 2010] [warn] mod_fcgid: stderr: 9--4
[Sun Sep 19 12:51:52 2010] [warn] mod_fcgid: stderr: 5678901234567890123456789012345678901234567890
[Sun Sep 19 12:51:52 2010] [warn] mod_fcgid: stderr: 10-45678901234567890123456789012345678901234567890
[Sun Sep 19 12:51:52 2010] [warn] mod_fcgid: stderr: 11-45678901234567890123456789012345678901234567890
[Sun Sep 19 12:51:52 2010] [warn] mod_fcgid: stderr: 12-45678901234567890123456789012345678901234567890
[Sun Sep 19 12:51:52 2010] [warn] mod_fcgid: stderr: 13-45678901234567890123456789012345678901234567890
[Sun Sep 19 12:51:52 2010] [warn] mod_fcgid: stderr: 14-45678901234567890123456789012345678901234567890
[Sun Sep 19 12:51:52 2010] [warn] mod_fcgid: stderr: 15-45678901234567890123456789012345678901234567890
[Sun Sep 19 12:51:52 2010] [warn] mod_fcgid: stderr: 16-45678901234567890123456789012345678901234567890
[Sun Sep 19 12:51:52 2010] [warn] mod_fcgid: stderr: 17-45678901234567890123456789012345678901234567890
[Sun Sep 19 12:51:52 2010] [warn] mod_fcgid: stderr: 18-4567890123456789012345678901234567890123456789
[Sun Sep 19 12:51:52 2010] [warn] mod_fcgid: stderr: 0

每行应包含51个字符,包括\ n,并且不包括apache的前导码。每一行都在它自己的print()调用中输出,所以它不是一次性转储大量文本的结果。

似乎每504个字符发生一次,从每个FastCGI请求的开头开始。如果我连续一堆请求打印的信息非常少,我就不会看到换行符了。

1 个答案:

答案 0 :(得分:1)

为什么不使用Log4Perl代替?

您能举一些不需要的换行符吗?你确定错误日志确实有额外的换行符,或者是其他东西,比如你的终端,包装它们吗?

这听起来很像缓冲输出。如果你解压缩STDERR会怎么样?

 {
 my $old = select(STDERR);
 $|++;
 select( $old );
 }