83 lines
1.2 KiB
Go
83 lines
1.2 KiB
Go
// vi:ts=4:sts=4:sw=4:noet:tw=72
|
|
|
|
package xlog
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"runtime"
|
|
)
|
|
|
|
const (
|
|
FATAL = iota
|
|
ERROR
|
|
WARNING
|
|
INFO
|
|
DEBUG
|
|
)
|
|
|
|
var levelNames = map[int]string{
|
|
FATAL: "[FAT] ",
|
|
ERROR: "[ERR] ",
|
|
WARNING: "[WRN] ",
|
|
INFO: "[INF] ",
|
|
DEBUG: "[DBG] ",
|
|
}
|
|
|
|
var logLevel = DEBUG
|
|
var logger = log.New(&LogWriter{}, "", log.Ldate|log.Ltime)
|
|
|
|
type LogWriter struct {
|
|
}
|
|
|
|
func (w *LogWriter) Write(buf []byte) (int, error) {
|
|
fmt.Printf("%s", string(buf))
|
|
return len(buf), nil
|
|
}
|
|
|
|
func Init(lvl int) {
|
|
logLevel = lvl
|
|
}
|
|
|
|
func Log(lvl int, s string, a ...interface{}) {
|
|
if lvl <= logLevel {
|
|
_, file, line, ok := runtime.Caller(2)
|
|
if !ok {
|
|
file = "???"
|
|
} else {
|
|
short := file
|
|
for i := len(file) - 1; i > 0; i-- {
|
|
if file[i] == '/' {
|
|
short = file[i+1:]
|
|
break
|
|
}
|
|
}
|
|
file = short
|
|
}
|
|
l := fmt.Sprintf("%d", line)
|
|
logger.Printf(levelNames[lvl]+file+":"+l+": "+s, a...)
|
|
}
|
|
}
|
|
|
|
func Debug(s string, a ...interface{}) {
|
|
Log(DEBUG, s, a...)
|
|
}
|
|
|
|
func Info(s string, a ...interface{}) {
|
|
Log(INFO, s, a...)
|
|
}
|
|
|
|
func Warning(s string, a ...interface{}) {
|
|
Log(WARNING, s, a...)
|
|
}
|
|
|
|
func Error(s string, a ...interface{}) {
|
|
Log(ERROR, s, a...)
|
|
}
|
|
|
|
func Fatal(s string, a ...interface{}) {
|
|
Log(FATAL, s, a...)
|
|
os.Exit(0)
|
|
}
|