From d7a470549632497d34efec1f05b8a108f8bc14cf Mon Sep 17 00:00:00 2001 From: wangfei <263620938@qq.com> Date: Mon, 28 Nov 2016 16:15:59 +0800 Subject: [PATCH] a file's mtime is not reliable when rotating log by datetime --- writers_rollingfilewriter.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/writers_rollingfilewriter.go b/writers_rollingfilewriter.go index 93c5ed9..998a2b2 100644 --- a/writers_rollingfilewriter.go +++ b/writers_rollingfilewriter.go @@ -239,6 +239,7 @@ type rollingFileWriter struct { fullName bool maxRolls int nameMode rollingNameMode + lastRollTime time.Time self rollerVirtual // Used for virtual calls } @@ -334,9 +335,11 @@ func (rw *rollingFileWriter) createFileAndFolderIfNeeded(first bool) error { } rw.currentFileSize = stat.Size() + rw.lastRollTime = stat.ModTime() } else { rw.currentFile, err = os.Create(filePath) rw.currentFileSize = 0 + rw.lastRollTime = time.Now() } if err != nil { return err @@ -518,11 +521,7 @@ func (rw *rollingFileWriter) Write(bytes []byte) (n int, err error) { // needs to roll if: // * file roller max file size exceeded OR // * time roller interval passed - fi, err := rw.currentFile.Stat() - if err != nil { - return 0, err - } - lastRollTime := fi.ModTime() + lastRollTime := rw.lastRollTime nr, err := rw.self.needsToRoll(lastRollTime) if err != nil { return 0, err