logging/logger.go

112 lines
2 KiB
Go

package logging
import (
"fmt"
"log"
"os"
)
type Logger struct {
name string
level Level
backends []Backend
}
func NewLogger(name string) (l *Logger) {
l = &Logger{
name: name,
level: DEFAULT_LEVEL,
}
return
}
// Add a new Backend to the logger
func (l *Logger) AddBackend(b Backend) {
l.backends = append(l.backends, b)
}
// Sets the backend list to the logger. Any existing backend will be lost
func (l *Logger) SetBackend(b ...Backend) {
l.backends = b
}
func (l *Logger) SetLevel(level Level) {
l.level = level
for _, backend := range l.backends {
backend.SetLevel(level)
}
}
type buffer struct {
level Level
logger *Logger
}
func (b *buffer) Write(p []byte) (n int, err error) {
b.logger.Log(b.level, string(p))
return len(p), nil
}
func (l *Logger) AsStdLog(level Level) *log.Logger {
stdLogger := log.New(&buffer{logger: l, level: level}, "", 0)
return stdLogger
}
func (l *Logger) Log(level Level, m string) {
r := NewRecord(l.name, level, m)
for _, backend := range l.backends {
if r.Level >= backend.Level() {
backend.Write(r)
}
}
}
func (l *Logger) Debug(text string) {
l.Log(DEBUG, text)
}
func (l *Logger) Debugf(text string, args ...interface{}) {
l.Debug(fmt.Sprintf(text, args...))
}
func (l *Logger) Info(text string) {
l.Log(INFO, text)
}
func (l *Logger) Infof(text string, args ...interface{}) {
l.Info(fmt.Sprintf(text, args...))
}
func (l *Logger) Warning(text string) {
l.Log(WARNING, text)
}
func (l *Logger) Warningf(text string, args ...interface{}) {
l.Warning(fmt.Sprintf(text, args...))
}
func (l *Logger) Error(text string) {
l.Log(ERROR, text)
}
func (l *Logger) Errorf(text string, args ...interface{}) {
l.Error(fmt.Sprintf(text, args...))
}
func (l *Logger) Critical(text string) {
l.Log(CRITICAL, text)
}
func (l *Logger) Criticalf(text string, args ...interface{}) {
l.Critical(fmt.Sprintf(text, args...))
}
func (l *Logger) Fatal(text string) {
l.Log(DEBUG, text)
os.Exit(100)
}
func (l *Logger) Fatalf(text string, args ...interface{}) {
l.Fatal(fmt.Sprintf(text, args...))
}