107 lines
1.8 KiB
Go
107 lines
1.8 KiB
Go
|
package util
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"os"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
// LevelError 错误
|
||
|
LevelError = iota
|
||
|
// LevelWarning 警告
|
||
|
LevelWarning
|
||
|
// LevelInformational 提示
|
||
|
LevelInformational
|
||
|
// LevelDebug 除错
|
||
|
LevelDebug
|
||
|
)
|
||
|
|
||
|
var logger *Logger
|
||
|
|
||
|
// Logger 日志
|
||
|
type Logger struct {
|
||
|
level int
|
||
|
}
|
||
|
|
||
|
// Println 打印
|
||
|
func (ll *Logger) Println(msg string) {
|
||
|
fmt.Printf("%s %s", time.Now().Format("2006-01-02 15:04:05 -0700"), msg)
|
||
|
}
|
||
|
|
||
|
// Panic 极端错误
|
||
|
func (ll *Logger) Panic(format string, v ...interface{}) {
|
||
|
if LevelError > ll.level {
|
||
|
return
|
||
|
}
|
||
|
msg := fmt.Sprintf("[Panic] "+format, v...)
|
||
|
ll.Println(msg)
|
||
|
os.Exit(0)
|
||
|
}
|
||
|
|
||
|
// Error 错误
|
||
|
func (ll *Logger) Error(format string, v ...interface{}) {
|
||
|
if LevelError > ll.level {
|
||
|
return
|
||
|
}
|
||
|
msg := fmt.Sprintf("[E] "+format, v...)
|
||
|
ll.Println(msg)
|
||
|
}
|
||
|
|
||
|
// Warning 警告
|
||
|
func (ll *Logger) Warning(format string, v ...interface{}) {
|
||
|
if LevelWarning > ll.level {
|
||
|
return
|
||
|
}
|
||
|
msg := fmt.Sprintf("[W] "+format, v...)
|
||
|
ll.Println(msg)
|
||
|
}
|
||
|
|
||
|
// Info 信息
|
||
|
func (ll *Logger) Info(format string, v ...interface{}) {
|
||
|
if LevelInformational > ll.level {
|
||
|
return
|
||
|
}
|
||
|
msg := fmt.Sprintf("[I] "+format, v...)
|
||
|
ll.Println(msg)
|
||
|
}
|
||
|
|
||
|
// Debug 校验
|
||
|
func (ll *Logger) Debug(format string, v ...interface{}) {
|
||
|
if LevelDebug > ll.level {
|
||
|
return
|
||
|
}
|
||
|
msg := fmt.Sprintf("[D] "+format, v...)
|
||
|
ll.Println(msg)
|
||
|
}
|
||
|
|
||
|
// BuildLogger 构建logger
|
||
|
func BuildLogger(level string) {
|
||
|
intLevel := LevelError
|
||
|
switch level {
|
||
|
case "error":
|
||
|
intLevel = LevelError
|
||
|
case "warning":
|
||
|
intLevel = LevelWarning
|
||
|
case "info":
|
||
|
intLevel = LevelInformational
|
||
|
case "debug":
|
||
|
intLevel = LevelDebug
|
||
|
}
|
||
|
l := Logger{
|
||
|
level: intLevel,
|
||
|
}
|
||
|
logger = &l
|
||
|
}
|
||
|
|
||
|
// Log 返回日志对象
|
||
|
func Log() *Logger {
|
||
|
if logger == nil {
|
||
|
l := Logger{
|
||
|
level: LevelDebug,
|
||
|
}
|
||
|
logger = &l
|
||
|
}
|
||
|
return logger
|
||
|
}
|