mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-10-30 22:11:07 +00:00 
			
		
		
		
	Fix access log (#14475)
Fix #14121, #14478. The `AccessLog` middleware has to be after `Contexter` or `APIContexter` so that we can get `LoginUserName` if possible. And also there is a **BREAK** change that it removed internal API access log.
This commit is contained in:
		
					parent
					
						
							
								4c6e029506
							
						
					
				
			
			
				commit
				
					
						a51cc6dea4
					
				
			
		
					 10 changed files with 129 additions and 72 deletions
				
			
		
							
								
								
									
										60
									
								
								modules/context/access_log.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								modules/context/access_log.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,60 @@ | |||
| // Copyright 2020 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 ( | ||||
| 	"bytes" | ||||
| 	"html/template" | ||||
| 	"net/http" | ||||
| 	"time" | ||||
| 
 | ||||
| 	"code.gitea.io/gitea/modules/log" | ||||
| 	"code.gitea.io/gitea/modules/setting" | ||||
| ) | ||||
| 
 | ||||
| type routerLoggerOptions struct { | ||||
| 	req            *http.Request | ||||
| 	Identity       *string | ||||
| 	Start          *time.Time | ||||
| 	ResponseWriter http.ResponseWriter | ||||
| 	Ctx            map[string]interface{} | ||||
| } | ||||
| 
 | ||||
| // AccessLogger returns a middleware to log access logger | ||||
| func AccessLogger() func(http.Handler) http.Handler { | ||||
| 	logger := log.GetLogger("access") | ||||
| 	logTemplate, _ := template.New("log").Parse(setting.AccessLogTemplate) | ||||
| 	return func(next http.Handler) http.Handler { | ||||
| 		return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { | ||||
| 			start := time.Now() | ||||
| 			next.ServeHTTP(w, req) | ||||
| 			identity := "-" | ||||
| 			if val := SignedUserName(req); val != "" { | ||||
| 				identity = val | ||||
| 			} | ||||
| 			rw := w.(ResponseWriter) | ||||
| 
 | ||||
| 			buf := bytes.NewBuffer([]byte{}) | ||||
| 			err := logTemplate.Execute(buf, routerLoggerOptions{ | ||||
| 				req:            req, | ||||
| 				Identity:       &identity, | ||||
| 				Start:          &start, | ||||
| 				ResponseWriter: rw, | ||||
| 				Ctx: map[string]interface{}{ | ||||
| 					"RemoteAddr": req.RemoteAddr, | ||||
| 					"Req":        req, | ||||
| 				}, | ||||
| 			}) | ||||
| 			if err != nil { | ||||
| 				log.Error("Could not set up chi access logger: %v", err.Error()) | ||||
| 			} | ||||
| 
 | ||||
| 			err = logger.SendLog(log.INFO, "", "", 0, buf.String(), "") | ||||
| 			if err != nil { | ||||
| 				log.Error("Could not set up chi access logger: %v", err.Error()) | ||||
| 			} | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue