[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