forked from gitea/gitea
		
	Fix log http status is always zero (#14400)
* Fix log http status is always zero * Fix lint Co-authored-by: 6543 <6543@obermui.de>
This commit is contained in:
		
							parent
							
								
									41e19b93a2
								
							
						
					
					
						commit
						135b0e502d
					
				
							
								
								
									
										62
									
								
								modules/context/response.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								modules/context/response.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,62 @@ | ||||
| // Copyright 2021 The Gitea Authors. All rights reserved. | ||||
| // Use of this source code is governed by a MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| package context | ||||
| 
 | ||||
| import "net/http" | ||||
| 
 | ||||
| // ResponseWriter represents a response writer for HTTP | ||||
| type ResponseWriter interface { | ||||
| 	http.ResponseWriter | ||||
| 	Flush() | ||||
| 	Status() int | ||||
| } | ||||
| 
 | ||||
| var ( | ||||
| 	_ ResponseWriter = &Response{} | ||||
| ) | ||||
| 
 | ||||
| // Response represents a response | ||||
| type Response struct { | ||||
| 	http.ResponseWriter | ||||
| 	status int | ||||
| } | ||||
| 
 | ||||
| // Write writes bytes to HTTP endpoint | ||||
| func (r *Response) Write(bs []byte) (int, error) { | ||||
| 	size, err := r.ResponseWriter.Write(bs) | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 	if r.status == 0 { | ||||
| 		r.WriteHeader(200) | ||||
| 	} | ||||
| 	return size, nil | ||||
| } | ||||
| 
 | ||||
| // WriteHeader write status code | ||||
| func (r *Response) WriteHeader(statusCode int) { | ||||
| 	r.status = statusCode | ||||
| 	r.ResponseWriter.WriteHeader(statusCode) | ||||
| } | ||||
| 
 | ||||
| // Flush flush cached data | ||||
| func (r *Response) Flush() { | ||||
| 	if f, ok := r.ResponseWriter.(http.Flusher); ok { | ||||
| 		f.Flush() | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // Status returned status code written | ||||
| func (r *Response) Status() int { | ||||
| 	return r.status | ||||
| } | ||||
| 
 | ||||
| // NewResponse creates a response | ||||
| func NewResponse(resp http.ResponseWriter) *Response { | ||||
| 	if v, ok := resp.(*Response); ok { | ||||
| 		return v | ||||
| 	} | ||||
| 	return &Response{resp, 0} | ||||
| } | ||||
| @ -16,6 +16,7 @@ import ( | ||||
| 	"text/template" | ||||
| 	"time" | ||||
| 
 | ||||
| 	"code.gitea.io/gitea/modules/context" | ||||
| 	"code.gitea.io/gitea/modules/httpcache" | ||||
| 	"code.gitea.io/gitea/modules/log" | ||||
| 	"code.gitea.io/gitea/modules/metrics" | ||||
| @ -90,9 +91,11 @@ func LoggerHandler(level log.Level) func(next http.Handler) http.Handler { | ||||
| 
 | ||||
| 			next.ServeHTTP(w, req) | ||||
| 
 | ||||
| 			ww := middleware.NewWrapResponseWriter(w, req.ProtoMajor) | ||||
| 			var status int | ||||
| 			if v, ok := w.(context.ResponseWriter); ok { | ||||
| 				status = v.Status() | ||||
| 			} | ||||
| 
 | ||||
| 			status := ww.Status() | ||||
| 			_ = log.GetLogger("router").Log(0, level, "Completed %s %s %v %s in %v", log.ColoredMethod(req.Method), req.URL.RequestURI(), log.ColoredStatus(status), log.ColoredStatus(status, http.StatusText(status)), log.ColoredTime(time.Since(start))) | ||||
| 		}) | ||||
| 	} | ||||
| @ -183,6 +186,11 @@ var ( | ||||
| // NewChi creates a chi Router | ||||
| func NewChi() chi.Router { | ||||
| 	c := chi.NewRouter() | ||||
| 	c.Use(func(next http.Handler) http.Handler { | ||||
| 		return http.HandlerFunc(func(resp http.ResponseWriter, req *http.Request) { | ||||
| 			next.ServeHTTP(context.NewResponse(resp), req) | ||||
| 		}) | ||||
| 	}) | ||||
| 	c.Use(middleware.RealIP) | ||||
| 	if !setting.DisableRouterLog && setting.RouterLogLevel != log.NONE { | ||||
| 		if log.GetLogger("router").GetLevel() <= setting.RouterLogLevel { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 GitHub
							GitHub