diff --git a/logs/file.go b/logs/file.go index b87664bd..f75e5bae 100644 --- a/logs/file.go +++ b/logs/file.go @@ -22,6 +22,7 @@ import ( "io" "os" "path/filepath" + "strconv" "strings" "sync" "time" @@ -53,7 +54,8 @@ type fileLogWriter struct { Level int `json:"level"` - Perm os.FileMode `json:"perm"` + Perm string `json:"perm"` + perm os.FileMode fileNameOnly, suffix string // like "project.log", project is fileNameOnly and .log is suffix } @@ -65,7 +67,8 @@ func newFileWriter() Logger { MaxDays: 7, Rotate: true, Level: LevelTrace, - Perm: 0660, + Perm: "0660", + perm: 0660, } return w } @@ -89,6 +92,11 @@ func (w *fileLogWriter) Init(jsonConfig string) error { if len(w.Filename) == 0 { return errors.New("jsonconfig must have filename") } + perm, err := strconv.ParseInt(w.Perm, 8, 64) + if err != nil { + return err + } + w.perm = os.FileMode(perm) w.suffix = filepath.Ext(w.Filename) w.fileNameOnly = strings.TrimSuffix(w.Filename, w.suffix) if w.suffix == "" { @@ -153,7 +161,7 @@ func (w *fileLogWriter) WriteMsg(when time.Time, msg string, level int) error { func (w *fileLogWriter) createLogFile() (*os.File, error) { // Open the log file - fd, err := os.OpenFile(w.Filename, os.O_WRONLY|os.O_APPEND|os.O_CREATE, w.Perm) + fd, err := os.OpenFile(w.Filename, os.O_WRONLY|os.O_APPEND|os.O_CREATE, w.perm) return fd, err } diff --git a/logs/file_test.go b/logs/file_test.go index d468606c..23370947 100644 --- a/logs/file_test.go +++ b/logs/file_test.go @@ -24,6 +24,27 @@ import ( "time" ) +func TestFilePerm(t *testing.T) { + log := NewLogger(10000) + log.SetLogger("file", `{"filename":"test.log", "perm": "0600"}`) + log.Debug("debug") + log.Informational("info") + log.Notice("notice") + log.Warning("warning") + log.Error("error") + log.Alert("alert") + log.Critical("critical") + log.Emergency("emergency") + file, err := os.Stat("test.log") + if err != nil { + t.Fatal(err) + } + if file.Mode() != 0600 { + t.Fatal("unexpected log file permission") + } + os.Remove("test.log") +} + func TestFile1(t *testing.T) { log := NewLogger(10000) log.SetLogger("file", `{"filename":"test.log"}`) @@ -147,7 +168,7 @@ func testFileRotate(t *testing.T, fn1, fn2 string) { MaxDays: 7, Rotate: true, Level: LevelTrace, - Perm: 0660, + Perm: "0660", } fw.Init(fmt.Sprintf(`{"filename":"%v","maxdays":1}`, fn1)) fw.dailyOpenTime = time.Now().Add(-24 * time.Hour) @@ -170,7 +191,7 @@ func testFileDailyRotate(t *testing.T, fn1, fn2 string) { MaxDays: 7, Rotate: true, Level: LevelTrace, - Perm: 0660, + Perm: "0660", } fw.Init(fmt.Sprintf(`{"filename":"%v","maxdays":1}`, fn1)) fw.dailyOpenTime = time.Now().Add(-24 * time.Hour)