67 lines
1.2 KiB
Go
67 lines
1.2 KiB
Go
package util
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"sync"
|
|
)
|
|
|
|
type Logger struct {
|
|
debug *log.Logger
|
|
info *log.Logger
|
|
error *log.Logger
|
|
}
|
|
|
|
var lock = &sync.Mutex{}
|
|
var logger *Logger
|
|
|
|
func GetLogger() *Logger {
|
|
if logger == nil {
|
|
lock.Lock()
|
|
defer lock.Unlock()
|
|
if logger == nil {
|
|
logger = NewLogger()
|
|
}
|
|
}
|
|
|
|
return logger
|
|
}
|
|
|
|
func NewLogger() *Logger {
|
|
// Create a new Logger for stdout and stderr
|
|
// Errors still go to both stdout and stderr
|
|
return &Logger{
|
|
debug: nil,
|
|
info: log.New(os.Stdout, "[INFO] ", log.LstdFlags),
|
|
error: log.New(os.Stderr, "[ERROR] ", log.LstdFlags),
|
|
}
|
|
}
|
|
|
|
func (logger *Logger) SetDebug(debug bool) {
|
|
if debug {
|
|
logger.Info("Enabling Debug logging for headplane-agent")
|
|
logger.Info("Be careful, this will spam a lot of information")
|
|
logger.debug = log.New(os.Stdout, "[DEBUG] ", log.LstdFlags)
|
|
} else {
|
|
logger.debug = nil
|
|
}
|
|
}
|
|
|
|
func (logger *Logger) Info(fmt string, v ...any) {
|
|
logger.info.Printf(fmt, v...)
|
|
}
|
|
|
|
func (logger *Logger) Debug(fmt string, v ...any) {
|
|
if logger.debug != nil {
|
|
logger.debug.Printf(fmt, v...)
|
|
}
|
|
}
|
|
|
|
func (logger *Logger) Error(fmt string, v ...any) {
|
|
logger.error.Printf(fmt, v...)
|
|
}
|
|
|
|
func (logger *Logger) Fatal(fmt string, v ...any) {
|
|
logger.error.Fatalf(fmt, v...)
|
|
}
|