Skip to content

Commit 95d16de

Browse files
committed
refactored to use Level instead of zapcore.Level
1 parent 3c1f078 commit 95d16de

File tree

2 files changed

+62
-13
lines changed

2 files changed

+62
-13
lines changed

logger.go

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,53 @@ const (
2626
FatalLevel
2727
)
2828

29+
// MarshalText implements [encoding.TextMarshaler] for Level.
30+
func (l Level) MarshalText() ([]byte, error) {
31+
return []byte(l.String()), nil
32+
}
33+
34+
// String implements [fmt.Stringer] for Level.
35+
func (l Level) String() string {
36+
switch l {
37+
case DebugLevel:
38+
return "debug"
39+
case InfoLevel:
40+
return "info"
41+
case WarnLevel:
42+
return "warn"
43+
case ErrorLevel:
44+
return "error"
45+
case FatalLevel:
46+
return "fatal"
47+
default:
48+
return fmt.Sprintf("Level(%d)", l)
49+
}
50+
}
51+
52+
func (l Level) toZapCoreLevel() zapcore.Level {
53+
return zapcore.Level(l)
54+
}
55+
56+
// UnmarshalText implements [encoding.TextUnmarshaler] for Level.
57+
func (l *Level) UnmarshalText(text []byte) error {
58+
switch lit := strings.ToLower(string(text)); lit {
59+
default:
60+
return fmt.Errorf("invalid level: %q", lit)
61+
case "debug":
62+
*l = DebugLevel
63+
case "info", "":
64+
*l = InfoLevel
65+
case "warn":
66+
*l = WarnLevel
67+
case "error":
68+
*l = ErrorLevel
69+
case "fatal":
70+
*l = FatalLevel
71+
}
72+
73+
return nil
74+
}
75+
2976
// DefaultTraceHeader is the default header used as a trace id.
3077
const DefaultTraceHeader = "Traceparent"
3178

@@ -97,16 +144,18 @@ func New(name string, opts ...Option) (*Logger, error) {
97144
return nil, errors.Errorf("unsupported logger.format '%s'", o.Format)
98145
}
99146

147+
minLogLevel := o.Level.toZapCoreLevel()
148+
100149
// Logs info and debug to stdout
101150
outWriter := zapcore.Lock(os.Stdout)
102151
outLevel := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool {
103-
return lvl >= o.Level && lvl < zapcore.WarnLevel
152+
return lvl >= minLogLevel && lvl < zapcore.WarnLevel
104153
})
105154

106155
// Logs warning and errors to stderr
107156
errWriter := zapcore.Lock(os.Stderr)
108157
errLevel := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool {
109-
return lvl >= o.Level && lvl >= zapcore.WarnLevel
158+
return lvl >= minLogLevel && lvl >= zapcore.WarnLevel
110159
})
111160

112161
// Create zap.Logger

options.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,16 @@ import (
55
"os"
66

77
"github.com/pkg/errors"
8-
"go.uber.org/zap/zapcore"
98
)
109

1110
type options struct {
12-
Format string `json:"format"`
13-
Level zapcore.Level `json:"level"`
14-
TraceHeader string `json:"traceHeader"`
15-
LogRequests bool `json:"logRequests"`
16-
LogResponses bool `json:"logResponses"`
17-
TimeFormat string `json:"timeFormat"`
18-
CallerSkip int `json:"callerSkip"`
11+
Format string `json:"format"`
12+
Level Level `json:"level"`
13+
TraceHeader string `json:"traceHeader"`
14+
LogRequests bool `json:"logRequests"`
15+
LogResponses bool `json:"logResponses"`
16+
TimeFormat string `json:"timeFormat"`
17+
CallerSkip int `json:"callerSkip"`
1918
}
2019

2120
func defaultOptions() *options {
@@ -34,10 +33,10 @@ func formatFromEnv() (format string) {
3433
return
3534
}
3635

37-
func levelFromEnv() (level zapcore.Level) {
36+
func levelFromEnv() (level Level) {
3837
v := os.Getenv("LOG_LEVEL")
3938
if err := level.UnmarshalText([]byte(v)); err != nil {
40-
level = zapcore.InfoLevel
39+
level = InfoLevel
4140
}
4241

4342
return
@@ -123,9 +122,10 @@ func WithCallerSkip(skip int) Option {
123122
}
124123

125124
// WithLogLevel sets the verbosity of the logger.
126-
func WithLogLevel(level zapcore.Level) Option {
125+
func WithLogLevel(level Level) Option {
127126
return func(o *options) error {
128127
o.Level = level
128+
129129
return nil
130130
}
131131
}

0 commit comments

Comments
 (0)