github.com/gogf/gf@v1.16.9/os/glog/glog_logger_chaining.go (about) 1 // Copyright GoFrame Author(https://goframe.org). All Rights Reserved. 2 // 3 // This Source Code Form is subject to the terms of the MIT License. 4 // If a copy of the MIT was not distributed with this file, 5 // You can obtain one at https://github.com/gogf/gf. 6 7 package glog 8 9 import ( 10 "context" 11 "github.com/gogf/gf/internal/intlog" 12 "io" 13 14 "github.com/gogf/gf/os/gfile" 15 ) 16 17 // Ctx is a chaining function, 18 // which sets the context for current logging. 19 func (l *Logger) Ctx(ctx context.Context, keys ...interface{}) *Logger { 20 if ctx == nil { 21 return l 22 } 23 logger := (*Logger)(nil) 24 if l.parent == nil { 25 logger = l.Clone() 26 } else { 27 logger = l 28 } 29 logger.ctx = ctx 30 if len(keys) > 0 { 31 logger.SetCtxKeys(keys...) 32 } 33 return logger 34 } 35 36 // To is a chaining function, 37 // which redirects current logging content output to the specified `writer`. 38 func (l *Logger) To(writer io.Writer) *Logger { 39 logger := (*Logger)(nil) 40 if l.parent == nil { 41 logger = l.Clone() 42 } else { 43 logger = l 44 } 45 logger.SetWriter(writer) 46 return logger 47 } 48 49 // Path is a chaining function, 50 // which sets the directory path to `path` for current logging content output. 51 // 52 // Note that the parameter `path` is a directory path, not a file path. 53 func (l *Logger) Path(path string) *Logger { 54 logger := (*Logger)(nil) 55 if l.parent == nil { 56 logger = l.Clone() 57 } else { 58 logger = l 59 } 60 if path != "" { 61 if err := logger.SetPath(path); err != nil { 62 // panic(err) 63 intlog.Error(l.getCtx(), err) 64 } 65 } 66 return logger 67 } 68 69 // Cat is a chaining function, 70 // which sets the category to `category` for current logging content output. 71 // Param `category` can be hierarchical, eg: module/user. 72 func (l *Logger) Cat(category string) *Logger { 73 logger := (*Logger)(nil) 74 if l.parent == nil { 75 logger = l.Clone() 76 } else { 77 logger = l 78 } 79 if logger.config.Path != "" { 80 if err := logger.SetPath(gfile.Join(logger.config.Path, category)); err != nil { 81 // panic(err) 82 intlog.Error(l.getCtx(), err) 83 } 84 } 85 return logger 86 } 87 88 // File is a chaining function, 89 // which sets file name `pattern` for the current logging content output. 90 func (l *Logger) File(file string) *Logger { 91 logger := (*Logger)(nil) 92 if l.parent == nil { 93 logger = l.Clone() 94 } else { 95 logger = l 96 } 97 logger.SetFile(file) 98 return logger 99 } 100 101 // Level is a chaining function, 102 // which sets logging level for the current logging content output. 103 func (l *Logger) Level(level int) *Logger { 104 logger := (*Logger)(nil) 105 if l.parent == nil { 106 logger = l.Clone() 107 } else { 108 logger = l 109 } 110 logger.SetLevel(level) 111 return logger 112 } 113 114 // LevelStr is a chaining function, 115 // which sets logging level for the current logging content output using level string. 116 func (l *Logger) LevelStr(levelStr string) *Logger { 117 logger := (*Logger)(nil) 118 if l.parent == nil { 119 logger = l.Clone() 120 } else { 121 logger = l 122 } 123 if err := logger.SetLevelStr(levelStr); err != nil { 124 // panic(err) 125 intlog.Error(l.getCtx(), err) 126 } 127 return logger 128 } 129 130 // Skip is a chaining function, 131 // which sets stack skip for the current logging content output. 132 // It also affects the caller file path checks when line number printing enabled. 133 func (l *Logger) Skip(skip int) *Logger { 134 logger := (*Logger)(nil) 135 if l.parent == nil { 136 logger = l.Clone() 137 } else { 138 logger = l 139 } 140 logger.SetStackSkip(skip) 141 return logger 142 } 143 144 // Stack is a chaining function, 145 // which sets stack options for the current logging content output . 146 func (l *Logger) Stack(enabled bool, skip ...int) *Logger { 147 logger := (*Logger)(nil) 148 if l.parent == nil { 149 logger = l.Clone() 150 } else { 151 logger = l 152 } 153 logger.SetStack(enabled) 154 if len(skip) > 0 { 155 logger.SetStackSkip(skip[0]) 156 } 157 return logger 158 } 159 160 // StackWithFilter is a chaining function, 161 // which sets stack filter for the current logging content output . 162 func (l *Logger) StackWithFilter(filter string) *Logger { 163 logger := (*Logger)(nil) 164 if l.parent == nil { 165 logger = l.Clone() 166 } else { 167 logger = l 168 } 169 logger.SetStack(true) 170 logger.SetStackFilter(filter) 171 return logger 172 } 173 174 // Stdout is a chaining function, 175 // which enables/disables stdout for the current logging content output. 176 // It's enabled in default. 177 func (l *Logger) Stdout(enabled ...bool) *Logger { 178 logger := (*Logger)(nil) 179 if l.parent == nil { 180 logger = l.Clone() 181 } else { 182 logger = l 183 } 184 // stdout printing is enabled if `enabled` is not passed. 185 if len(enabled) > 0 && !enabled[0] { 186 logger.config.StdoutPrint = false 187 } else { 188 logger.config.StdoutPrint = true 189 } 190 return logger 191 } 192 193 // Header is a chaining function, 194 // which enables/disables log header for the current logging content output. 195 // It's enabled in default. 196 func (l *Logger) Header(enabled ...bool) *Logger { 197 logger := (*Logger)(nil) 198 if l.parent == nil { 199 logger = l.Clone() 200 } else { 201 logger = l 202 } 203 // header is enabled if `enabled` is not passed. 204 if len(enabled) > 0 && !enabled[0] { 205 logger.SetHeaderPrint(false) 206 } else { 207 logger.SetHeaderPrint(true) 208 } 209 return logger 210 } 211 212 // Line is a chaining function, 213 // which enables/disables printing its caller file path along with its line number. 214 // The parameter `long` specified whether print the long absolute file path, eg: /a/b/c/d.go:23, 215 // or else short one: d.go:23. 216 func (l *Logger) Line(long ...bool) *Logger { 217 logger := (*Logger)(nil) 218 if l.parent == nil { 219 logger = l.Clone() 220 } else { 221 logger = l 222 } 223 if len(long) > 0 && long[0] { 224 logger.config.Flags |= F_FILE_LONG 225 } else { 226 logger.config.Flags |= F_FILE_SHORT 227 } 228 return logger 229 } 230 231 // Async is a chaining function, 232 // which enables/disables async logging output feature. 233 func (l *Logger) Async(enabled ...bool) *Logger { 234 logger := (*Logger)(nil) 235 if l.parent == nil { 236 logger = l.Clone() 237 } else { 238 logger = l 239 } 240 // async feature is enabled if `enabled` is not passed. 241 if len(enabled) > 0 && !enabled[0] { 242 logger.SetAsync(false) 243 } else { 244 logger.SetAsync(true) 245 } 246 return logger 247 }