@@ -2,27 +2,47 @@ package logging
2
2
3
3
import (
4
4
"encoding/json"
5
+ "os"
5
6
6
7
"github.com/pkg/errors"
8
+ "go.uber.org/zap/zapcore"
7
9
)
8
10
9
11
type options struct {
10
- Format string `json:"format"`
11
- TraceHeader string `json:"traceHeader"`
12
- LogRequests bool `json:"logRequests"`
13
- LogResponses bool `json:"logResponses"`
14
- TimeFormat string `json:"timeFormat"`
15
- CallerSkip int `json:"callerSkip"`
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"`
16
19
}
17
20
18
21
func defaultOptions () * options {
19
22
return & options {
20
- Format : "json" ,
23
+ Format : formatFromEnv (),
24
+ Level : levelFromEnv (),
21
25
TraceHeader : DefaultTraceHeader ,
22
26
CallerSkip : 1 ,
23
27
}
24
28
}
25
29
30
+ func formatFromEnv () (format string ) {
31
+ if format = os .Getenv ("LOG_FORMAT" ); format == "" {
32
+ format = "json"
33
+ }
34
+ return
35
+ }
36
+
37
+ func levelFromEnv () (level zapcore.Level ) {
38
+ v := os .Getenv ("LOG_LEVEL" )
39
+ if err := level .UnmarshalText ([]byte (v )); err != nil {
40
+ level = zapcore .InfoLevel
41
+ }
42
+
43
+ return
44
+ }
45
+
26
46
func (o * options ) apply (opts []Option ) (err error ) {
27
47
for _ , fn := range opts {
28
48
if err = fn (o ); err != nil {
@@ -101,3 +121,11 @@ func WithCallerSkip(skip int) Option {
101
121
return nil
102
122
}
103
123
}
124
+
125
+ // WithLogLevel sets the verbosity of the logger.
126
+ func WithLogLevel (level zapcore.Level ) Option {
127
+ return func (o * options ) error {
128
+ o .Level = level
129
+ return nil
130
+ }
131
+ }
0 commit comments