X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=main.go;h=4302e9c9fb9afddbd9c233ce1516b570ff6c8598;hb=cfe84507a37a65efcb22e7abe3247b4c7704d0a8;hp=01b46c996d288a626ee655e2160bd4b81b2f308c;hpb=60974e66c57cacdc2483d74718c4bb0a993d2183;p=src%2Fxds%2Fxds-gdb.git diff --git a/main.go b/main.go index 01b46c9..4302e9c 100644 --- a/main.go +++ b/main.go @@ -39,7 +39,7 @@ var AppSubVersion = "unknown-dev" // Create logger var log = logrus.New() -var earlyLog = []string{} +var logFileInitial = "/tmp/xds-gdb.log" // Application details const ( @@ -64,6 +64,8 @@ type EnvVar struct { func exitError(code syscall.Errno, f string, a ...interface{}) { err := fmt.Sprintf(f, a...) fmt.Fprintf(os.Stderr, err+"\n") + log.Debugf("Exit: code=%v, err=%s", code, err) + os.Exit(int(code)) } @@ -73,6 +75,18 @@ func main() { var listProject bool var err error + // Init Logger and set temporary file and level for the 1st part + // IOW while XDS_LOGLEVEL and XDS_LOGFILE options are not parsed + logFile = logFileInitial + fdL, err := os.OpenFile(logFileInitial, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666) + if err != nil { + msgErr := fmt.Sprintf("Cannot create log file %s", logFileInitial) + exitError(syscall.EPERM, msgErr) + } + log.Formatter = &logrus.TextFormatter{} + log.Out = fdL + log.Level = logrus.DebugLevel + uri = "localhost:8000" logLevel = defaultLogLevel @@ -140,6 +154,7 @@ func main() { } // Process gdb arguments + log.Debugf("xds-gdb started with args: %v", os.Args) args := make([]string, len(os.Args)) args[0] = os.Args[0] gdbArgs := make([]string, len(os.Args)) @@ -149,7 +164,7 @@ func main() { for idx, a := range os.Args[1:] { // Specific case to print help or version of xds-gdb switch a { - case "--help", "-h", "--version", "-v": + case "--help", "-h", "--version", "-v", "--list", "-ls": args[1] = a goto endloop case "--": @@ -190,8 +205,13 @@ endloop: // Source config env file // (we cannot use confFile var because env variables setting is just after) envMap, confFile, err := loadConfigEnvFile(os.Getenv("XDS_CONFIG"), gdbCmdFile) - if err != nil { - exitError(syscall.ENOENT, err.Error()) + log.Infof("Load env config: envMap=%v, confFile=%v, err=%v", envMap, confFile, err) + + // Only rise an error when args is not set (IOW when --help or --version is not set) + if len(args) == 1 { + if err != nil { + exitError(syscall.ENOENT, err.Error()) + } } // Managed env vars and create help @@ -225,28 +245,29 @@ endloop: var err error curDir, _ := os.Getwd() - // Set logger level, formatter and log file + // Build env variables + env := []string{} + for k, v := range envMap { + env = append(env, k+"="+v) + } + + // Now set logger level and log file to correct/env var settings if log.Level, err = logrus.ParseLevel(logLevel); err != nil { msg := fmt.Sprintf("Invalid log level : \"%v\"\n", logLevel) return cli.NewExitError(msg, int(syscall.EINVAL)) } - log.Formatter = &logrus.TextFormatter{} + log.Infof("Switch log level to %s", logLevel) - // Always log into a file - if logFile == "" { - logFile = "/tmp/xds-gdb.log" - } - fdL, err := os.OpenFile(logFile, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666) - if err != nil { - msgErr := fmt.Sprintf("Cannot create log file %s", logFile) - return cli.NewExitError(msgErr, int(syscall.EPERM)) - } - log.Out = fdL + if logFile != logFileInitial { + log.Infof("Switch logging to log file %s", logFile) - // Build env variables - env := []string{} - for k, v := range envMap { - env = append(env, k+"="+v) + fdL, err := os.OpenFile(logFile, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666) + if err != nil { + msgErr := fmt.Sprintf("Cannot create log file %s", logFile) + return cli.NewExitError(msgErr, int(syscall.EPERM)) + } + defer fdL.Close() + log.Out = fdL } // Create cross or native gdb interface @@ -262,11 +283,6 @@ endloop: gdb.SetConfig("listProject", listProject) } - // Log early print - for _, msg := range earlyLog { - log.Debugf(msg) - } - // Log useful info log.Infof("Original arguments: %v", os.Args) log.Infof("Current directory : %v", curDir) @@ -467,13 +483,13 @@ func loadConfigEnvFile(confFile, gdbCmdFile string) (map[string]string, string, // 1- if no confFile set, use setting from gdb command file is option // --command/-x is set if confFile == "" && gdbCmdFile != "" { - logEarly("Try extract config from gdbCmdFile: %s", gdbCmdFile) + log.Infof("Try extract config from gdbCmdFile: %s", gdbCmdFile) confFile, err = extractEnvFromCmdFile(gdbCmdFile) if confFile != "" { defer os.Remove(confFile) } if err != nil { - return envMap, confFile, fmt.Errorf(err.Error()) + log.Infof("Extraction from gdbCmdFile failed: %v", err.Error()) } } // 2- search xds-gdb.env file in various locations @@ -483,12 +499,12 @@ func loadConfigEnvFile(confFile, gdbCmdFile string) (map[string]string, string, xdsEnvFile := "xds-gdb.env" for _, d := range []string{ path.Join(curDir), - path.Join(curDir, "..", ".."), - path.Join(curDir, "../../target"), - path.Join(u.HomeDir, ".xds"), + path.Join(curDir, ".."), + path.Join(curDir, "target"), + path.Join(u.HomeDir, ".config", "xds"), } { - confFile := path.Join(d, xdsEnvFile) - logEarly("Search config in %s", confFile) + confFile = path.Join(d, xdsEnvFile) + log.Infof("Search config in %s", confFile) if common.Exists(confFile) { break } @@ -497,6 +513,7 @@ func loadConfigEnvFile(confFile, gdbCmdFile string) (map[string]string, string, } if confFile == "" { + log.Infof("NO valid conf file found!") return envMap, "", nil } @@ -509,6 +526,7 @@ func loadConfigEnvFile(confFile, gdbCmdFile string) (map[string]string, string, if envMap, err = godotenv.Read(confFile); err != nil { return envMap, confFile, fmt.Errorf("Error reading env config file " + confFile) } + return envMap, confFile, nil } @@ -572,7 +590,3 @@ func extractEnvFromCmdFile(cmdFile string) (string, error) { return envFileName, nil } - -func logEarly(format string, a ...interface{}) { - earlyLog = append(earlyLog, fmt.Sprintf(format, a...)) -}