@@ -5,27 +5,37 @@ import (
55 "log"
66 "os"
77 "runtime"
8+ "time"
89)
910
1011var myLogger * log.Logger
1112var file * os.File
1213
13- func Setup (fileName string ) {
14+ func Setup (fileName string ) error {
1415
16+ // Take care of log rotation by renaming existing file
17+ if fileExists (fileName ) {
18+ renameFile (fileName )
19+ }
20+
21+ // Create new log file
1522 var err error
1623 file , err = os .Create (fileName )
1724 if err != nil {
1825 fmt .Println ("ERROR: failed to create file with filename: " , fileName )
19- return
26+ return err
2027 }
2128 myLogger = log .New (file , "" , log .LstdFlags )
29+ return nil
2230}
2331
24- func Stop () {
32+ func Stop () error {
2533 err := file .Close ()
2634 if err != nil {
2735 fmt .Println ("Error: failed to close file with filename: " + file .Name ())
36+ return err
2837 }
38+ return nil
2939}
3040
3141func Info (msg string , args ... any ) {
@@ -44,6 +54,21 @@ func Error(msg string, args ...any) {
4454 logMessage ("[ERROR]" , msg , args ... )
4555}
4656
57+ func renameFile (oldName string ) {
58+ // Append timestamp to old file name with format YYYYMMDD_HHMMSS.ms, based on time lib's format.go reference.
59+ timestamp := time .Now ().Format ("20060102_150405.00" )
60+ newFileName := oldName + "." + timestamp
61+ err := os .Rename (oldName , newFileName )
62+ if err != nil {
63+ fmt .Println ("ERROR: failed to rename existing file: " , oldName , "to" , newFileName )
64+ }
65+ }
66+
67+ func fileExists (filename string ) bool {
68+ _ , err := os .Stat (filename )
69+ return err == nil
70+ }
71+
4772func logMessage (severity string , msg string , args ... any ) {
4873 prefix := generatePrefix (severity , 3 )
4974 myLogger .Println (prefix + fmt .Sprintf (msg , args ... ))
0 commit comments