From c13ba6359e288126a15eb5cb38be54df08aaf816 Mon Sep 17 00:00:00 2001 From: Sean Hickey Date: Wed, 28 Sep 2022 20:18:04 -0700 Subject: [PATCH] Fix logging to use ISO standard date --- config/config.go | 5 ----- config/logging.go | 46 +++++++++++++++++++++++++++++----------------- main.go | 19 +++++++++++++++---- 3 files changed, 44 insertions(+), 26 deletions(-) diff --git a/config/config.go b/config/config.go index 834b0b3..7d813d6 100644 --- a/config/config.go +++ b/config/config.go @@ -30,10 +30,5 @@ func Configure(filename string) (gosimpleconf.ConfigMap, error) { flagMap := gosimpleconf.SetupFlagOverrides(configMap) configMap = gosimpleconf.ParseFlags(configMap, flagMap) - err = SetupLogging(configMap) - if err != nil { - return nil, err - } - return configMap, nil } diff --git a/config/logging.go b/config/logging.go index d8c0cc9..57a9d3d 100644 --- a/config/logging.go +++ b/config/logging.go @@ -1,31 +1,43 @@ package config import ( + "fmt" "log" "os" - "path/filepath" - - "gitea.wisellama.rocks/Wisellama/gosimpleconf" + "time" ) -func SetupLogging(configMap gosimpleconf.ConfigMap) error { - writeToFile := gosimpleconf.Bool(configMap["log.writeToFile"]) +type logWriter struct { + writeToFile bool + logFile *os.File +} +func (w *logWriter) Write(bytes []byte) (int, error) { + t := time.Now().UTC().Format(time.RFC3339) + return fmt.Fprintf(w.logFile, "%v %v", t, string(bytes)) +} + +func (w *logWriter) Cleanup() { + defer w.logFile.Close() +} + +func SetupLogging(writeToFile bool, logFilename string) (*logWriter, error) { + var err error + log.SetFlags(0) + + logFile := os.Stdout if writeToFile { - logFile := configMap["log.file"] - filename, err := filepath.Abs(logFile) + logFile, err = os.OpenFile(logFilename, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) if err != nil { - return err + return nil, err } - - file, err := os.OpenFile(filename, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) - if err != nil { - return err - } - - log.SetOutput(file) } - log.Printf("=== START %v ===", configMap["game.title"]) - return nil + writer := &logWriter{ + writeToFile: writeToFile, + logFile: logFile, + } + log.SetOutput(writer) + + return writer, nil } diff --git a/main.go b/main.go index c07a528..288e7c6 100644 --- a/main.go +++ b/main.go @@ -3,7 +3,6 @@ package main import ( "fmt" "log" - "os" "runtime" "gitea.wisellama.rocks/Project-Ely/project-ely/config" @@ -13,15 +12,27 @@ import ( func main() { var err error + + // Read configuration configMap, err := config.Configure("game.conf") if err != nil { - log.Printf("error during configure: %v\n", err) - os.Exit(1) + log.Fatalf("error during configure: %v\n", err) } + // Setup logging + writeToFile := gosimpleconf.Bool(configMap["log.writeToFile"]) + logFilename := configMap["log.file"] + logWriter, err := config.SetupLogging(writeToFile, logFilename) + if err != nil { + log.Fatalf("error setting up logging: %v\n", err) + } + defer logWriter.Cleanup() + + // Start everything + log.Printf("=== Starting %v", configMap["game.title"]) err = run(configMap) if err != nil { - log.Fatal(err) + log.Fatalf("error running: %v\n", err) } }