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:
appleboy
2025-06-22 10:27:09 +00:00
committed by Bo-Yi Wu (吳柏毅)
parent b85a523983
commit 5dbfe21127
2 changed files with 74 additions and 51 deletions

View File

@@ -44,17 +44,24 @@ func Run() error {
RegisterTool(mcpServer) RegisterTool(mcpServer)
switch flag.Mode { switch flag.Mode {
case "stdio": case "stdio":
if err := server.ServeStdio(mcpServer); err != nil { if err := server.ServeStdio(
mcpServer,
); err != nil {
return err return err
} }
case "sse": case "sse":
sseServer := server.NewSSEServer(mcpServer) sseServer := server.NewSSEServer(
mcpServer,
)
log.Infof("Gitea MCP SSE server listening on :%d", flag.Port) log.Infof("Gitea MCP SSE server listening on :%d", flag.Port)
if err := sseServer.Start(fmt.Sprintf(":%d", flag.Port)); err != nil { if err := sseServer.Start(fmt.Sprintf(":%d", flag.Port)); err != nil {
return err return err
} }
case "http": 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) log.Infof("Gitea MCP HTTP server listening on :%d", flag.Port)
if err := httpServer.Start(fmt.Sprintf(":%d", flag.Port)); err != nil { if err := httpServer.Start(fmt.Sprintf(":%d", flag.Port)); err != nil {
return err return err

View File

@@ -19,7 +19,10 @@ var (
func Default() *zap.Logger { func Default() *zap.Logger {
defaultLoggerOnce.Do(func() { defaultLoggerOnce.Do(func() {
if defaultLogger == nil { if defaultLogger != nil {
return
}
ec := zap.NewProductionEncoderConfig() ec := zap.NewProductionEncoderConfig()
ec.EncodeTime = zapcore.TimeEncoderOfLayout(time.DateTime) ec.EncodeTime = zapcore.TimeEncoderOfLayout(time.DateTime)
ec.EncodeLevel = zapcore.CapitalLevelEncoder ec.EncodeLevel = zapcore.CapitalLevelEncoder
@@ -65,7 +68,6 @@ func Default() *zap.Logger {
zap.AddCallerSkip(1), zap.AddCallerSkip(1),
} }
defaultLogger = zap.New(core, options...) defaultLogger = zap.New(core, options...)
}
}) })
return defaultLogger return defaultLogger
@@ -77,8 +79,22 @@ func SetDefault(logger *zap.Logger) {
} }
} }
func Logger() *zap.Logger { func New() *Logger {
return defaultLogger 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) { func Debug(msg string, fields ...zap.Field) {