logb/logb.go

99 lines
1.5 KiB
Go
Executable File

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 Get() Level {
return level
}
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...)
}
}