Net 3181 consul gh issue 15709 allow log file naming like nomad - fix bug (#18631)

* fixes file name for consul

* added log file

* added tests for rename method

* append instead of trunc

* fix file truncate issue

* added changelog

* fix for build destros ci

* removed changelog

* solaris
This commit is contained in:
Ashesh Vidyut 2023-09-01 14:53:31 +05:30 committed by GitHub
parent 78e3cbe156
commit 13eefbb840
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 73 additions and 4 deletions

View File

@ -60,19 +60,24 @@ func (l *LogFile) fileNamePattern() string {
} }
func (l *LogFile) openNew() error { func (l *LogFile) openNew() error {
createTime := now()
newfileName := l.fileName newfileName := l.fileName
newfilePath := filepath.Join(l.logPath, newfileName) newfilePath := filepath.Join(l.logPath, newfileName)
// Try creating a file. We truncate the file because we are the only authority to write the logs // Try creating or opening the active log file. Since the active log file
filePointer, err := os.OpenFile(newfilePath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0640) // always has the same name, append log entries to prevent overwriting
// previous log data.
filePointer, err := os.OpenFile(newfilePath, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0640)
if err != nil { if err != nil {
return err return err
} }
l.FileInfo = filePointer l.FileInfo = filePointer
stat, err := filePointer.Stat()
if err != nil {
return err
}
// New file, new bytes tracker, new creation time :) // New file, new bytes tracker, new creation time :)
l.LastCreated = createTime l.LastCreated = l.createTime(stat)
l.BytesWritten = 0 l.BytesWritten = 0
return nil return nil
} }

16
logging/logfile_bsd.go Normal file
View File

@ -0,0 +1,16 @@
//go:build darwin || freebsd || netbsd || openbsd
// +build darwin freebsd netbsd openbsd
package logging
import (
"os"
"syscall"
"time"
)
func (l *LogFile) createTime(stat os.FileInfo) time.Time {
stat_t := stat.Sys().(*syscall.Stat_t)
createTime := stat_t.Ctimespec
return time.Unix(int64(createTime.Sec), int64(createTime.Nsec))
}

17
logging/logfile_linux.go Normal file
View File

@ -0,0 +1,17 @@
//go:build dragonfly || linux
// +build dragonfly linux
package logging
import (
"os"
"syscall"
"time"
)
func (l *LogFile) createTime(stat os.FileInfo) time.Time {
stat_t := stat.Sys().(*syscall.Stat_t)
createTime := stat_t.Ctim
// Sec and Nsec are int32 in 32-bit architectures.
return time.Unix(int64(createTime.Sec), int64(createTime.Nsec)) //nolint:unconvert
}

View File

@ -0,0 +1,17 @@
//go:build solaris
// +build solaris
package logging
import (
"os"
"syscall"
"time"
)
func (l *LogFile) createTime(stat os.FileInfo) time.Time {
stat_t := stat.Sys().(*syscall.Stat_t)
createTime := stat_t.Ctim
// Sec and Nsec are int32 in 32-bit architectures.
return time.Unix(int64(createTime.Sec), int64(createTime.Nsec)) //nolint:unconvert
}

View File

@ -0,0 +1,14 @@
package logging
import (
"os"
"time"
)
func (l *LogFile) createTime(stat os.FileInfo) time.Time {
// Use `ModTime` as an approximation if the exact create time is not
// available.
// On Windows, the file create time is not updated after the active log
// rotates, so use `ModTime` as an approximation as well.
return stat.ModTime()
}