go.dedis.ch/onet/v4@v4.0.0-pre1/log/ui.go (about) 1 package log 2 3 import ( 4 "fmt" 5 "os" 6 "strconv" 7 ) 8 9 func lvlUI(l int, args ...interface{}) { 10 if DebugVisible() > 0 { 11 lvl(l, 3, args...) 12 } else { 13 print(l, args...) 14 } 15 } 16 17 // Info prints the arguments given with a 'info'-format 18 func Info(args ...interface{}) { 19 lvlUI(lvlInfo, args...) 20 } 21 22 // Print directly sends the arguments to the stdout 23 func Print(args ...interface{}) { 24 lvlUI(lvlPrint, args...) 25 } 26 27 // Warn prints out the warning message and quits 28 func Warn(args ...interface{}) { 29 lvlUI(lvlWarning, args...) 30 } 31 32 // Error prints out the error message and quits. If the 33 // argument is an error, it will print the stack trace. 34 func Error(args ...interface{}) { 35 last := len(args) - 1 36 if last >= 0 { 37 err, ok := args[last].(error) 38 if ok { 39 args[last] = fmt.Sprintf("%+v", err) 40 } 41 } 42 43 lvlUI(lvlError, args...) 44 } 45 46 // Panic prints out the panic message and panics 47 func Panic(args ...interface{}) { 48 lvlUI(lvlPanic, args...) 49 panic(fmt.Sprint(args...)) 50 } 51 52 // Fatal prints out the fatal message and quits 53 func Fatal(args ...interface{}) { 54 lvlUI(lvlFatal, args...) 55 os.Exit(1) 56 } 57 58 // Infof takes a format-string and calls Info 59 func Infof(f string, args ...interface{}) { 60 lvlUI(lvlInfo, fmt.Sprintf(f, args...)) 61 } 62 63 // Printf is like Print but takes a formatting-argument first 64 func Printf(f string, args ...interface{}) { 65 lvlUI(lvlPrint, fmt.Sprintf(f, args...)) 66 } 67 68 // Warnf is like Warn but with a format-string 69 func Warnf(f string, args ...interface{}) { 70 lvlUI(lvlWarning, fmt.Sprintf(f, args...)) 71 } 72 73 // Errorf is like Error but with a format-string 74 func Errorf(f string, args ...interface{}) { 75 lvlUI(lvlError, fmt.Sprintf(f, args...)) 76 } 77 78 // Panicf is like Panic but with a format-string 79 func Panicf(f string, args ...interface{}) { 80 lvlUI(lvlWarning, fmt.Sprintf(f, args...)) 81 panic(args) 82 } 83 84 // Fatalf is like Fatal but with a format-string 85 func Fatalf(f string, args ...interface{}) { 86 lvlUI(lvlFatal, fmt.Sprintf(f, args...)) 87 os.Exit(-1) 88 } 89 90 // ErrFatal calls log.Fatal in the case err != nil 91 func ErrFatal(err error, args ...interface{}) { 92 if err != nil { 93 lvlUI(lvlFatal, fmt.Sprint(args...)+" "+err.Error()) 94 os.Exit(1) 95 } 96 } 97 98 // ErrFatalf will call Fatalf when the error is non-nil 99 func ErrFatalf(err error, f string, args ...interface{}) { 100 if err != nil { 101 lvlUI(lvlFatal, fmt.Sprintf(f+" ", args...)+err.Error()) 102 os.Exit(1) 103 } 104 } 105 106 func print(lvl int, args ...interface{}) { 107 debugMut.Lock() 108 defer debugMut.Unlock() 109 out := stdOut 110 if lvl < lvlInfo { 111 out = stdErr 112 } 113 switch loggers[0].GetLoggerInfo().DebugLvl { 114 case FormatPython: 115 prefix := []string{"[-]", "[!]", "[X]", "[Q]", "[+]", ""} 116 ind := lvl - lvlWarning 117 if ind < 0 || ind > 4 { 118 panic("index out of range " + strconv.Itoa(ind)) 119 } 120 fmt.Fprint(out, prefix[ind], " ") 121 case FormatNone: 122 } 123 for i, a := range args { 124 fmt.Fprint(out, a) 125 if i != len(args)-1 { 126 fmt.Fprint(out, " ") 127 } 128 } 129 fmt.Fprint(out, "\n") 130 }