From 95def8a439e4037c45046486424b33127c3b0d2c Mon Sep 17 00:00:00 2001 From: Scott Walters Date: Sun, 22 May 2011 15:23:25 -0400 Subject: [PATCH] Perl run-time errors get kicked over to session->log->error, and WebGUI::Middleware::StackTrace now intercepts errors as well as fatals (since fatals are likely going away). --- lib/WebGUI.pm | 2 ++ lib/WebGUI/Middleware/StackTrace.pm | 12 +++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/WebGUI.pm b/lib/WebGUI.pm index 749076250..6e15474ef 100644 --- a/lib/WebGUI.pm +++ b/lib/WebGUI.pm @@ -155,6 +155,8 @@ sub handle { # } # ); # return; + + local $SIG{__DIE__} = sub { $session->log->error(@_); die @_; }; # Look for the template preview HTTP headers WebGUI::Asset::Template->processVariableHeaders($session); diff --git a/lib/WebGUI/Middleware/StackTrace.pm b/lib/WebGUI/Middleware/StackTrace.pm index 9c207106f..c71f5cb9a 100644 --- a/lib/WebGUI/Middleware/StackTrace.pm +++ b/lib/WebGUI/Middleware/StackTrace.pm @@ -20,9 +20,10 @@ BEGIN { $StackTraceClass = "Devel::StackTrace::WithLexicals"; } - my $old_fatal = *WebGUI::Session::Log::fatal{CODE}; no warnings 'redefine'; + my $old_fatal = *WebGUI::Session::Log::fatal{CODE}; + *WebGUI::Session::Log::fatal = sub { my $self = shift; my $message = shift; @@ -30,6 +31,15 @@ BEGIN { $old_fatal->($self, $message, @_); }; + my $old_error = *WebGUI::Session::Log::error{CODE}; + + *WebGUI::Session::Log::error = sub { + my $self = shift; + my $message = shift; + $self->{_stacktrace} = $StackTraceClass->new; + $old_error->($self, $message, @_); + }; + } sub call {