ziggs/internal/config/logger.go

60 lines
1.5 KiB
Go
Raw Normal View History

2022-02-16 14:10:25 +00:00
package config
import (
"os"
"strings"
"time"
"github.com/rs/zerolog"
2022-07-31 08:23:26 +00:00
"git.tcp.direct/kayos/ziggs/internal/common"
2022-02-16 14:10:25 +00:00
)
var (
// CurrentLogFile is used for accessing the location of the currently used log file across packages.
CurrentLogFile string
logFile *os.File
2022-07-31 08:23:26 +00:00
LogDir string
2022-02-16 14:10:25 +00:00
logger zerolog.Logger
started bool
)
// StartLogger instantiates an instance of our zerolog loggger so we can hook it in our main package.
// While this does return a logger, it should not be used for additional retrievals of the logger. Use GetLogger()
func StartLogger() *zerolog.Logger {
2022-07-31 08:23:26 +00:00
LogDir = Snek.GetString("logger.directory")
if err := os.MkdirAll(LogDir, 0o755); err != nil {
println("cannot create log directory: " + LogDir + "(" + err.Error() + ")")
2022-02-16 14:10:25 +00:00
os.Exit(1)
}
2022-07-31 08:23:26 +00:00
tnow := common.Title
2022-02-16 14:10:25 +00:00
if Snek.GetBool("logger.use_date_filename") {
tnow = strings.ReplaceAll(time.Now().Format(time.RFC822), " ", "_")
tnow = strings.ReplaceAll(tnow, ":", "-")
}
2022-07-31 08:23:26 +00:00
CurrentLogFile = LogDir + tnow + ".log"
2022-02-16 14:10:25 +00:00
if logFile, err = os.OpenFile(CurrentLogFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0o666); err != nil {
println("cannot create log file: " + err.Error())
os.Exit(1)
}
defer func() {
started = true
}()
multi := zerolog.MultiLevelWriter(zerolog.ConsoleWriter{NoColor: NoColor, Out: os.Stdout}, logFile)
logger = zerolog.New(multi).With().Timestamp().Logger()
return &logger
}
// GetLogger retrieves our global logger object
func GetLogger() *zerolog.Logger {
for !started {
time.Sleep(10 * time.Millisecond)
}
return &logger
}