/
log.go
66 lines (52 loc) · 1.54 KB
/
log.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
package dlog
import (
"os"
"strconv"
"github.com/direktiv/direktiv/pkg/util"
"github.com/direktiv/direktiv/pkg/version"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
const direktivDebug = "DIREKTIV_DEBUG"
// ApplicationLogger returns logger for applications.
func ApplicationLogger(component string) (*zap.SugaredLogger, error) {
appLogger, err := customLogger()
if err != nil {
return nil, err
}
return appLogger.With(zap.String("component", component), zap.String("build", version.Version)).Sugar(), nil
}
// FunctionsLogger returns logger for functions.
func FunctionsLogger() (*zap.SugaredLogger, error) {
fnLogger, err := customLogger()
if err != nil {
return nil, err
}
return fnLogger.With(zap.String("component", "function")).Sugar(), nil
}
func customLogger() (*zap.Logger, error) {
l, _ := strconv.ParseBool(os.Getenv(direktivDebug))
inLvl := zapcore.InfoLevel
if l {
inLvl = zapcore.DebugLevel
}
errOut := zapcore.Lock(os.Stderr)
logLvl := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool {
return lvl >= inLvl
})
// console
encoderCfg := zap.NewProductionEncoderConfig()
encoderCfg.TimeKey = "timestamp"
encoderCfg.EncodeTime = zapcore.RFC3339TimeEncoder
consoleEncoder := zapcore.NewConsoleEncoder(encoderCfg)
jsonEncoder := zapcore.NewJSONEncoder(encoderCfg)
core := zapcore.NewTee(
zapcore.NewCore(consoleEncoder, errOut, logLvl),
)
if os.Getenv(util.DirektivLogFormat) == "json" {
core = zapcore.NewTee(
zapcore.NewCore(jsonEncoder, errOut, logLvl),
)
}
return zap.New(core, zap.AddCaller()), nil
}