Skip to content

Commit

Permalink
Backport of Net 3181 consul gh issue 15709 allow log file naming like…
Browse files Browse the repository at this point in the history
… nomad - fix bug into release/1.15.x (#18641)

* backport of commit a5ad366

* backport of commit 24e7b9b

* 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

* removed change log

---------

Co-authored-by: absolutelightning <[email protected]>
Co-authored-by: Ashesh Vidyut <[email protected]>
  • Loading branch information
3 people authored Sep 4, 2023
1 parent bfa612c commit 6bdd979
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 4 deletions.
13 changes: 9 additions & 4 deletions logging/logfile.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,19 +57,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
}
Expand Down
16 changes: 16 additions & 0 deletions logging/logfile_bsd.go
Original file line number Diff line number Diff line change
@@ -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 changes: 17 additions & 0 deletions logging/logfile_linux.go
Original file line number Diff line number Diff line change
@@ -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
}
17 changes: 17 additions & 0 deletions logging/logfile_solaris.go
Original file line number Diff line number Diff line change
@@ -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
}
14 changes: 14 additions & 0 deletions logging/logfile_windows.go
Original file line number Diff line number Diff line change
@@ -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()
}

0 comments on commit 6bdd979

Please sign in to comment.