flipped-aurora/gin-vue-admin · critical

panic(err) — standalone MCP logger init failed

Error message

panic(err) — standalone MCP logger init failed

What it means

After config loads, the standalone MCP server initializes its logger; failure (e.g. cannot create/open the log file or bad logger config) triggers panic(err), aborting startup. This guarantees the service never runs without observability.

Source

Thrown at server/cmd/mcp/main.go:19

package main

import (
	"fmt"

	"github.com/flipped-aurora/gin-vue-admin/server/global"
	mcpTool "github.com/flipped-aurora/gin-vue-admin/server/mcp"
	"github.com/flipped-aurora/gin-vue-admin/server/utils/logger"
	_ "go.uber.org/automaxprocs"
)

func main() {
	configPath, err := loadStandaloneConfig()
	if err != nil {
		panic(err)
	}

	if err := initializeStandaloneLogger(); err != nil {
		panic(err)
	}

	addr := fmt.Sprintf(":%d", global.GVA_CONFIG.MCP.Addr)
	server := mcpTool.NewStreamableHTTPServer()

	logger.Bg().Mod("cli").
		Field("config", configPath).
		Field("addr", addr).
		Field("path", global.GVA_CONFIG.MCP.Path).
		Field("upstream", global.GVA_CONFIG.MCP.UpstreamBaseURL).
		Info("mcp独立服务启动")

	if err := server.Start(addr); err != nil {
		logger.Bg().Mod("cli").Err(err).Error("mcp独立服务启动失败")
		panic(err)
	}
}

View on GitHub (pinned to 3136500ef3)

Solutions

  1. Check the configured log directory exists and is writable by the process user (mkdir -p, chown)
  2. Point the log output to stdout/stderr or a writable path in containers
  3. Verify logger-related config keys are valid
  4. Re-run the binary after fixing permissions

Example fix

// before
logs: /var/log/gva/mcp.log  # dir missing
// after
mkdir -p /var/log/gva && chown app:app /var/log/gva
Defensive patterns

Strategy: validation

Validate before calling

logDir := filepath.Dir(logPath); if err := os.MkdirAll(logDir, 0o755); err != nil { log.Fatalf("cannot create log dir: %v", err) }

Try / catch

if err := initializeStandaloneLogger(); err != nil { log.Printf("logger init failed: %v", err); os.Exit(1) } // or recover in a supervisor wrapper

Prevention

When it happens

Trigger: initializeStandaloneLogger returns an error: log directory does not exist or is unwritable, log file path invalid, or logger stack initialization fails for the loaded config.

Common situations: Docker container with read-only filesystem and no writable log dir; log path pointing to a directory deleted after deploy; running as non-root user lacking write access to the configured log path.

Related errors


AI-assisted analysis of flipped-aurora/gin-vue-admin@3136500ef3 (2026-08-31). Data as JSON: /api/errors/638e0ab2f149aa35. Report an issue: GitHub.