package loggers import ( "fmt" "io" "os" "time" "github.com/haydenhargreaves/Potion/internal/infrastructure/logging" ) type ConsoleLogger struct { writer io.Writer } var _ logging.Logger = (*ConsoleLogger)(nil) func NewConsoleLogger() logging.Logger { return &ConsoleLogger{ writer: os.Stdout, } } func formatLevelString(level logging.LogLevel) string { switch level { case logging.LogLevelTrace: return fmt.Sprintf("%s[%s]%s", logging.BgMagenta, level, logging.Reset) case logging.LogLevelDebug: return fmt.Sprintf("%s[%s]%s", logging.BgBlue, level, logging.Reset) case logging.LogLevelInformation: return fmt.Sprintf("%s[%s]%s", logging.BgGreen, level, logging.Reset) case logging.LogLevelWarning: return fmt.Sprintf("%s[%s]%s", logging.BgYellow, level, logging.Reset) case logging.LogLevelError: return fmt.Sprintf("%s[%s]%s", logging.BgRed, level, logging.Reset) case logging.LogLevelFatal: return fmt.Sprintf("%s[%s]%s", logging.BgRed, level, logging.Reset) } return fmt.Sprintf("[%s]", level) } func (l *ConsoleLogger) Log(level logging.LogLevel, format string, v ...any) { timestamp := time.Now().UTC().Format("01/02/2006 - 15:04:05") levelStr := formatLevelString(level) fullFormat := fmt.Sprintf("%-18s %s | %s\n", levelStr, timestamp, format) bytes := fmt.Appendf(nil, fullFormat, v...) l.writer.Write(bytes) }