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 {
|
||||
createTime := now()
|
||||
newfileName := l.fileName
|
||||
newfilePath := filepath.Join(l.logPath, newfileName)
|
||||
|
||||
// Try creating a file. We truncate the file because we are the only authority to write the logs
|
||||
filePointer, err := os.OpenFile(newfilePath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0640)
|
||||
// Try creating or opening the active log file. Since the active log file
|
||||
// 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 {
|
||||
return err
|
||||
}
|
||||
|
||||
l.FileInfo = filePointer
|
||||
stat, err := filePointer.Stat()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// New file, new bytes tracker, new creation time :)
|
||||
l.LastCreated = createTime
|
||||
l.LastCreated = l.createTime(stat)
|
||||
l.BytesWritten = 0
|
||||
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