github.com/qiniu/x@v1.11.9/xlog/xlog.go (about) 1 package xlog 2 3 import ( 4 "fmt" 5 "io" 6 "os" 7 "runtime" 8 9 "github.com/qiniu/x/log" 10 "github.com/qiniu/x/reqid" 11 12 . "context" 13 ) 14 15 const ( 16 Ldate = log.Ldate 17 Ltime = log.Ltime 18 Lmicroseconds = log.Lmicroseconds 19 Llongfile = log.Llongfile 20 Lshortfile = log.Lshortfile 21 Lmodule = log.Lmodule 22 Llevel = log.Llevel 23 LstdFlags = log.LstdFlags 24 Ldefault = log.Ldefault 25 ) 26 27 const ( 28 Ldebug = log.Ldebug 29 Linfo = log.Linfo 30 Lwarn = log.Lwarn 31 Lerror = log.Lerror 32 Lpanic = log.Lpanic 33 Lfatal = log.Lfatal 34 ) 35 36 // ============================================================================ 37 // type *Logger 38 39 type Logger struct { 40 ReqId string 41 } 42 43 func New(reqId string) *Logger { 44 45 return &Logger{reqId} 46 } 47 48 func NewWith(ctx Context) *Logger { 49 50 reqId, ok := reqid.FromContext(ctx) 51 if !ok { 52 log.Debug("xlog.New: reqid isn't find in context") 53 } 54 return &Logger{reqId} 55 } 56 57 func (xlog *Logger) Spawn(child string) *Logger { 58 59 return &Logger{xlog.ReqId + "." + child} 60 } 61 62 // ============================================================================ 63 64 // Print calls Output to print to the standard Logger. 65 // Arguments are handled in the manner of fmt.Print. 66 func (xlog *Logger) Print(v ...interface{}) { 67 log.Std.Output(xlog.ReqId, log.Linfo, 2, fmt.Sprint(v...)) 68 } 69 70 // Printf calls Output to print to the standard Logger. 71 // Arguments are handled in the manner of fmt.Printf. 72 func (xlog *Logger) Printf(format string, v ...interface{}) { 73 log.Std.Output(xlog.ReqId, log.Linfo, 2, fmt.Sprintf(format, v...)) 74 } 75 76 // Println calls Output to print to the standard Logger. 77 // Arguments are handled in the manner of fmt.Println. 78 func (xlog *Logger) Println(v ...interface{}) { 79 log.Std.Output(xlog.ReqId, log.Linfo, 2, fmt.Sprintln(v...)) 80 } 81 82 // ----------------------------------------- 83 84 func (xlog *Logger) Debugf(format string, v ...interface{}) { 85 if log.Ldebug < log.Std.Level { 86 return 87 } 88 log.Std.Output(xlog.ReqId, log.Ldebug, 2, fmt.Sprintf(format, v...)) 89 } 90 91 func (xlog *Logger) Debug(v ...interface{}) { 92 if log.Ldebug < log.Std.Level { 93 return 94 } 95 log.Std.Output(xlog.ReqId, log.Ldebug, 2, fmt.Sprintln(v...)) 96 } 97 98 // ----------------------------------------- 99 100 func (xlog *Logger) Infof(format string, v ...interface{}) { 101 if log.Linfo < log.Std.Level { 102 return 103 } 104 log.Std.Output(xlog.ReqId, log.Linfo, 2, fmt.Sprintf(format, v...)) 105 } 106 107 func (xlog *Logger) Info(v ...interface{}) { 108 if log.Linfo < log.Std.Level { 109 return 110 } 111 log.Std.Output(xlog.ReqId, log.Linfo, 2, fmt.Sprintln(v...)) 112 } 113 114 // ----------------------------------------- 115 116 func (xlog *Logger) Warnf(format string, v ...interface{}) { 117 log.Std.Output(xlog.ReqId, log.Lwarn, 2, fmt.Sprintf(format, v...)) 118 } 119 120 func (xlog *Logger) Warn(v ...interface{}) { 121 log.Std.Output(xlog.ReqId, log.Lwarn, 2, fmt.Sprintln(v...)) 122 } 123 124 // ----------------------------------------- 125 126 func (xlog *Logger) Errorf(format string, v ...interface{}) { 127 log.Std.Output(xlog.ReqId, log.Lerror, 2, fmt.Sprintf(format, v...)) 128 } 129 130 func (xlog *Logger) Error(v ...interface{}) { 131 log.Std.Output(xlog.ReqId, log.Lerror, 2, fmt.Sprintln(v...)) 132 } 133 134 // ----------------------------------------- 135 136 // Fatal is equivalent to Print() followed by a call to os.Exit(1). 137 func (xlog *Logger) Fatal(v ...interface{}) { 138 log.Std.Output(xlog.ReqId, log.Lfatal, 2, fmt.Sprint(v...)) 139 os.Exit(1) 140 } 141 142 // Fatalf is equivalent to Printf() followed by a call to os.Exit(1). 143 func (xlog *Logger) Fatalf(format string, v ...interface{}) { 144 log.Std.Output(xlog.ReqId, log.Lfatal, 2, fmt.Sprintf(format, v...)) 145 os.Exit(1) 146 } 147 148 // Fatalln is equivalent to Println() followed by a call to os.Exit(1). 149 func (xlog *Logger) Fatalln(v ...interface{}) { 150 log.Std.Output(xlog.ReqId, log.Lfatal, 2, fmt.Sprintln(v...)) 151 os.Exit(1) 152 } 153 154 // ----------------------------------------- 155 156 // Panic is equivalent to Print() followed by a call to panic(). 157 func (xlog *Logger) Panic(v ...interface{}) { 158 s := fmt.Sprint(v...) 159 log.Std.Output(xlog.ReqId, log.Lpanic, 2, s) 160 panic(s) 161 } 162 163 // Panicf is equivalent to Printf() followed by a call to panic(). 164 func (xlog *Logger) Panicf(format string, v ...interface{}) { 165 s := fmt.Sprintf(format, v...) 166 log.Std.Output(xlog.ReqId, log.Lpanic, 2, s) 167 panic(s) 168 } 169 170 // Panicln is equivalent to Println() followed by a call to panic(). 171 func (xlog *Logger) Panicln(v ...interface{}) { 172 s := fmt.Sprintln(v...) 173 log.Std.Output(xlog.ReqId, log.Lpanic, 2, s) 174 panic(s) 175 } 176 177 func (xlog *Logger) Stack(v ...interface{}) { 178 s := fmt.Sprint(v...) 179 s += "\n" 180 buf := make([]byte, 1024*1024) 181 n := runtime.Stack(buf, true) 182 s += string(buf[:n]) 183 s += "\n" 184 log.Std.Output(xlog.ReqId, log.Lerror, 2, s) 185 } 186 187 func (xlog *Logger) SingleStack(v ...interface{}) { 188 s := fmt.Sprint(v...) 189 s += "\n" 190 buf := make([]byte, 1024*1024) 191 n := runtime.Stack(buf, false) 192 s += string(buf[:n]) 193 s += "\n" 194 log.Std.Output(xlog.ReqId, log.Lerror, 2, s) 195 } 196 197 // ============================================================================ 198 199 func SetOutput(w io.Writer) { 200 log.SetOutput(w) 201 } 202 203 func SetFlags(flag int) { 204 log.SetFlags(flag) 205 } 206 207 func SetOutputLevel(lvl int) { 208 log.SetOutputLevel(lvl) 209 } 210 211 // ============================================================================