101 lines
2.6 KiB
Go
101 lines
2.6 KiB
Go
package logger
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io"
|
|
"log"
|
|
"runtime"
|
|
)
|
|
|
|
const (
|
|
// Colors
|
|
_LogColorReset = "\033[0m"
|
|
_LogColorRedBold = "\033[1;31m"
|
|
_LogColorGreenBold = "\033[1;32m"
|
|
_LogColorYellowBold = "\033[1;33m"
|
|
_LogColorBlueBold = "\033[1;34m"
|
|
_LogColorMagentaBold = "\033[1;35m"
|
|
_LogColorCyanBold = "\033[1;36m"
|
|
_LogColorWhiteBold = "\033[1;37m"
|
|
)
|
|
|
|
type Console struct {
|
|
level int
|
|
|
|
stdOutput *log.Logger
|
|
errOutput *log.Logger
|
|
|
|
debugStr, infoStr, warnStr, errStr string
|
|
}
|
|
|
|
func (output *Console) Level() int {
|
|
return output.level
|
|
}
|
|
func (output *Console) SetLevel(level int) int {
|
|
old := output.level
|
|
output.level = level
|
|
return old
|
|
}
|
|
func (output *Console) Init(level int, colorful bool, normal, err io.Writer) {
|
|
output.level = level
|
|
output.stdOutput = log.New(normal, "", log.Ldate|log.Lmicroseconds)
|
|
output.errOutput = log.New(err, "", log.Ldate|log.Lmicroseconds)
|
|
|
|
if colorful {
|
|
output.debugStr = _LogColorWhiteBold + "[Debug] " + _LogColorReset
|
|
output.infoStr = _LogColorBlueBold + "[Info] " + _LogColorReset
|
|
output.warnStr = _LogColorMagentaBold + "[Warn] " + _LogColorReset
|
|
output.errStr = _LogColorRedBold + "[Error] " + _LogColorReset
|
|
} else {
|
|
output.infoStr = "[Debug] "
|
|
output.infoStr = "[Info] "
|
|
output.warnStr = "[Warn] "
|
|
output.errStr = "[Error] "
|
|
}
|
|
}
|
|
|
|
func (output *Console) Debug(format string, v ...interface{}) {
|
|
if Debug >= output.level {
|
|
output.DebugForce(format, v...)
|
|
}
|
|
}
|
|
func (output *Console) Info(format string, v ...interface{}) {
|
|
if Info >= output.level {
|
|
output.InfoForce(format, v...)
|
|
}
|
|
}
|
|
func (output *Console) Warn(format string, v ...interface{}) {
|
|
if Warn >= output.level {
|
|
output.WarnForce(format, v...)
|
|
}
|
|
}
|
|
func (output *Console) Error(format string, v ...interface{}) {
|
|
if Error >= output.level {
|
|
output.ErrorForce(format, v...)
|
|
}
|
|
}
|
|
|
|
func (output *Console) DebugForce(format string, v ...interface{}) {
|
|
var buff bytes.Buffer
|
|
buff.WriteString(output.debugStr)
|
|
buff.WriteString(format)
|
|
output.stdOutput.Printf(buff.String(), v...)
|
|
}
|
|
func (output *Console) InfoForce(format string, v ...interface{}) {
|
|
var buff bytes.Buffer
|
|
buff.WriteString(output.infoStr)
|
|
buff.WriteString(format)
|
|
output.stdOutput.Printf(buff.String(), v...)
|
|
}
|
|
func (output *Console) WarnForce(format string, v ...interface{}) {
|
|
var buff bytes.Buffer
|
|
buff.WriteString(output.warnStr)
|
|
buff.WriteString(format)
|
|
output.stdOutput.Printf(buff.String(), v...)
|
|
}
|
|
func (output *Console) ErrorForce(format string, v ...interface{}) {
|
|
_, file, line, _ := runtime.Caller(2)
|
|
output.errOutput.Printf(fmt.Sprintf("%s%s\n\tfile: %s:%d", output.errStr, format, file, line), v...)
|
|
}
|