2013-08-08 1 views
1

В моем приложении perl в настоящее время имеется базовое ведение журнала. Я использую Mod_perl и CGIЗахват определенных внутренних ошибок сервера в Mod_perl

При возникновении ошибки в скрипте пользователь получает страницу с ошибкой внутреннего сервера. Я знаю, что CPAN CGI имеет функцию сообщения об ошибках, но эта функция, похоже, относится к отдельному сценарию. Я хотел бы захватить трассировку стека глобально, а затем сообщить об этом пользователю на веб-странице. так что, когда это происходит, пользователь получает хорошую страницу «что-то не так», а не страницу «Ошибка внутреннего сервера».

ответ

0

Я обработал это красиво, создав скрипт bootstrap.pl. Я перенаправил с mod_rewrite все скрипты в bootstrap.pl и разместил фактический url в качестве параметра. В bootstrap я занимаюсь сессиями, протоколированием и т. Д., И в конце я вызываю eval ('script from url'). Наиболее интересным для вас является обработка ошибок:

use ex::override GLOBAL_die => sub { 
    my $stackTrace = Devel::StackTrace->new(no_refs => 1)->as_string; 
    if ($stackTrace =~ /eval \{/) { 
      CORE::die @_; 
    } else { 
      local *__ANON__ = "Exception"; 
      select STDOUT; 
      print getError500(sprintf(
            join("\n",<DATA>), 
            @_, 
            $stackTrace, 
            Dumper(\%ENV) 
      )); 
      CORE::exit 1; 
    } 

};

Это переписывание штампа и печать хорошей страницы с ошибкой 500 с полным стеком на исключение. Я пробовал много вещей, и это выглядит как лучший подход для меня.

 Смежные вопросы

  • Нет связанных вопросов^_^