From 72ac24f7cd5275fdc1e2177da81f1e4c26db390a Mon Sep 17 00:00:00 2001 From: zyj Date: Wed, 4 Mar 2026 16:21:03 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=91=E5=AE=9A=E6=97=A5=E5=BF=97=E4=B8=8E?= =?UTF-8?q?=E5=91=BD=E4=BB=A4=E8=A1=8C=E5=85=B3=E8=81=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/devpack/commands/root.go | 43 ++++++++++++++++++++++++++++++++++++ cmd/devpack/main.go | 15 +++---------- 2 files changed, 46 insertions(+), 12 deletions(-) diff --git a/cmd/devpack/commands/root.go b/cmd/devpack/commands/root.go index 01586bb..5ae092d 100644 --- a/cmd/devpack/commands/root.go +++ b/cmd/devpack/commands/root.go @@ -3,9 +3,11 @@ package commands import ( "fmt" "os" + "path/filepath" "github.com/spf13/cobra" "github.com/spf13/viper" + "github.com/user/devpack/internal/logging" "github.com/user/devpack/pkg/version" ) @@ -37,6 +39,11 @@ func Execute() error { func init() { cobra.OnInitialize(initConfig) + // 在所有子命令执行前初始化日志系统 + rootCmd.PersistentPreRunE = func(cmd *cobra.Command, args []string) error { + return initLogging() + } + // 全局参数 rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "配置文件路径 (默认: ~/.devpack/config.yaml)") rootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "详细输出") @@ -78,3 +85,39 @@ func initConfig() { // 读取配置文件(文件不存在时忽略错误) _ = viper.ReadInConfig() } + +// initLogging 根据 CLI 参数和配置文件初始化日志系统 +func initLogging() error { + // CLI flags 优先,未指定时从 viper 配置读取 + level := logLevel + if !rootCmd.PersistentFlags().Changed("log-level") { + if v := viper.GetString("log_level"); v != "" { + level = v + } + } + + // 日志文件路径:默认写入 ~/.devpack/logs/devpack.log + logFile := viper.GetString("log_file") + if logFile == "" { + home, err := os.UserHomeDir() + if err == nil { + logFile = filepath.Join(home, ".devpack", "logs", "devpack.log") + } + } + + _, err := logging.Init(logging.Options{ + Level: level, + LogFile: logFile, + Verbose: verbose, + Quiet: quiet, + NoColor: noColor, + }) + if err != nil { + return fmt.Errorf("日志初始化失败: %w", err) + } + + logging.G().Debugf("日志已初始化 (级别=%s, 详细=%v, 静默=%v, 无色=%v)", + level, verbose, quiet, noColor) + + return nil +} diff --git a/cmd/devpack/main.go b/cmd/devpack/main.go index bd313d0..130cbf4 100644 --- a/cmd/devpack/main.go +++ b/cmd/devpack/main.go @@ -8,18 +8,9 @@ import ( ) func main() { - // 初始化日志 - logOpts := logging.Options{ - Level: "info", - LogFile: "devpack.log", - Verbose: false, - Quiet: false, - NoColor: false, - } - _, err := logging.Init(logOpts) - if err != nil { - os.Exit(1) - } + // 日志由 rootCmd.PersistentPreRunE 根据 CLI 参数自动初始化 + // 程序退出时关闭日志文件句柄 + defer logging.G().Close() if err := commands.Execute(); err != nil { os.Exit(1)