mirror of
https://gitea.com/gitea/gitea-mcp.git
synced 2025-08-23 14:23:05 +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)
|
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
|
||||||
|
112
pkg/log/log.go
112
pkg/log/log.go
@@ -19,53 +19,55 @@ var (
|
|||||||
|
|
||||||
func Default() *zap.Logger {
|
func Default() *zap.Logger {
|
||||||
defaultLoggerOnce.Do(func() {
|
defaultLoggerOnce.Do(func() {
|
||||||
if defaultLogger == nil {
|
if defaultLogger != nil {
|
||||||
ec := zap.NewProductionEncoderConfig()
|
return
|
||||||
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...)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
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) {
|
||||||
|
Reference in New Issue
Block a user