From 7c0c490f1c62301719388fd44df9c29a64213cfb Mon Sep 17 00:00:00 2001 From: hantmac Date: Sun, 1 Sep 2019 00:06:26 +0800 Subject: [PATCH 1/2] bug fix:fix read log file oom --- backend/services/log.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/backend/services/log.go b/backend/services/log.go index c6e4f090..2e6f25ed 100644 --- a/backend/services/log.go +++ b/backend/services/log.go @@ -34,9 +34,16 @@ func GetLocalLog(logPath string) (fileBytes []byte, err error) { return nil, err } defer f.Close() - logBuf := make([]byte, 2048) - n, err := f.ReadAt(logBuf, fi.Size()-int64(len(logBuf))) - if err != nil { + const bufLen = 2048 + logBuf := make([]byte, bufLen) + off := int64(0) + if fi.Size() > int64(len(logBuf)) { + off = fi.Size() - int64(len(logBuf)) + } + n, err := f.ReadAt(logBuf, off) + + //到文件结尾会有EOF标识 + if err != nil && err.Error() != "EOF" { log.Error(err.Error()) debug.PrintStack() return nil, err From d5dfe648af5afefd87d312a5024662ded6cddd8b Mon Sep 17 00:00:00 2001 From: hantmac Date: Sun, 1 Sep 2019 00:07:18 +0800 Subject: [PATCH 2/2] add unit test for GetLocalLog --- backend/services/log_test.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/backend/services/log_test.go b/backend/services/log_test.go index 0a52747c..a0b049c5 100644 --- a/backend/services/log_test.go +++ b/backend/services/log_test.go @@ -2,9 +2,11 @@ package services import ( "crawlab/config" + "fmt" "github.com/apex/log" . "github.com/smartystreets/goconvey/convey" "github.com/spf13/viper" + "os" "testing" ) @@ -20,3 +22,29 @@ func TestDeleteLogPeriodically(t *testing.T) { DeleteLogPeriodically() }) } + +func TestGetLocalLog(t *testing.T) { + //create a log file for test + logPath := "../logs/crawlab/test.log" + f, err := os.Create(logPath) + defer f.Close() + if err != nil { + fmt.Println(err.Error()) + + } else { + _, err = f.Write([]byte("This is for test")) + } + + Convey("Test GetLocalLog", t, func() { + Convey("Test response", func() { + logStr, err := GetLocalLog(logPath) + log.Info(string(logStr)) + fmt.Println(err) + So(err, ShouldEqual, nil) + + }) + }) + //delete the test log file + os.Remove(logPath) + +}