From 522b1b64b07b6b5a802e187ea005936501d3e7ce Mon Sep 17 00:00:00 2001 From: MHSanaei Date: Fri, 26 Jun 2026 11:40:13 +0200 Subject: [PATCH] fix(logger): prevent nil-deref panic in migrate/setting CLI paths The package-level logger is nil until InitLogger runs, which only happens in runWebServer. The migrate and setting subcommands log without initializing it; PR #5520 added a logger.Info on a success path in MigrationRestoreVisionFlow, so 'x-ui migrate' segfaults on installs with a VLESS inbound needing Vision-flow restoration. Initialize logger to a usable default at package load so no code path can nil-deref it, and set up the dual backend in migrateDb so migration steps are logged like runWebServer. Fixes #5581 --- internal/logger/logger.go | 4 +++- main.go | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/internal/logger/logger.go b/internal/logger/logger.go index 215c597cd..00f8b503c 100644 --- a/internal/logger/logger.go +++ b/internal/logger/logger.go @@ -29,7 +29,9 @@ const ( ) var ( - logger *logging.Logger + // Initialized to a usable default so logging never nil-derefs before InitLogger + // runs — the "migrate" and "setting" CLI subcommands log without calling it. + logger = logging.MustGetLogger("x-ui") fileRotate *lumberjack.Logger // nil when file backend disabled // logBuffer maintains recent log entries in memory for web UI retrieval; diff --git a/main.go b/main.go index c03063e40..b32ea43f3 100644 --- a/main.go +++ b/main.go @@ -484,6 +484,7 @@ func GetApiToken(getApiToken bool) { func migrateDb() { inboundService := service.InboundService{} + logger.InitLogger(logging.INFO) err := database.InitDB(config.GetDBPath()) if err != nil { log.Fatal(err)