Browse Source

fix: avoid log override when update (#2151)

* fix: avoid log override when update

Signed-off-by: xjasonlyu <xjasonlyu@gmail.com>

* chore: refactor func signature

Signed-off-by: xjasonlyu <xjasonlyu@gmail.com>

---------

Signed-off-by: xjasonlyu <xjasonlyu@gmail.com>
Jason Lyu 1 year ago
parent
commit
9158000006
2 changed files with 21 additions and 25 deletions
  1. 9 19
      internal/conf/conf.go
  2. 12 6
      internal/server/rest.go

+ 9 - 19
internal/conf/conf.go

@@ -179,17 +179,11 @@ func SetDebugLevel(v bool) {
 	Log.SetLevel(lvl)
 }
 
-func SetConsoleLog(v bool) {
-	out := io.Discard
-	if v {
-		out = os.Stdout
-	}
-	Log.SetOutput(out)
-}
-
-func SetFileLog(v bool) error {
-	if !v {
-		SetConsoleLog(Config.Basic.ConsoleLog)
+func SetConsoleAndFileLog(consoleLog, fileLog bool) error {
+	if !fileLog {
+		if consoleLog {
+			Log.SetOutput(os.Stdout)
+		}
 		return nil
 	}
 
@@ -209,10 +203,10 @@ func SetFileLog(v bool) error {
 	if err != nil {
 		fmt.Printf("Failed to init log file settings: %v", err)
 		Log.Infof("Failed to log to file, using default stderr.")
-	} else if Config.Basic.ConsoleLog {
+	} else if consoleLog {
 		mw := io.MultiWriter(os.Stdout, logWriter)
 		Log.SetOutput(mw)
-	} else if !Config.Basic.ConsoleLog {
+	} else if !consoleLog {
 		Log.SetOutput(logWriter)
 	}
 	gcOutdatedLog(logDir, time.Hour*time.Duration(Config.Basic.MaxAge))
@@ -258,12 +252,8 @@ func InitConf() {
 		SetDebugLevel(true)
 	}
 
-	if Config.Basic.FileLog {
-		if err := SetFileLog(true); err != nil {
-			log.Fatal(err)
-		}
-	} else if Config.Basic.ConsoleLog {
-		SetConsoleLog(true)
+	if err := SetConsoleAndFileLog(Config.Basic.ConsoleLog, Config.Basic.FileLog); err != nil {
+		log.Fatal(err)
 	}
 
 	if Config.Basic.TimeZone != "" {

+ 12 - 6
internal/server/rest.go

@@ -1118,16 +1118,22 @@ func configurationUpdateHandler(w http.ResponseWriter, r *http.Request) {
 		conf.Config.Basic.TimeZone = *basic.TimeZone
 	}
 
-	if basic.FileLog != nil {
-		if err := conf.SetFileLog(*basic.FileLog); err != nil {
+	if basic.ConsoleLog != nil || basic.FileLog != nil {
+		consoleLog := conf.Config.Basic.ConsoleLog
+		if basic.ConsoleLog != nil {
+			consoleLog = *basic.ConsoleLog
+		}
+		fileLog := conf.Config.Basic.FileLog
+		if basic.FileLog != nil {
+			fileLog = *basic.FileLog
+		}
+		if err := conf.SetConsoleAndFileLog(consoleLog, fileLog); err != nil {
 			w.WriteHeader(http.StatusBadRequest)
 			handleError(w, err, "", logger)
 			return
 		}
-		conf.Config.Basic.FileLog = *basic.FileLog
-	} else if basic.ConsoleLog != nil {
-		conf.SetConsoleLog(*basic.ConsoleLog)
-		conf.Config.Basic.ConsoleLog = *basic.ConsoleLog
+		conf.Config.Basic.ConsoleLog = consoleLog
+		conf.Config.Basic.FileLog = fileLog
 	}
 
 	w.WriteHeader(http.StatusNoContent)