diff --git a/lumberjack.go b/lumberjack.go index 0107fa8..69fa32a 100644 --- a/lumberjack.go +++ b/lumberjack.go @@ -119,13 +119,15 @@ func (l *Logger) Write(p []byte) (n int, err error) { "write length %d exceeds maximum file size %d", writeLen, l.max(), ) } - if l.size+writeLen > l.max() { - if err := l.rotate(); err != nil { + + if l.file == nil { + if err = l.openExistingOrNew(len(p)); err != nil { return 0, err } } - if l.file == nil { - if err = l.openExistingOrNew(len(p)); err != nil { + + if l.size+writeLen > l.max() { + if err := l.rotate(); err != nil { return 0, err } } diff --git a/lumberjack_test.go b/lumberjack_test.go index 96b1260..ac443c2 100644 --- a/lumberjack_test.go +++ b/lumberjack_test.go @@ -183,6 +183,37 @@ func TestAutoRotate(t *testing.T) { fileCount(dir, 2, t) } +func TestFirstWriteRotate(t *testing.T) { + currentTime = fakeTime + dir := makeTempDir("TestFirstWriteRotate", t) + defer os.RemoveAll(dir) + + l := &Logger{ + Dir: dir, + NameFormat: format, + MaxSize: 10, + } + defer l.Close() + + filename := logFile(dir) + err := ioutil.WriteFile(filename, []byte("boooooo!"), 0600) + isNil(err, t) + + // set the current time one day later + defer newFakeTime(Day)() + + // this would make us rotate + b := []byte("fooo!") + n, err := l.Write(b) + isNil(err, t) + equals(len(b), n, t) + + filename2 := logFile(dir) + existsWithLen(filename2, n, t) + + fileCount(dir, 2, t) +} + func TestMaxBackups(t *testing.T) { currentTime = fakeTime dir := makeTempDir("TestMaxBackups", t)