-
-
Notifications
You must be signed in to change notification settings - Fork 80
/
logger.go
66 lines (62 loc) · 1.27 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
package logging
import (
"context"
"go.uber.org/fx"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"os"
)
type Params struct {
fx.In
Config Config
}
type Result struct {
fx.Out
Logger *zap.Logger
Sugar *zap.SugaredLogger
AppHook fx.Hook `group:"app_hooks"`
}
func New(params Params) Result {
var appHook fx.Hook
var encoder zapcore.Encoder
if params.Config.Json {
encoder = zapcore.NewJSONEncoder(jsonEncoderConfig)
} else {
encoder = zapcore.NewConsoleEncoder(consoleEncoderConfig)
}
writeSyncer := zapcore.AddSync(os.Stdout)
opts := []zap.Option{
zap.AddStacktrace(zapcore.ErrorLevel),
zap.AddCaller(),
}
if params.Config.Development {
opts = append(opts, zap.Development())
}
core := zapcore.NewCore(
encoder,
writeSyncer,
levelToZapLevel(params.Config.Level),
)
if params.Config.FileRotator.Enabled {
fWriteSyncer := newFileRotator(params.Config.FileRotator)
core = zapcore.NewTee(
core,
zapcore.NewCore(
zapcore.NewJSONEncoder(jsonEncoderConfig),
fWriteSyncer,
levelToZapLevel(params.Config.FileRotator.Level),
),
)
appHook = fx.Hook{
OnStop: func(context.Context) error {
return fWriteSyncer.Close()
},
}
}
l := zap.New(core, opts...)
return Result{
Logger: l,
Sugar: l.Sugar(),
AppHook: appHook,
}
}