On Sun, 8 Apr 2007 11:13:27 -0400, "Andrei Stebakov" lispercat@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.