20
initText = "Logger Init wasn't called"
21
flags = log.Ldate | log.Lmicroseconds | log.Lshortfile
22
EnvNetraLoggerLevel = "NETRA_LOGGER_LEVEL"
23
FatalLevel Level = iota
38
defaultLogger = &Logger{
39
outputLevel: DebugLevel,
40
inner: log.New(os.Stderr, initText, flags),
44
func Init(name string, errorLevel string, logFile io.Writer) (*Logger, error) {
47
errorLevel = strings.ToLower(errorLevel)
62
return nil, fmt.Errorf("invalid logger level %s", errorLevel)
67
iLogs := []io.Writer{logFile}
69
iLogs = append(iLogs, il)
74
inner: log.New(io.MultiWriter(iLogs...), name, flags),
76
l.closer = logFile.(io.Closer)
80
defer logLock.Unlock()
81
if !defaultLogger.initialized {
88
func (l *Logger) Close() {
90
defer logLock.Unlock()
91
if err := l.closer.Close(); err != nil {
92
fmt.Fprintf(os.Stderr, "Error on log %v closing %v\n", l.closer, err)
96
func (l *Logger) Debug(v ...interface{}) {
97
if l.outputLevel < DebugLevel {
100
l.output(DebugLevel, 0, fmt.Sprint(v...))
103
func (l *Logger) DebugDepth(depth int, v ...interface{}) {
104
if l.outputLevel < DebugLevel {
107
l.output(DebugLevel, depth, fmt.Sprint(v...))
110
func (l *Logger) Debugln(v ...interface{}) {
111
if l.outputLevel < DebugLevel {
114
l.output(DebugLevel, 0, fmt.Sprintln(v...))
117
func (l *Logger) Debugf(format string, v ...interface{}) {
118
if l.outputLevel < DebugLevel {
121
l.output(DebugLevel, 0, fmt.Sprintf(format, v...))
124
func (l *Logger) Info(v ...interface{}) {
125
if l.outputLevel < InfoLevel {
128
l.output(InfoLevel, 0, fmt.Sprint(v...))
131
func (l *Logger) InfoDepth(depth int, v ...interface{}) {
132
if l.outputLevel < InfoLevel {
135
l.output(InfoLevel, depth, fmt.Sprint(v...))
138
func (l *Logger) Infoln(v ...interface{}) {
139
if l.outputLevel < InfoLevel {
142
l.output(InfoLevel, 0, fmt.Sprintln(v...))
145
func (l *Logger) Infof(format string, v ...interface{}) {
146
if l.outputLevel < InfoLevel {
149
l.output(InfoLevel, 0, fmt.Sprintf(format, v...))
152
func (l *Logger) Warning(v ...interface{}) {
153
if l.outputLevel < WarnLevel {
156
l.output(WarnLevel, 0, fmt.Sprint(v...))
159
func (l *Logger) WarningDepth(depth int, v ...interface{}) {
160
if l.outputLevel < WarnLevel {
163
l.output(WarnLevel, depth, fmt.Sprint(v...))
166
func (l *Logger) Warningln(v ...interface{}) {
167
if l.outputLevel < WarnLevel {
170
l.output(WarnLevel, 0, fmt.Sprintln(v...))
173
func (l *Logger) Warningf(format string, v ...interface{}) {
174
if l.outputLevel < WarnLevel {
177
l.output(WarnLevel, 0, fmt.Sprintf(format, v...))
180
func (l *Logger) Error(v ...interface{}) {
181
if l.outputLevel < ErrorLevel {
184
l.output(ErrorLevel, 0, fmt.Sprint(v...))
187
func (l *Logger) ErrorDepth(depth int, v ...interface{}) {
188
if l.outputLevel < ErrorLevel {
191
l.output(ErrorLevel, depth, fmt.Sprint(v...))
194
func (l *Logger) Errorln(v ...interface{}) {
195
if l.outputLevel < ErrorLevel {
198
l.output(ErrorLevel, 0, fmt.Sprintln(v...))
201
func (l *Logger) Errorf(format string, v ...interface{}) {
202
if l.outputLevel < ErrorLevel {
205
l.output(ErrorLevel, 0, fmt.Sprintf(format, v...))
208
func (l *Logger) Fatal(v ...interface{}) {
209
l.output(FatalLevel, 0, fmt.Sprint(v...))
214
func (l *Logger) FatalDepth(depth int, v ...interface{}) {
215
l.output(FatalLevel, depth, fmt.Sprint(v...))
220
func (l *Logger) Fatalln(v ...interface{}) {
221
l.output(FatalLevel, 0, fmt.Sprintln(v...))
226
func (l *Logger) Fatalf(format string, v ...interface{}) {
227
l.output(FatalLevel, 0, fmt.Sprintf(format, v...))
232
func Info(v ...interface{}) {
233
defaultLogger.output(InfoLevel, 0, fmt.Sprint(v...))
236
func InfoDepth(depth int, v ...interface{}) {
237
defaultLogger.output(InfoLevel, depth, fmt.Sprint(v...))
240
func Infoln(v ...interface{}) {
241
defaultLogger.output(InfoLevel, 0, fmt.Sprintln(v...))
244
func Infof(format string, v ...interface{}) {
245
defaultLogger.output(InfoLevel, 0, fmt.Sprintf(format, v...))
248
func Warning(v ...interface{}) {
249
defaultLogger.output(WarnLevel, 0, fmt.Sprint(v...))
252
func WarningDepth(depth int, v ...interface{}) {
253
defaultLogger.output(WarnLevel, depth, fmt.Sprint(v...))
256
func Warningln(v ...interface{}) {
257
defaultLogger.output(WarnLevel, 0, fmt.Sprintln(v...))
260
func Warningf(format string, v ...interface{}) {
261
defaultLogger.output(WarnLevel, 0, fmt.Sprintf(format, v...))
264
func Error(v ...interface{}) {
265
defaultLogger.output(ErrorLevel, 0, fmt.Sprint(v...))
268
func ErrorDepth(depth int, v ...interface{}) {
269
defaultLogger.output(ErrorLevel, depth, fmt.Sprint(v...))
272
func Errorln(v ...interface{}) {
273
defaultLogger.output(ErrorLevel, 0, fmt.Sprintln(v...))
276
func Errorf(format string, v ...interface{}) {
277
defaultLogger.output(ErrorLevel, 0, fmt.Sprintf(format, v...))
280
func Fatal(v ...interface{}) {
281
defaultLogger.output(FatalLevel, 0, fmt.Sprint(v...))
282
defaultLogger.Close()
286
func FatalDepth(depth int, v ...interface{}) {
287
defaultLogger.output(FatalLevel, depth, fmt.Sprint(v...))
288
defaultLogger.Close()
292
func Fatalln(v ...interface{}) {
293
defaultLogger.output(FatalLevel, 0, fmt.Sprintln(v...))
294
defaultLogger.Close()
298
func Fatalf(format string, v ...interface{}) {
299
defaultLogger.output(FatalLevel, 0, fmt.Sprintf(format, v...))
300
defaultLogger.Close()
304
func (l *Logger) output(s Level, depth int, txt string) {
306
var switchFrameLvl = 3
308
case s == FatalLevel && l.outputLevel >= FatalLevel:
309
l.inner.Output(switchFrameLvl+depth, "FATAL: "+txt)
310
case s == ErrorLevel && l.outputLevel >= ErrorLevel:
311
l.inner.Output(switchFrameLvl+depth, "ERROR: "+txt)
312
case s == WarnLevel && l.outputLevel >= WarnLevel:
313
l.inner.Output(switchFrameLvl+depth, "WARN: "+txt)
314
case s == InfoLevel && l.outputLevel >= InfoLevel:
315
l.inner.Output(switchFrameLvl+depth, "INFO: "+txt)
316
case s == DebugLevel && l.outputLevel >= DebugLevel:
317
l.inner.Output(switchFrameLvl+depth, "DEBUG: "+txt)