mirror of
				https://github.com/caddyserver/caddy.git
				synced 2025-10-30 18:22:49 -04:00 
			
		
		
		
	log: Customizable default error function
This commit is contained in:
		
							parent
							
								
									92391bfdf9
								
							
						
					
					
						commit
						c811d416a7
					
				| @ -6,6 +6,7 @@ import ( | ||||
| 
 | ||||
| 	"github.com/mholt/caddy/middleware" | ||||
| 	caddylog "github.com/mholt/caddy/middleware/log" | ||||
| 	"github.com/mholt/caddy/server" | ||||
| ) | ||||
| 
 | ||||
| // Log sets up the logging middleware. | ||||
| @ -39,7 +40,7 @@ func Log(c *Controller) (middleware.Middleware, error) { | ||||
| 	}) | ||||
| 
 | ||||
| 	return func(next middleware.Handler) middleware.Handler { | ||||
| 		return caddylog.Logger{Next: next, Rules: rules} | ||||
| 		return caddylog.Logger{Next: next, Rules: rules, ErrorFunc: server.DefaultErrorFunc} | ||||
| 	}, nil | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -11,8 +11,9 @@ import ( | ||||
| 
 | ||||
| // Logger is a basic request logging middleware. | ||||
| type Logger struct { | ||||
| 	Next  middleware.Handler | ||||
| 	Rules []Rule | ||||
| 	Next      middleware.Handler | ||||
| 	Rules     []Rule | ||||
| 	ErrorFunc func(http.ResponseWriter, *http.Request, int) // failover error handler | ||||
| } | ||||
| 
 | ||||
| func (l Logger) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error) { | ||||
| @ -21,8 +22,15 @@ func (l Logger) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error) { | ||||
| 			responseRecorder := middleware.NewResponseRecorder(w) | ||||
| 			status, err := l.Next.ServeHTTP(responseRecorder, r) | ||||
| 			if status >= 400 { | ||||
| 				responseRecorder.WriteHeader(status) | ||||
| 				fmt.Fprintf(responseRecorder, "%d %s", status, http.StatusText(status)) | ||||
| 				// There was an error up the chain, but no response has been written yet. | ||||
| 				// The error must be handled here so the log entry will record the response size. | ||||
| 				if l.ErrorFunc != nil { | ||||
| 					l.ErrorFunc(responseRecorder, r, status) | ||||
| 				} else { | ||||
| 					// Default failover error handler | ||||
| 					responseRecorder.WriteHeader(status) | ||||
| 					fmt.Fprintf(responseRecorder, "%d %s", status, http.StatusText(status)) | ||||
| 				} | ||||
| 				status = 0 | ||||
| 			} | ||||
| 			rep := middleware.NewReplacer(r, responseRecorder) | ||||
|  | ||||
| @ -221,11 +221,15 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { | ||||
| 
 | ||||
| 		// Fallback error response in case error handling wasn't chained in | ||||
| 		if status >= 400 { | ||||
| 			w.WriteHeader(status) | ||||
| 			fmt.Fprintf(w, "%d %s", status, http.StatusText(status)) | ||||
| 			DefaultErrorFunc(w, r, status) | ||||
| 		} | ||||
| 	} else { | ||||
| 		w.WriteHeader(http.StatusNotFound) | ||||
| 		fmt.Fprintf(w, "No such host at %s", s.address) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func DefaultErrorFunc(w http.ResponseWriter, r *http.Request, status int) { | ||||
| 	w.WriteHeader(status) | ||||
| 	fmt.Fprintf(w, "%d %s", status, http.StatusText(status)) | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user