Перенаправление сообщений об ошибках
Проблема
У вас возникли трудности с отслеживанием предупреждений и ошибок вашего сценария,
или вывод в STDERR из сценария приводит сервер в замешательство.
Решение
Воспользуйтесь модулем CGI::Carp из стандартной поставки Perl, чтобы все сообщения,
направляемые в STDERR, снабжались префиксом — именем приложения и текущей датой. При желании
предупреждения и ошибки также можно сохранять в файле или передавать броузеру.
Комментарий
Задача отслеживания сообщений в сценариях CGI пользуется дурной славой. Даже если вам
удалось найти на сервере журнал ошибок, вы все равно не сможете определить, когда и от какого
сценария поступило то или иное сообщение. Некоторые недружелюбные Web-серверы даже прерывают
работу сценария, если он неосторожно выдал в STDERR какие-нибудь данные до генерации заголовка
Content-Type — а это означает, что флаг -w может навлечь беду.
На сцене появляется модуль CGI::Carp. Он замещает warn и die, а также функции carp,
croak и confess обычного модуля Carp более надежными и содержательными версиями. При этом
данные по-прежнему отсылаются в журнал ошибок сервера.
use CGI::Carp;
warn "This is a complaint";
die "But this one is serious";
В следующем примере использования CGI::Carp ошибки перенаправляются в файл по вашему
выбору. Все это происходит в блоке BEGIN, что позволяет перехватывать предупреждения
на стадии компиляции:
BEGIN {
use CGI::Carp qw(carpout);
open (LOG, ">>/var/local/cgi-logs/mycgi-log")
or die "Unable to append to mycgi-log: $!\n";
carpout(*LOG);
}
Фатальные ошибки могут даже возвращаться клиентскому броузеру – это удобно при отладке,
но может смутить рядового пользователя.
use CGI::Carp qw(fatalsToBrowser);
die "Bad error here";
Даже если ошибка произойдет до вывода заголовка HTTP, модуль попытается избежать
ужасной ошибки 500 Server Error. Нормальные предупреждения по-прежнему направляются
в журнал ошибок сервера (или туда, куда вы отправили их функцией carpout) с префиксом из
имени приложения и текущего времени.
См. также
Proverte kod v komentariyah gde pro list tam oshibki detskie
Оставить комментарий:
|
|