|
|
@@ -24,6 +24,7 @@ import (
|
|
|
"io"
|
|
|
"os"
|
|
|
"path/filepath"
|
|
|
+ "strconv"
|
|
|
"strings"
|
|
|
"sync"
|
|
|
"sync/atomic"
|
|
|
@@ -140,6 +141,7 @@ var (
|
|
|
logFileWriter *lumberjack.Logger
|
|
|
logMu sync.Mutex
|
|
|
initialized atomic.Bool
|
|
|
+ cfgFile string
|
|
|
cfgLog = &config{
|
|
|
Level: LEVEL_TRACE,
|
|
|
Target: TARGET_CONSOLE,
|
|
|
@@ -159,7 +161,7 @@ func InitLogger(logCfgFile string) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- cfgFile := logCfgFile
|
|
|
+ cfgFile = logCfgFile
|
|
|
if cfgFile == "" {
|
|
|
cfgFile = filepath.Join(CFG_DIR, "config.ini")
|
|
|
}
|
|
|
@@ -283,6 +285,64 @@ func UpdateLogTarget(targetStr string) error {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
+func SaveLogConfig() error {
|
|
|
+ logMu.Lock()
|
|
|
+ defer logMu.Unlock()
|
|
|
+
|
|
|
+ if !initialized.Load() {
|
|
|
+ return ErrLoggerNotInitialized
|
|
|
+ }
|
|
|
+
|
|
|
+ dir := filepath.Dir(cfgFile)
|
|
|
+ if err := os.MkdirAll(dir, 0755); err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ cfg := ini.Empty()
|
|
|
+
|
|
|
+ if _, err := os.Stat(cfgFile); err == nil {
|
|
|
+ if c, err := ini.Load(cfgFile); err == nil {
|
|
|
+ cfg = c
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ sec := cfg.Section("Log")
|
|
|
+ sec.Key("Level").SetValue(cfgLog.Level.String())
|
|
|
+ sec.Key("Target").SetValue(cfgLog.Target.String())
|
|
|
+ sec.Key("MaxFileSize").SetValue(strconv.Itoa(cfgLog.MaxSize))
|
|
|
+ sec.Key("MaxReserveDays").SetValue(strconv.Itoa(cfgLog.MaxAge))
|
|
|
+ sec.Key("MaxBackupFileCnts").SetValue(strconv.Itoa(cfgLog.MaxBackups))
|
|
|
+ sec.Key("IsCompress").SetValue(strconv.FormatBool(cfgLog.Compress))
|
|
|
+
|
|
|
+ tmp := cfgFile + ".tmp"
|
|
|
+
|
|
|
+ if err := cfg.SaveTo(tmp); err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ f, err := os.OpenFile(tmp, os.O_RDWR, 0644)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ if err := f.Sync(); err != nil {
|
|
|
+ f.Close()
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ f.Close()
|
|
|
+
|
|
|
+ if err := os.Rename(tmp, cfgFile); err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ if df, err := os.Open(dir); err == nil {
|
|
|
+ _ = df.Sync()
|
|
|
+ df.Close()
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
func ExitLogger() {
|
|
|
logMu.Lock()
|
|
|
defer logMu.Unlock()
|