/
logger.go
111 lines (86 loc) · 2.14 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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package logger
import (
"flag"
"net/http"
"os"
"regexp"
"strings"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
var (
_atom = zap.NewAtomicLevel()
_logger *zap.SugaredLogger
)
func init() {
var (
lvl = zap.InfoLevel
levelFlagName = "log-level"
levelFlagUsage = "minimum enabled logging level. debug|info|warn|error|dpanic|panic|fatal"
)
flag.Var(&lvl, levelFlagName, levelFlagUsage)
logArgs := regexp.MustCompile(`-{1,2}` + levelFlagName + `(?:\s+|\s*=\s*)(\w+)`).
FindString(strings.Join(os.Args[1:], " "))
if logArgs != "" {
// use local FlagSet to parse immediately
flagSet := flag.NewFlagSet("logger", flag.ContinueOnError)
flagSet.Var(&lvl, levelFlagName, levelFlagUsage)
flagSet.Parse(regexp.MustCompile(`\s+`).Split(logArgs, 2))
_atom.SetLevel(lvl)
}
encoderCfg := zap.NewProductionEncoderConfig()
encoderCfg.TimeKey = ""
_logger = zap.New(zapcore.NewCore(
zapcore.NewJSONEncoder(encoderCfg),
zapcore.Lock(os.Stdout),
_atom,
)).Sugar()
}
func Debug(msg string, kvs ...interface{}) {
_logger.Debugw(msg, kvs...)
}
func Debugf(msg string, args ...interface{}) {
_logger.Debugf(msg, args...)
}
func Info(msg string, kvs ...interface{}) {
_logger.Infow(msg, kvs...)
}
func Infof(msg string, args ...interface{}) {
_logger.Infof(msg, args...)
}
func Warn(msg string, kvs ...interface{}) {
_logger.Warnw(msg, kvs...)
}
func Warnf(msg string, args ...interface{}) {
_logger.Warnf(msg, args...)
}
func Error(msg string, kvs ...interface{}) {
_logger.Errorw(msg, kvs...)
}
func Errorf(msg string, args ...interface{}) {
_logger.Errorf(msg, args...)
}
func DPanic(msg string, kvs ...interface{}) {
_logger.DPanicw(msg, kvs...)
}
func DPanicf(msg string, args ...interface{}) {
_logger.DPanicf(msg, args...)
}
func Panic(msg string, kvs ...interface{}) {
_logger.Panicw(msg, kvs...)
}
func Panicf(msg string, args ...interface{}) {
_logger.Panicf(msg, args...)
}
func Fatal(msg string, kvs ...interface{}) {
_logger.Fatalw(msg, kvs...)
}
func Fatalf(msg string, args ...interface{}) {
_logger.Fatalf(msg, args...)
}
func HttpHandler() http.Handler {
return _atom
}
func Sync() {
_logger.Sync()
}