mirror of
				https://gitea.com/gitea/gitea-mcp.git
				synced 2025-10-30 01:41:50 +00:00 
			
		
		
		
	refactor: refactor logging and server setup for clarity and structure (#64)
- Refactor server initialization calls in Run to use multiline construction style and explicitly pass options in HTTP mode - Fix logic in Default to prevent redundant logger initialization - Remove unused Logger function and introduce a Logger struct with Infof and Errorf methods for structured logging - Add a New function for creating instances of the Logger struct Signed-off-by: appleboy <appleboy.tw@gmail.com> Reviewed-on: https://gitea.com/gitea/gitea-mcp/pulls/64 Co-authored-by: appleboy <appleboy.tw@gmail.com> Co-committed-by: appleboy <appleboy.tw@gmail.com>
This commit is contained in:
		| @@ -44,17 +44,24 @@ func Run() error { | ||||
| 	RegisterTool(mcpServer) | ||||
| 	switch flag.Mode { | ||||
| 	case "stdio": | ||||
| 		if err := server.ServeStdio(mcpServer); err != nil { | ||||
| 		if err := server.ServeStdio( | ||||
| 			mcpServer, | ||||
| 		); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	case "sse": | ||||
| 		sseServer := server.NewSSEServer(mcpServer) | ||||
| 		sseServer := server.NewSSEServer( | ||||
| 			mcpServer, | ||||
| 		) | ||||
| 		log.Infof("Gitea MCP SSE server listening on :%d", flag.Port) | ||||
| 		if err := sseServer.Start(fmt.Sprintf(":%d", flag.Port)); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	case "http": | ||||
| 		httpServer := server.NewStreamableHTTPServer(mcpServer) | ||||
| 		httpServer := server.NewStreamableHTTPServer( | ||||
| 			mcpServer, | ||||
| 			server.WithLogger(log.New()), | ||||
| 		) | ||||
| 		log.Infof("Gitea MCP HTTP server listening on :%d", flag.Port) | ||||
| 		if err := httpServer.Start(fmt.Sprintf(":%d", flag.Port)); err != nil { | ||||
| 			return err | ||||
|   | ||||
							
								
								
									
										112
									
								
								pkg/log/log.go
									
									
									
									
									
								
							
							
						
						
									
										112
									
								
								pkg/log/log.go
									
									
									
									
									
								
							| @@ -19,53 +19,55 @@ var ( | ||||
|  | ||||
| func Default() *zap.Logger { | ||||
| 	defaultLoggerOnce.Do(func() { | ||||
| 		if defaultLogger == nil { | ||||
| 			ec := zap.NewProductionEncoderConfig() | ||||
| 			ec.EncodeTime = zapcore.TimeEncoderOfLayout(time.DateTime) | ||||
| 			ec.EncodeLevel = zapcore.CapitalLevelEncoder | ||||
|  | ||||
| 			var ws zapcore.WriteSyncer | ||||
| 			var wss []zapcore.WriteSyncer | ||||
|  | ||||
| 			home, _ := os.UserHomeDir() | ||||
| 			if home == "" { | ||||
| 				home = os.TempDir() | ||||
| 			} | ||||
|  | ||||
| 			logDir := fmt.Sprintf("%s/.gitea-mcp", home) | ||||
| 			if err := os.MkdirAll(logDir, 0o700); err != nil { | ||||
| 				// Fallback to temp directory if creation fails | ||||
| 				logDir = os.TempDir() | ||||
| 			} | ||||
|  | ||||
| 			wss = append(wss, zapcore.AddSync(&lumberjack.Logger{ | ||||
| 				Filename:   fmt.Sprintf("%s/gitea-mcp.log", logDir), | ||||
| 				MaxSize:    100, | ||||
| 				MaxBackups: 10, | ||||
| 				MaxAge:     30, | ||||
| 			})) | ||||
|  | ||||
| 			if flag.Mode == "http" || flag.Mode == "sse" { | ||||
| 				wss = append(wss, zapcore.AddSync(os.Stdout)) | ||||
| 			} | ||||
|  | ||||
| 			ws = zapcore.NewMultiWriteSyncer(wss...) | ||||
|  | ||||
| 			enc := zapcore.NewConsoleEncoder(ec) | ||||
| 			var level zapcore.Level | ||||
| 			if flag.Debug { | ||||
| 				level = zapcore.DebugLevel | ||||
| 			} else { | ||||
| 				level = zapcore.InfoLevel | ||||
| 			} | ||||
| 			core := zapcore.NewCore(enc, ws, level) | ||||
| 			options := []zap.Option{ | ||||
| 				zap.AddStacktrace(zapcore.DPanicLevel), | ||||
| 				zap.AddCaller(), | ||||
| 				zap.AddCallerSkip(1), | ||||
| 			} | ||||
| 			defaultLogger = zap.New(core, options...) | ||||
| 		if defaultLogger != nil { | ||||
| 			return | ||||
| 		} | ||||
|  | ||||
| 		ec := zap.NewProductionEncoderConfig() | ||||
| 		ec.EncodeTime = zapcore.TimeEncoderOfLayout(time.DateTime) | ||||
| 		ec.EncodeLevel = zapcore.CapitalLevelEncoder | ||||
|  | ||||
| 		var ws zapcore.WriteSyncer | ||||
| 		var wss []zapcore.WriteSyncer | ||||
|  | ||||
| 		home, _ := os.UserHomeDir() | ||||
| 		if home == "" { | ||||
| 			home = os.TempDir() | ||||
| 		} | ||||
|  | ||||
| 		logDir := fmt.Sprintf("%s/.gitea-mcp", home) | ||||
| 		if err := os.MkdirAll(logDir, 0o700); err != nil { | ||||
| 			// Fallback to temp directory if creation fails | ||||
| 			logDir = os.TempDir() | ||||
| 		} | ||||
|  | ||||
| 		wss = append(wss, zapcore.AddSync(&lumberjack.Logger{ | ||||
| 			Filename:   fmt.Sprintf("%s/gitea-mcp.log", logDir), | ||||
| 			MaxSize:    100, | ||||
| 			MaxBackups: 10, | ||||
| 			MaxAge:     30, | ||||
| 		})) | ||||
|  | ||||
| 		if flag.Mode == "http" || flag.Mode == "sse" { | ||||
| 			wss = append(wss, zapcore.AddSync(os.Stdout)) | ||||
| 		} | ||||
|  | ||||
| 		ws = zapcore.NewMultiWriteSyncer(wss...) | ||||
|  | ||||
| 		enc := zapcore.NewConsoleEncoder(ec) | ||||
| 		var level zapcore.Level | ||||
| 		if flag.Debug { | ||||
| 			level = zapcore.DebugLevel | ||||
| 		} else { | ||||
| 			level = zapcore.InfoLevel | ||||
| 		} | ||||
| 		core := zapcore.NewCore(enc, ws, level) | ||||
| 		options := []zap.Option{ | ||||
| 			zap.AddStacktrace(zapcore.DPanicLevel), | ||||
| 			zap.AddCaller(), | ||||
| 			zap.AddCallerSkip(1), | ||||
| 		} | ||||
| 		defaultLogger = zap.New(core, options...) | ||||
| 	}) | ||||
|  | ||||
| 	return defaultLogger | ||||
| @@ -77,8 +79,22 @@ func SetDefault(logger *zap.Logger) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func Logger() *zap.Logger { | ||||
| 	return defaultLogger | ||||
| func New() *Logger { | ||||
| 	return &Logger{ | ||||
| 		defaultLogger: Default(), | ||||
| 	} | ||||
| } | ||||
|  | ||||
| type Logger struct { | ||||
| 	defaultLogger *zap.Logger | ||||
| } | ||||
|  | ||||
| func (l *Logger) Infof(msg string, args ...any) { | ||||
| 	l.defaultLogger.Sugar().Infof(msg, args...) | ||||
| } | ||||
|  | ||||
| func (l *Logger) Errorf(msg string, args ...any) { | ||||
| 	l.defaultLogger.Sugar().Errorf(msg, args...) | ||||
| } | ||||
|  | ||||
| func Debug(msg string, fields ...zap.Field) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user