[hunchentoot-devel] Processing an error outside the Hunchentoot code
Edi Weitz
edi at agharta.de
Sun Apr 8 19:42:17 UTC 2007
On Sun, 8 Apr 2007 11:13:27 -0400, "Andrei Stebakov" <lispercat at gmail.com> wrote:
> What's the best to add my own error handler? I see there is some
> processing based on *SHOW-LISP-ERRORS-P* *SHOW-LISP-BACKTRACES-P*
> inside process-request function, but it doesn't allow to add a user
> handler of the error (or I just didn't find it). Let's say I don't
> want a user to see the error (only some nice reassuring message :))
> and I want to be notified by an email with the backtrace. Should I
> go and modify the body of the process-request function (which I'll
> need to merge with every new release of HT) or is there a way to add
> my own handler outside of the Hunchentoot code?
If you just don't want to show Hunchentoot's error messages, you can
use this one
http://weitz.de/hunchentoot/#*http-error-handler*
and the related variables.
If you want complete control, write an around method for
DISPATCH-REQUEST
http://weitz.de/hunchentoot/#dispatch-request
like for example this one:
CL-USER 3 > (defun inversion-handler ()
(format nil "Result: ~A"
(/ 1 (ignore-errors
(parse-integer
(tbnl:parameter "input"))))))
INVERSION-HANDLER
CL-USER 4 > (compile *)
INVERSION-HANDLER
NIL
NIL
CL-USER 5 > (setq tbnl:*default-handler* **)
INVERSION-HANDLER
CL-USER 6 > (defmethod tbnl:dispatch-request :around (dispatch-table)
(handler-case
(call-next-method)
(arithmetic-error ()
"Oops, I can't compute that...")))
#<STANDARD-METHOD HUNCHENTOOT:DISPATCH-REQUEST (:AROUND) (T) 21DC78DB>
CL-USER 7 > (tbnl:start-server :port 4242)
#<HUNCHENTOOT::SERVER 21E1BD77>
Etc.
Cheers,
Edi.
More information about the Tbnl-devel
mailing list