package slog import ( "fmt" "io" ) type SLogLevel int const ( ERROR SLogLevel = iota WARN INFO DEBUG ) type SLogger struct { level SLogLevel loggers []io.Writer } func NewSLogger() (ret *SLogger) { ret = &SLogger{} ret.level = ERROR ret.loggers = []io.Writer{NewStdoutLogger()} return ret } var DefaultSLog = NewSLogger() func (sl *SLogger) Log(level SLogLevel, format string, a ...interface{}) { if level > sl.level { return } for _, l := range sl.loggers { msg := fmt.Sprintf(format, a...) l.Write([]byte(msg)) } } func LOG_ERROR(format string, a ...interface{}) { DefaultSLog.Log(ERROR, "[ERROR] - "+format, a...) } func LOG_WARN(format string, a ...interface{}) { DefaultSLog.Log(WARN, "[WARN] - "+format, a...) } func LOG_INFO(format string, a ...interface{}) { DefaultSLog.Log(INFO, "[INFO] - "+format, a...) } func LOG_DEBUG(format string, a ...interface{}) { DefaultSLog.Log(DEBUG, "[DEBUG] - "+format, a...) } func SET_LEVEL(level SLogLevel) { DefaultSLog.SetLevel(level) } func ADD_LOGGER(logger io.Writer) { DefaultSLog.AddLogger(logger) } func SET_LOGGERS(loggers []io.Writer) { DefaultSLog.SetLoggers(loggers) } func CLEAR_LOGGERS() { DefaultSLog.ClearLoggers() } func (sl *SLogger) SetLevel(level SLogLevel) { sl.level = level } func (sl *SLogger) AddLogger(logger io.Writer) { sl.loggers = append(sl.loggers, logger) } func (sl *SLogger) SetLoggers(loggers []io.Writer) { sl.loggers = loggers } func (sl *SLogger) ClearLoggers() { sl.loggers = []io.Writer{} }