diff --git a/http.go b/http.go index 84c8678..887a660 100644 --- a/http.go +++ b/http.go @@ -602,11 +602,15 @@ func (h *httpServer) Name() string { func NewServer(opts ...server.Option) *httpServer { options := server.NewOptions(opts...) + eh := DefaultErrorHandler + if v, ok := options.Context.Value(errorHandlerKey{}).(errorHandler); ok && v != nil { + eh = v + } return &httpServer{ opts: options, exit: make(chan chan error), subscribers: make(map[*httpSubscriber][]broker.Subscriber), - errorHandler: DefaultErrorHandler, + errorHandler: eh, pathHandlers: rhttp.NewTrie(), } } diff --git a/options.go b/options.go index 7a2903d..32fdc7b 100644 --- a/options.go +++ b/options.go @@ -68,10 +68,12 @@ func Server(hs *http.Server) server.Option { return server.SetOption(serverKey{}, hs) } +type errorHandler func(ctx context.Context, s server.Handler, w http.ResponseWriter, r *http.Request, err error, status int) + type errorHandlerKey struct{} // ErrorHandler specifies handler for errors -func ErrorHandler(fn func(ctx context.Context, s server.Handler, w http.ResponseWriter, r *http.Request, err error, status int)) server.Option { +func ErrorHandler(fn errorHandler) server.Option { return server.SetOption(errorHandlerKey{}, fn) }