package log import ( "fmt" "os" "path/filepath" "runtime" "strings" "time" ) var level = 0 const ( // TRACE level TRACE = 0 // DEBUG level DEBUG = 1 // INFO level INFO = 2 // WARNING level WARNING = 3 // ERROR level ERROR = 4 // FATAL level FATAL = 5 ) // Init func func Init(l int) { level = l } // IsDebugEnable func func IsDebugEnable() bool { return level <= DEBUG } // Trace log func Trace(a ...interface{}) { if level <= TRACE { for i := 1; i > 0 && i < 100; i++ { _, path, _, _ := runtime.Caller(i) if path != "" { if strings.HasSuffix(path, "/libexec/src/runtime/panic.go") { _, path, line, _ := runtime.Caller(i + 1) _, file := filepath.Split(path) fmt.Fprintf(os.Stderr, "TRACE: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprint(a...)) return } } else { i = -999 } } _, path, line, _ := runtime.Caller(1) _, file := filepath.Split(path) fmt.Printf("TRACE: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprint(a...)) } } // Tracef log func Tracef(format string, a ...interface{}) { if level <= TRACE { for i := 1; i > 0 && i < 100; i++ { _, path, _, _ := runtime.Caller(i) if path != "" { if strings.HasSuffix(path, "/libexec/src/runtime/panic.go") { _, path, line, _ := runtime.Caller(i + 1) _, file := filepath.Split(path) fmt.Fprintf(os.Stderr, "TRACE: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprintf(format, a...)) return } } else { i = -999 } } _, path, line, _ := runtime.Caller(1) _, file := filepath.Split(path) fmt.Printf("TRACE: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprintf(format, a...)) } } // Debug log func Debug(a ...interface{}) { if level <= DEBUG { for i := 1; i > 0 && i < 100; i++ { _, path, _, _ := runtime.Caller(i) if path != "" { if strings.HasSuffix(path, "/libexec/src/runtime/panic.go") { _, path, line, _ := runtime.Caller(i + 1) _, file := filepath.Split(path) fmt.Fprintf(os.Stderr, "DEBUG: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprint(a...)) return } } else { i = -999 } } _, path, line, _ := runtime.Caller(1) _, file := filepath.Split(path) fmt.Printf("DEBUG: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprint(a...)) } } // Debugf log func Debugf(format string, a ...interface{}) { if level <= DEBUG { for i := 1; i > 0 && i < 100; i++ { _, path, _, _ := runtime.Caller(i) if path != "" { if strings.HasSuffix(path, "/libexec/src/runtime/panic.go") { _, path, line, _ := runtime.Caller(i + 1) _, file := filepath.Split(path) fmt.Fprintf(os.Stderr, "DEBUG: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprintf(format, a...)) return } } else { i = -999 } } _, path, line, _ := runtime.Caller(1) _, file := filepath.Split(path) fmt.Printf("DEBUG: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprintf(format, a...)) } } // Info log func Info(a ...interface{}) { if level <= INFO { for i := 1; i > 0 && i < 100; i++ { _, path, _, _ := runtime.Caller(i) if path != "" { if strings.HasSuffix(path, "/libexec/src/runtime/panic.go") { _, path, line, _ := runtime.Caller(i + 1) _, file := filepath.Split(path) fmt.Fprintf(os.Stderr, "INFO: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprint(a...)) return } } else { i = -999 } } _, path, line, _ := runtime.Caller(1) _, file := filepath.Split(path) fmt.Printf("INFO: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprint(a...)) } } // Infof log func Infof(format string, a ...interface{}) { if level <= INFO { for i := 1; i > 0 && i < 100; i++ { _, path, _, _ := runtime.Caller(i) if path != "" { if strings.HasSuffix(path, "/libexec/src/runtime/panic.go") { _, path, line, _ := runtime.Caller(i + 1) _, file := filepath.Split(path) fmt.Fprintf(os.Stderr, "INFO: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprintf(format, a...)) return } } else { i = -999 } } _, path, line, _ := runtime.Caller(1) _, file := filepath.Split(path) fmt.Printf("INFO: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprintf(format, a...)) } } // Warning log func Warning(a ...interface{}) { if level <= WARNING { for i := 1; i > 0 && i < 100; i++ { _, path, _, _ := runtime.Caller(i) if path != "" { if strings.HasSuffix(path, "/libexec/src/runtime/panic.go") { _, path, line, _ := runtime.Caller(i + 1) _, file := filepath.Split(path) fmt.Fprintf(os.Stderr, "WARN: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprint(a...)) return } } else { i = -999 } } _, path, line, _ := runtime.Caller(1) _, file := filepath.Split(path) fmt.Printf("WARN: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprint(a...)) } } // Warningf log func Warningf(format string, a ...interface{}) { if level <= WARNING { for i := 1; i > 0 && i < 100; i++ { _, path, _, _ := runtime.Caller(i) if path != "" { if strings.HasSuffix(path, "/libexec/src/runtime/panic.go") { _, path, line, _ := runtime.Caller(i + 1) _, file := filepath.Split(path) fmt.Fprintf(os.Stderr, "WARN: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprintf(format, a...)) return } } else { i = -999 } } _, path, line, _ := runtime.Caller(1) _, file := filepath.Split(path) fmt.Printf("WARN: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprintf(format, a...)) } } // Error log func Error(a ...interface{}) { if level <= ERROR { for i := 1; i > 0 && i < 100; i++ { _, path, _, _ := runtime.Caller(i) if path != "" { if strings.HasSuffix(path, "/libexec/src/runtime/panic.go") { _, path, line, _ := runtime.Caller(i + 1) _, file := filepath.Split(path) fmt.Fprintf(os.Stderr, "ERROR: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprint(a...)) return } } else { i = -999 } } _, path, line, _ := runtime.Caller(1) _, file := filepath.Split(path) fmt.Fprintf(os.Stderr, "ERROR: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprint(a...)) } } // Errorf log func Errorf(format string, a ...interface{}) { if level <= ERROR { for i := 1; i > 0 && i < 100; i++ { _, path, _, _ := runtime.Caller(i) if path != "" { if strings.HasSuffix(path, "/libexec/src/runtime/panic.go") { _, path, line, _ := runtime.Caller(i + 1) _, file := filepath.Split(path) fmt.Fprintf(os.Stderr, "ERROR: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprintf(format, a...)) return } } else { i = -999 } } _, path, line, _ := runtime.Caller(1) _, file := filepath.Split(path) fmt.Fprintf(os.Stderr, "ERROR: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprintf(format, a...)) } }