package logb import ( "fmt" "io" "os" ) var level Level = INFO var writer io.Writer = os.Stderr func Reset() { Set() } func Writer() io.Writer { return writer } func Set(l ...Level) { if len(l) < 1 { l = []Level{INFO} } level.Set(l[0]) Info("level set to", l[0]) } func SetWriter(w io.Writer) { writer = w } func Info(args ...interface{}) { log(INFO, args...) } func Warn(args ...interface{}) { log(WARN, args...) } func Error(args ...interface{}) { log(ERROR, args...) } func Debug(args ...interface{}) { log(DEBUG, args...) } func Verbose(args ...interface{}) { log(VERBOSE, args...) } func Infof(form string, args ...interface{}) { logf(INFO, form, args...) } func Warnf(form string, args ...interface{}) { logf(WARN, form, args...) } func Errorf(form string, args ...interface{}) { logf(ERROR, form, args...) } func Debugf(form string, args ...interface{}) { logf(DEBUG, form, args...) } func Verbosef(form string, args ...interface{}) { logf(VERBOSE, form, args...) } func log(lvl Level, args ...interface{}) { v := "" if len(args) > 0 { args = append([]interface{}{}, args...) v = fmt.Sprint(args) if len(args) > 1 { v = v[1 : len(v)-1] } } logf(lvl, "%s", v) } func logf(lvl Level, form string, args ...interface{}) { if !level.Should(lvl) { return } form = fmt.Sprintf("[%v] %s\n", lvl.String()[:3], form) if writer != os.Stderr { fmt.Fprintf(writer, form, args...) } else { fmt.Fprintf(os.Stderr, form, args...) } }