mirror of https://github.com/status-im/consul.git
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:
parent
78e3cbe156
commit
13eefbb840
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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))
|
||||||
|
}
|
|
@ -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
|
||||||
|
}
|
|
@ -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
|
||||||
|
}
|
|
@ -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()
|
||||||
|
}
|
Loading…
Reference in New Issue