Как мне остановить Apache от вставки нежелательных разрывов строк в свой журнал ошибок? - PullRequest
2 голосов
/ 18 сентября 2010

В моем приложении 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 Ответ

1 голос
/ 18 сентября 2010

Почему бы не использовать, просто используйте Log4Perl вместо?

Можете ли вы привести примеры нежелательных разрывов строк? Вы уверены, что в журнале ошибок действительно есть дополнительные разрывы строк или что-то еще, например, ваш терминал, оборачивает их?

Это звучит подозрительно как буферизованный вывод. Что произойдет, если вы снимите буфер STDERR?

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