From d679a4b865f24a806ec6e4a3d3b9a977eded9f5f Mon Sep 17 00:00:00 2001 From: nullne Date: Sat, 14 May 2016 10:54:09 +0800 Subject: [PATCH 1/2] fix bug with file permission in log module --- logs/file.go | 14 +++++++++++--- logs/file_test.go | 25 +++++++++++++++++++++++-- 2 files changed, 34 insertions(+), 5 deletions(-) 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) From 2c12383263fdd1247dbca150eb32abd1176115e7 Mon Sep 17 00:00:00 2001 From: nullne Date: Tue, 17 May 2016 10:29:05 +0800 Subject: [PATCH 2/2] remove attribute perm to make it more brief --- logs/file.go | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/logs/file.go b/logs/file.go index f75e5bae..7798a221 100644 --- a/logs/file.go +++ b/logs/file.go @@ -55,7 +55,6 @@ type fileLogWriter struct { Level int `json:"level"` Perm string `json:"perm"` - perm os.FileMode fileNameOnly, suffix string // like "project.log", project is fileNameOnly and .log is suffix } @@ -68,7 +67,6 @@ func newFileWriter() Logger { Rotate: true, Level: LevelTrace, Perm: "0660", - perm: 0660, } return w } @@ -82,7 +80,7 @@ func newFileWriter() Logger { // "daily":true, // "maxDays":15, // "rotate":true, -// "perm":0600 +// "perm":"0600" // } func (w *fileLogWriter) Init(jsonConfig string) error { err := json.Unmarshal([]byte(jsonConfig), w) @@ -92,11 +90,6 @@ 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 == "" { @@ -161,7 +154,11 @@ 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) + perm, err := strconv.ParseInt(w.Perm, 8, 64) + if err != nil { + return nil, err + } + fd, err := os.OpenFile(w.Filename, os.O_WRONLY|os.O_APPEND|os.O_CREATE, os.FileMode(perm)) return fd, err }