Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Why create this project #1

Open
needkane opened this issue Aug 21, 2021 · 0 comments
Open

Why create this project #1

needkane opened this issue Aug 21, 2021 · 0 comments

Comments

@needkane
Copy link
Member

needkane commented Aug 21, 2021

https://github.com/lestrrat-go/file-rotatelogs was archived,and there are some small defects.

lestrrat-go/file-rotatelogs defects

No longer output log, when too much log output rotated by size

You can use "log" or "logrus" test

package main

import (
	"fmt"
	"log"
	"time"

	rotatelogs "github.com/lestrrat-go/file-rotatelogs"
)

func main() {

	rl, _ := rotatelogs.New(
		"/tmp/logs/access_log.%Y%m%d%H%M",
		rotatelogs.WithLinkName("/tmp/logs/access_log"),
		//rotatelogs.WithMaxAge(24*time.Hour),
		rotatelogs.WithRotationCount(3),
		//rotatelogs.WithRotationTime(time.Hour),
		rotatelogs.WithRotationSize(12),
	)

	log.SetOutput(rl)
	for i := 0; i < 1000; i++ {
		fmt.Printf("Console print %d\n", i)
		log.Printf("Test content %d\n", i)
		time.Sleep(time.Second)
	}
	log.Printf("Ending pose!\n")
}

The log output is stuck in the ninth, expected to be the 1000th

ls -l /tmp/logs/
total 24
lrwxr-xr-x  1 kane  wheel  26  8 22 15:33 access_log -> access_log.202108220000.10
-rw-r--r--  1 kane  wheel  35  8 22 15:33 access_log.202108220000.7
-rw-r--r--  1 kane  wheel  35  8 22 15:33 access_log.202108220000.8
-rw-r--r--  1 kane  wheel  35  8 22 15:33 access_log.202108220000.9

cat /tmp/logs/access_log.202108220000.9
2021/08/22 15:33:04 Test content 9

cat /tmp/logs/access_log
cat: /tmp/logs/access_log: No such file or directory

cat /tmp/logs/access_log.202108220000.10
cat: /tmp/logs/access_log.202108220000.10: No such file or directory

The log file name is ambiguous

You expect the log name to be accurate to minutes

rotatelogs.New("/tmp/logs/access_log.%Y%m%d%H%M")

But it's actually accurate to days,because the "rotationTime" is 1 day by default

lrwxr-xr-x  1 kane  wheel  26  8 22 15:33 access_log -> access_log.202108220000.10

RotationTime doesn't work

“%Y%m%d%H%M” accurate to minutes,“rotatelogs.WithRotationTime(time.Second)” accurate to seconds invalid

package main

import (
	"fmt"
	"log"
	"time"

	rotatelogs "github.com/lestrrat-go/file-rotatelogs"
)

func main() {

	rl, _ := rotatelogs.New(
		"/tmp/logs/access_log.%Y%m%d%H%M",
		rotatelogs.WithLinkName("/tmp/logs/access_log"),
		rotatelogs.WithRotationCount(3),
		rotatelogs.WithRotationTime(time.Second),
	)

	log.SetOutput(rl)
	for i := 0; i < 1000; i++ {
		fmt.Printf("Console print %d\n", i)
		log.Printf("Test content %d\n", i)
		time.Sleep(time.Second)
	}
	log.Printf("Ending pose!\n")
}

Result accurate to minutes

ls -l /tmp/logs/
total 24
lrwxr-xr-x  1 kane  wheel    23  8 24 22:29 access_log -> access_log.202108242229
-rw-r--r--  1 kane  wheel  2160  8 24 22:27 access_log.202108242227
-rw-r--r--  1 kane  wheel  2161  8 24 22:28 access_log.202108242228
-rw-r--r--  1 kane  wheel  1887  8 24 22:29 access_log.202108242229

No pattern no rotationTime

"/tmp/logs/access_log.%Y%m%d%H%M" -> "/tmp/logs/access_log"

package main

import (
	"fmt"
	"log"
	"time"

	rotatelogs "github.com/lestrrat-go/file-rotatelogs"
)

func main() {

	rl, _ := rotatelogs.New(
		"/tmp/logs/access_log",
		//		rotatelogs.WithLinkName("/tmp/logs/access_log"),
		rotatelogs.WithRotationCount(3),
		rotatelogs.WithRotationTime(time.Second),
	)

	log.SetOutput(rl)
	for i := 0; i < 1000; i++ {
		fmt.Printf("Console print %d\n", i)
		log.Printf("Test content %d\n", i)
		time.Sleep(time.Second)
	}
	log.Printf("Ending pose!\n")
}
kane-MacBook:file-rotatelogs zhangkai$ ls -l /tmp/logs/
total 8
-rw-r--r--  1 kane  wheel  1070  8 24 23:05 access_log
kane-MacBook:file-rotatelogs zhangkai$ ls -l /tmp/logs/
total 8
-rw-r--r--  1 kane  wheel  1106  8 24 23:05 access_log
kane-MacBook:file-rotatelogs zhangkai$ ls -l /tmp/logs/
total 8
-rw-r--r--  1 kane  wheel  1142  8 24 23:05 access_log
kane-MacBook:file-rotatelogs zhangkai$ ls -l /tmp/logs/
total 8
-rw-r--r--  1 kane  wheel  1178  8 24 23:05 access_log
kane-MacBook:file-rotatelogs zhangkai$ ls -l /tmp/logs/
total 8
-rw-r--r--  1 kane  wheel  1394  8 24 23:05 access_log

Improvement

A large number of logs will be output only under abnormal circumstances, but the logs cannot be stuck.

You can set “WithRotationTime(time.Second)” to avoid problem. However, there are very few historical logs under normal circumstances
Fix the log output is stuck in the ninth

func TestTooMuchLog(t *testing.T) {
                    
    var (           
        testDir       = "test_much_log"
        testLogPath   = filepath.Join(testDir, "access_log")
        rotationCount = 3
        N             = 12 // N > 10
    )               
    err := os.Mkdir(testDir, 0777)
    assert.Nil(t, err)
    defer os.RemoveAll(testDir)
    assert.Nil(t, err)
                    
    rl, err := rotatelogs.New(
        testLogPath+".%Y%m%d%H%M",
        rotatelogs.WithLinkName(testLogPath),
        rotatelogs.WithRotationCount(uint(rotationCount)),
        rotatelogs.WithRotationSize(12), // Log contentSize > 12
    )               
    assert.Nil(t, err)
                    
    log.SetOutput(rl)
    for i := 0; i < N; i++ {
        log.Printf("Test content %d\n", i)
    }               
    files, _ := ioutil.ReadDir(testDir)
    assert.Equal(t, rotationCount+1, len(files))
                    
    bytez, err := ioutil.ReadFile(testLogPath)
    assert.Nil(t, err)
    assert.Equal(t, strconv.Itoa(N-1), string(bytez[len(bytez)-3:len(bytez)-1]))
} 

RotationTime determined according to the pattern

needkane added a commit to needkane/lfshook that referenced this issue Jun 14, 2022
There'rs some bugs in lestrrat-go, fix it 
iproj/file-rotatelogs#1
needkane added a commit to needkane/iris that referenced this issue Jun 14, 2022
There're some bugs in lestrrat-go
Detail:  iproj/file-rotatelogs#1
kataras pushed a commit to kataras/iris that referenced this issue Jun 17, 2022
There're some bugs in lestrrat-go
Detail:  iproj/file-rotatelogs#1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant