Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > Вопрос по FCGI


Автор: JamesMorgan 26.7.2011, 11:18
Приветствую, работаю с FCGI, и столкнулся с непонятной проблемой, дело в том что я не могу правильно передать дескриптор STDERR, что бы он записывал логи ошибок в файл:

Код

...
my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV, $socket, ($debug ? FCGI::FAIL_ACCEPT_ON_INTR : ()));
...


Перенаправляю дескриптор в файл выше строчки, и передаю его:

Код

open(STDERR,">>$Config::fcgi_log_file") or die "$!";
.....
my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV, $socket, ($debug ? FCGI::FAIL_ACCEPT_ON_INTR : ()));


Код отказывается работать, точнее не пишет в файл ошибки, но если передать в место STDERR пустой дескриптор скажем TEST то тогда STDEER пишет лог в нужный файл.

Код

open(STDERR,">>$Config::fcgi_log_file") or die "$!";
.....
my $request = FCGI::Request(\*STDIN, \*STDOUT, \*TEST, \%ENV, $socket, ($debug ? FCGI::FAIL_ACCEPT_ON_INTR : ()));


Вот так он пишет логи, кто сталкивался с этим, поясните почему так происходит? может есть нормальное решение?

Автор: afiskon 26.7.2011, 12:37
1. А зачем вам открывать файл так, чтобы ему соответствовал именно дескриптор STDERR? Уверены, что это необходимо?
2. Попробуйте
Код

open STDERR, ">&TEST";

3. В коде FCGI::Request() точно нет проверок аргументов каких-то хитрых?

Автор: JamesMorgan 26.7.2011, 12:47
Сработало, спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)