Skip to content

Commit 653ea91

Browse files
committed
Implement log rotation and cleanup for logger; bump version to 0.1.1.0
1 parent 3af1ad5 commit 653ea91

File tree

3 files changed

+76
-4
lines changed

3 files changed

+76
-4
lines changed

cmd/logger/logger.go

+68
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package logger
22

33
import (
4+
"fmt"
45
"io"
56
"os"
7+
"path/filepath"
8+
"sort"
69
"time"
710

811
"github.com/charmbracelet/log"
@@ -11,6 +14,9 @@ import (
1114
var Logger *log.Logger
1215
var logFile *os.File
1316

17+
const maxLogSize = 10 * 1024 * 1024 // 10 MB
18+
const maxLogFiles = 2
19+
1420
func InitLogger(logPath, logFileName, logLevel string) error {
1521
var err error
1622
if logFileName == "" {
@@ -57,3 +63,65 @@ func CloseLogger() {
5763
logFile.Close()
5864
}
5965
}
66+
67+
func CheckLogSize(logPath, logFileName string) error {
68+
fileInfo, err := logFile.Stat()
69+
if err != nil {
70+
return err
71+
}
72+
if fileInfo.Size() >= maxLogSize {
73+
// Rotate the log file
74+
backupName := fmt.Sprintf("%s.%s", logFileName, time.Now().Format("20060102T150405"))
75+
if err := os.Rename(filepath.Join(logPath, logFileName), filepath.Join(logPath, backupName)); err != nil {
76+
return err
77+
}
78+
// Open a new log file
79+
logFile, err = os.OpenFile(filepath.Join(logPath, logFileName), os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
80+
if err != nil {
81+
return err
82+
}
83+
// Update the logger's output
84+
writer := io.Writer(logFile)
85+
Logger.SetOutput(writer)
86+
87+
// Remove old log files if there are more than maxLogFiles
88+
if err := RemoveOldLogFiles(logPath, logFileName); err != nil {
89+
return err
90+
}
91+
}
92+
return nil
93+
}
94+
95+
func RemoveOldLogFiles(logPath, logFileName string) error {
96+
files, err := os.ReadDir(logPath)
97+
if err != nil {
98+
return err
99+
}
100+
101+
var logFiles []os.FileInfo
102+
for _, file := range files {
103+
if file.Name() == logFileName || filepath.Ext(file.Name()) == ".log" {
104+
fileInfo, err := file.Info()
105+
if err != nil {
106+
return err
107+
}
108+
logFiles = append(logFiles, fileInfo)
109+
}
110+
}
111+
112+
if len(logFiles) <= maxLogFiles {
113+
return nil
114+
}
115+
116+
sort.Slice(logFiles, func(i, j int) bool {
117+
return logFiles[i].ModTime().After(logFiles[j].ModTime())
118+
})
119+
120+
for _, file := range logFiles[maxLogFiles:] {
121+
if err := os.Remove(filepath.Join(logPath, file.Name())); err != nil {
122+
return err
123+
}
124+
}
125+
126+
return nil
127+
}

main.go

+4
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ func main() {
3131
if err != nil {
3232
panic(err)
3333
}
34+
logErr := l.CheckLogSize(config.Logging.Path, config.Logging.File)
35+
if logErr != nil {
36+
l.Logger.Error("Failed to check log size", "Error", logErr)
37+
}
3438
defer l.CloseLogger()
3539
defer cleanupTempFiles()
3640
l.Logger.Info("Starting..")

versioninfo.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
"FileVersion": {
44
"Major": 0,
55
"Minor": 1,
6-
"Patch": 0,
6+
"Patch": 1,
77
"Build": 0
88
},
99
"ProductVersion": {
1010
"Major": 0,
1111
"Minor": 1,
12-
"Patch": 0,
12+
"Patch": 1,
1313
"Build": 0
1414
},
1515
"FileFlagsMask": "3f",
@@ -22,14 +22,14 @@
2222
"Comments": "Powershell Profile Launcher",
2323
"CompanyName": "Tatux Solutions",
2424
"FileDescription": "A PowerShell Profile Launcher TUI/CLI Application",
25-
"FileVersion": "0.1.0.0",
25+
"FileVersion": "0.1.1.0",
2626
"InternalName": "powershellprofilelauncher",
2727
"LegalCopyright": "Nigel Tatschner",
2828
"LegalTrademarks": "",
2929
"OriginalFilename": "powershellprofilelauncher.exe",
3030
"PrivateBuild": "",
3131
"ProductName": "PowerShellProfileLauncher",
32-
"ProductVersion": "v0.1.0.0",
32+
"ProductVersion": "v0.1.1.0",
3333
"SpecialBuild": ""
3434
},
3535
"VarFileInfo": {

0 commit comments

Comments
 (0)