generated from logur/adapter-template
-
Notifications
You must be signed in to change notification settings - Fork 2
/
logger.go
120 lines (96 loc) · 2.76 KB
/
logger.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
// Package zap provides a Logur adapter for Uber's Zap.
package zap
import (
"context"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"logur.dev/logur"
"logur.dev/adapter/zap/internal/keyvals"
)
// Logger is a Logur adapter for Uber's Zap.
type Logger struct {
logger *zap.SugaredLogger
core zapcore.Core
}
// New returns a new Logur logger.
// If logger is nil, a default instance is created.
func New(logger *zap.Logger) *Logger {
if logger == nil {
logger = zap.L()
}
return &Logger{
logger: logger.Sugar(),
core: logger.Core(),
}
}
// Trace implements the Logur Logger interface.
func (l *Logger) Trace(msg string, fields ...map[string]interface{}) {
// Fall back to Debug
l.Debug(msg, fields...)
}
// Debug implements the Logur Logger interface.
func (l *Logger) Debug(msg string, fields ...map[string]interface{}) {
if !l.core.Enabled(zap.DebugLevel) {
return
}
l.logger.Debugw(msg, l.keyvals(fields)...)
}
// Info implements the Logur Logger interface.
func (l *Logger) Info(msg string, fields ...map[string]interface{}) {
if !l.core.Enabled(zap.InfoLevel) {
return
}
l.logger.Infow(msg, l.keyvals(fields)...)
}
// Warn implements the Logur Logger interface.
func (l *Logger) Warn(msg string, fields ...map[string]interface{}) {
if !l.core.Enabled(zap.WarnLevel) {
return
}
l.logger.Warnw(msg, l.keyvals(fields)...)
}
// Error implements the Logur Logger interface.
func (l *Logger) Error(msg string, fields ...map[string]interface{}) {
if !l.core.Enabled(zap.ErrorLevel) {
return
}
l.logger.Errorw(msg, l.keyvals(fields)...)
}
func (l *Logger) keyvals(fields []map[string]interface{}) []interface{} {
var kvs []interface{}
if len(fields) > 0 {
kvs = keyvals.FromMap(fields[0])
}
return kvs
}
func (l *Logger) TraceContext(_ context.Context, msg string, fields ...map[string]interface{}) {
l.Trace(msg, fields...)
}
func (l *Logger) DebugContext(_ context.Context, msg string, fields ...map[string]interface{}) {
l.Debug(msg, fields...)
}
func (l *Logger) InfoContext(_ context.Context, msg string, fields ...map[string]interface{}) {
l.Info(msg, fields...)
}
func (l *Logger) WarnContext(_ context.Context, msg string, fields ...map[string]interface{}) {
l.Warn(msg, fields...)
}
func (l *Logger) ErrorContext(_ context.Context, msg string, fields ...map[string]interface{}) {
l.Error(msg, fields...)
}
// LevelEnabled implements the Logur LevelEnabler interface.
func (l *Logger) LevelEnabled(level logur.Level) bool {
switch level {
case logur.Trace:
return l.core.Enabled(zap.DebugLevel)
case logur.Debug:
return l.core.Enabled(zap.DebugLevel)
case logur.Info:
return l.core.Enabled(zap.InfoLevel)
case logur.Warn:
return l.core.Enabled(zap.WarnLevel)
case logur.Error:
return l.core.Enabled(zap.ErrorLevel)
}
return true
}