/
logger.go
87 lines (76 loc) · 1.74 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
package logger
import (
"log"
"github.com/skkuding/codedang/iris/src/common/constants"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
type Mode int
type Level string
const (
DEBUG Level = "Debug"
INFO Level = "Info"
WARN Level = "Warn"
ERROR Level = "Error"
)
const (
File Mode = 1 + iota
Console
)
type Logger interface {
Log(level Level, msg string)
}
type logger struct {
zap *zap.Logger
}
func NewLogger(mode Mode, isProduction bool) *logger {
var zapLogger *zap.Logger
var cfg zap.Config
var err error
if isProduction {
cfg = zap.NewProductionConfig()
setMode(&cfg, mode, constants.LOG_PATH_PROD).
EncoderConfig = zap.NewProductionEncoderConfig()
cfg.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
zapLogger, err = cfg.Build(zap.AddCallerSkip(2))
if err != nil {
log.Fatalf("can't initialize zap logger: %v", err)
}
} else {
cfg = zap.NewDevelopmentConfig()
setMode(&cfg, mode, constants.LOG_PATH_DEV).
EncoderConfig = zap.NewDevelopmentEncoderConfig()
cfg.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
// cfg.Encoding = "json"
zapLogger, err = cfg.Build(zap.AddCallerSkip(2))
if err != nil {
log.Fatalf("can't initialize zap logger: %v", err)
}
}
return &logger{zap: zapLogger}
}
func setMode(cfg *zap.Config, mode Mode, logPath string) *zap.Config {
switch mode {
case Console:
case File:
cfg.OutputPaths = []string{logPath}
case File | Console:
cfg.OutputPaths = append(cfg.OutputPaths, logPath)
default:
log.Fatalf("invalid logger mode: %d", mode)
}
return cfg
}
func (l *logger) Log(level Level, msg string) {
defer l.zap.Sync()
switch level {
case DEBUG:
l.zap.Debug(msg)
case INFO:
l.zap.Info(msg)
case WARN:
l.zap.Warn(msg)
case ERROR:
l.zap.Error(msg)
}
}