Browse Source

Backport of NET-3181 - Allow log file naming like Nomad into release/1.15.x (#18629)

* backport of commit a5ad366403

* backport of commit 24e7b9b960

* NET-3181 - Allow log file naming like Nomad (#18617)

* fixes file name for consul

* added log file

* added tests for rename method

---------

Co-authored-by: absolutelightning <ashesh.vidyut@hashicorp.com>
Co-authored-by: Ashesh Vidyut <134911583+absolutelightning@users.noreply.github.com>
pull/18641/head^2
hc-github-team-consul-core 1 year ago committed by GitHub
parent
commit
bfa612ccee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      .changelog/18617.txt
  2. 20
      logging/logfile.go
  3. 16
      logging/logfile_test.go

4
.changelog/18617.txt

@ -0,0 +1,4 @@
```release-note:improvement
log: Currently consul logs files like this consul-{timestamp}.log. This change makes sure that there is always
consul.log file with the latest logs in it.
```

20
logging/logfile.go

@ -57,10 +57,8 @@ func (l *LogFile) fileNamePattern() string {
}
func (l *LogFile) openNew() error {
fileNamePattern := l.fileNamePattern()
createTime := now()
newfileName := fmt.Sprintf(fileNamePattern, strconv.FormatInt(createTime.UnixNano(), 10))
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
@ -76,12 +74,28 @@ func (l *LogFile) openNew() error {
return nil
}
func (l *LogFile) renameCurrentFile() error {
fileNamePattern := l.fileNamePattern()
createTime := now()
// Current file is consul.log always
currentFilePath := filepath.Join(l.logPath, l.fileName)
oldFileName := fmt.Sprintf(fileNamePattern, strconv.FormatInt(createTime.UnixNano(), 10))
oldFilePath := filepath.Join(l.logPath, oldFileName)
return os.Rename(currentFilePath, oldFilePath)
}
func (l *LogFile) rotate() error {
// Get the time from the last point of contact
timeElapsed := time.Since(l.LastCreated)
// Rotate if we hit the byte file limit or the time limit
if (l.BytesWritten >= int64(l.MaxBytes) && (l.MaxBytes > 0)) || timeElapsed >= l.duration {
l.FileInfo.Close()
if err := l.renameCurrentFile(); err != nil {
return err
}
if err := l.pruneFiles(); err != nil {
return err
}

16
logging/logfile_test.go

@ -48,6 +48,22 @@ func TestLogFile_openNew(t *testing.T) {
require.Contains(t, string(content), msg)
}
func TestLogFile_renameCurrentFile(t *testing.T) {
logFile := LogFile{
fileName: "consul.log",
logPath: testutil.TempDir(t, ""),
duration: defaultRotateDuration,
}
err := logFile.openNew()
require.NoError(t, err)
err = logFile.renameCurrentFile()
require.NoError(t, err)
_, err = os.ReadFile(logFile.FileInfo.Name())
require.Contains(t, err.Error(), "no such file or directory")
}
func TestLogFile_Rotation_MaxBytes(t *testing.T) {
tempDir := testutil.TempDir(t, "LogWriterBytes")
logFile := LogFile{

Loading…
Cancel
Save