| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 | package logimport (	"fmt"	"io"	"log"	"os")const (	LevelNone uint8 = iota	LevelError	LevelWarning	LevelInfo	LevelDebug)const (	Flag = log.LstdFlags | log.Llongfile	callDepth = 2)var (	console      bool	defaultLevel uint8	debug   = log.New(os.Stdout, "[D] ", Flag)	info    = log.New(os.Stdout, "[I] ", Flag)	warning = log.New(os.Stdout, "[W] ", Flag)	errorLg = log.New(os.Stdout, "[E] ", Flag)	closer  io.Closer)func SetLevel(level uint8) {	defaultLevel = level}func SetOutput(w io.WriteCloser) {	lw := &loggerWrite{		level:   defaultLevel,		console: console,		w:       w,	}	closer = lw	debug.SetOutput(lw)	info.SetOutput(lw)	warning.SetOutput(lw)	errorLg.SetOutput(lw)}func SetConsole(r bool) {	console = r}func Close() error {	if closer == nil {		return nil	}	return closer.Close()}func Debug(f string, v ...interface{}) {	if defaultLevel < LevelDebug {		return	}	_ = debug.Output(callDepth, fmt.Sprintf(f, v...))}func Info(f string, v ...interface{}) {	if defaultLevel < LevelInfo {		return	}	_ = info.Output(callDepth, fmt.Sprintf(f, v...))}func Warning(f string, v ...interface{}) {	if defaultLevel < LevelWarning {		return	}	_ = warning.Output(callDepth, fmt.Sprintf(f, v...))}func Error(f string, v ...interface{}) {	if defaultLevel < LevelError {		return	}	_ = errorLg.Output(callDepth, fmt.Sprintf(f, v...))}func Panic(f string, v ...interface{}) {	s := fmt.Sprintf(f, v...)	_ = errorLg.Output(callDepth, s)	_ = Close()	panic(s)}func Fatal(f string, v ...interface{}) {	_ = errorLg.Output(callDepth, fmt.Sprintf(f, v...))	_ = Close()	os.Exit(1)}type loggerWrite struct {	level   uint8	console bool	closed  bool	w       io.WriteCloser}func (l *loggerWrite) Write(p []byte) (n int, err error) {	if l.closed {		return 0, nil	}	if l.level == LevelWarning || l.level == LevelError || l.console {		_, _ = os.Stdout.Write(p)	}	return l.w.Write(p)}func (l *loggerWrite) Close() error {	if l.closed {		return nil	}	return l.w.Close()}func init() {	defaultLevel = LevelDebug}
 |