| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- package util
- import (
- "fmt"
- "log"
- "os"
- "runtime"
- "strings"
- )
- var (
- _log = NewStdOutLogger("[GO-COMMON]", 3)
- )
- var (
- Debugf = _log.Debugf
- Warnf = _log.Warnf
- Infof = _log.Infof
- Errorf = _log.Errorf
- Fatalf = _log.Fatalf
- )
- func Painc(err error) {
- if err != nil {
- Errorf("%v", err)
- buf := make([]byte, 64<<10)
- buf = buf[:runtime.Stack(buf, false)]
- Fatalf("Happened panic:\n%s", buf)
- }
- }
- type Logger interface {
- Debugf(format string, v ...interface{})
- Infof(format string, v ...interface{})
- Errorf(format string, v ...interface{})
- Warnf(format string, v ...interface{})
- Fatalf(format string, v ...interface{})
- }
- type stdOutLogger struct {
- *log.Logger
- caller int
- }
- func NewStdOutLogger(prefix string, caller int) Logger {
- if prefix != "" && !strings.HasSuffix(prefix, " ") {
- prefix = prefix + " "
- }
- if caller == 0 {
- caller = 3
- }
- return &stdOutLogger{
- Logger: log.New(os.Stdout, prefix, log.Lshortfile|log.LstdFlags),
- caller: caller,
- }
- }
- func (s *stdOutLogger) output(level level, str string) {
- formatStr := ""
- switch level {
- case levelFatal:
- formatStr = "\033[35m[FATAL]\033[0m " + str
- case levelError:
- formatStr = "\033[31m[ERROR]\033[0m " + str
- case levelWarning:
- formatStr = "\033[33m[WARN]\033[0m " + str
- case levelInfo:
- formatStr = "\033[32m[INFO]\033[0m " + str
- case levelDebug:
- formatStr = "\033[36m[DEBUG]\033[0m " + str
- }
- _ = s.Output(s.caller, formatStr)
- }
- func (s *stdOutLogger) Debugf(format string, v ...interface{}) {
- s.output(levelDebug, fmt.Sprintf(format, v...))
- }
- func (s *stdOutLogger) Infof(format string, v ...interface{}) {
- s.output(levelInfo, fmt.Sprintf(format, v...))
- }
- func (s *stdOutLogger) Warnf(format string, v ...interface{}) {
- s.output(levelWarning, fmt.Sprintf(format, v...))
- }
- func (s *stdOutLogger) Errorf(format string, v ...interface{}) {
- s.output(levelError, fmt.Sprintf(format, v...))
- }
- func (s *stdOutLogger) Fatalf(format string, v ...interface{}) {
- s.output(levelFatal, fmt.Sprintf(format, v...))
- os.Exit(-1)
- }
- type (
- level int
- )
- const (
- levelFatal level = iota + 1
- levelError
- levelWarning
- levelInfo
- levelDebug
- )
|