mirror of
https://github.com/kemko/nomad.git
synced 2026-01-05 18:05:42 +03:00
excluding directories before opening file for writing
This commit is contained in:
@@ -27,6 +27,10 @@ func NewLogRotator(path string, fileName string, maxFiles int, fileSize int64) (
|
||||
logFileIdx := 0
|
||||
for _, f := range files {
|
||||
if strings.HasPrefix(f.Name(), fileName) {
|
||||
if f.IsDir() {
|
||||
logFileIdx += 1
|
||||
continue
|
||||
}
|
||||
fileIdx := strings.TrimPrefix(f.Name(), fmt.Sprintf("%s.", fileName))
|
||||
n, err := strconv.Atoi(fileIdx)
|
||||
if err != nil {
|
||||
@@ -51,6 +55,12 @@ func (l *LogRotator) Start(r io.Reader) error {
|
||||
buf := make([]byte, 32*1024)
|
||||
for {
|
||||
logFileName := filepath.Join(l.path, fmt.Sprintf("%s.%d", l.fileName, l.logFileIdx))
|
||||
if f, err := os.Stat(logFileName); err == nil {
|
||||
if f.IsDir() {
|
||||
l.logFileIdx += 1
|
||||
continue
|
||||
}
|
||||
}
|
||||
f, err := os.OpenFile(logFileName, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -152,3 +152,50 @@ func TestLogRotator_StartFromEmptyDir(t *testing.T) {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestLogRotator_SetPathAsFile(t *testing.T) {
|
||||
path := "/tmp/tmplogrator"
|
||||
defer os.RemoveAll(path)
|
||||
if _, err := os.Create(path); err != nil {
|
||||
t.Fatalf("test setup problem: %v", err)
|
||||
}
|
||||
|
||||
_, err := NewLogRotator(path, "redis.stdout", 10, 10)
|
||||
if err == nil {
|
||||
t.Fatal("expected error")
|
||||
}
|
||||
}
|
||||
|
||||
func TestLogRotator_ExcludeDirs(t *testing.T) {
|
||||
path := "/tmp/tmplogrator"
|
||||
defer os.RemoveAll(path)
|
||||
if err := os.Mkdir(path, os.ModeDir|os.ModePerm); err != nil {
|
||||
t.Fatalf("test setup err: %v", err)
|
||||
}
|
||||
if err := os.Mkdir(filepath.Join(path, "redis.stdout.0"), os.ModeDir|os.ModePerm); err != nil {
|
||||
t.Fatalf("test setup err: %v", err)
|
||||
}
|
||||
|
||||
l, err := NewLogRotator(path, "redis.stdout", 10, 6)
|
||||
if err != nil {
|
||||
t.Fatalf("test setup err: %v", err)
|
||||
}
|
||||
|
||||
r, w := io.Pipe()
|
||||
go func() {
|
||||
w.Write([]byte("fg"))
|
||||
w.Close()
|
||||
}()
|
||||
err = l.Start(r)
|
||||
if err != nil && err != io.EOF {
|
||||
t.Fatalf("Failure in logrotator start %v", err)
|
||||
}
|
||||
|
||||
finfo, err := os.Stat("/tmp/tmplogrator/redis.stdout.1")
|
||||
if err != nil {
|
||||
t.Fatal("expected rotator to create redis.stdout.1")
|
||||
}
|
||||
if finfo.Size() != 2 {
|
||||
t.Fatalf("expected size: %v, actual: %v", 2, finfo.Size())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user