/
logger.go
58 lines (48 loc) · 1.35 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
package logger
import (
"log/syslog"
"os"
"github.com/spf13/viper"
"github.com/tchap/zapext/v2/zapsyslog"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
// New Logger
func New(v *viper.Viper) (*zap.Logger, error) {
lvl := getLoggerLevel(v)
encoder := zapcore.NewConsoleEncoder(zapcore.EncoderConfig{
MessageKey: "msg",
LevelKey: "level",
TimeKey: zapcore.OmitKey,
NameKey: "logger",
CallerKey: zapcore.OmitKey,
FunctionKey: zapcore.OmitKey,
StacktraceKey: "trace",
EncodeLevel: zapcore.LowercaseLevelEncoder,
EncodeTime: zapcore.ISO8601TimeEncoder,
EncodeDuration: zapcore.StringDurationEncoder,
})
core := zapcore.NewCore(encoder, os.Stdout, lvl)
if v.GetString("logger_syslog_addr") == "" {
return zap.New(core), nil
}
v.SetDefault("logger_syslog_protocol", "udp")
v.SetDefault("logger_syslog_app_name", "redmine_mattermost_bot")
writer, err := syslog.Dial(
v.GetString("logger_syslog_protocol"),
v.GetString("logger_syslog_addr"),
syslog.LOG_LOCAL5,
v.GetString("logger_syslog_app_name"),
)
if err != nil {
return nil, err
}
return zap.New(zapsyslog.NewCore(lvl, encoder, writer)), nil
}
func getLoggerLevel(v *viper.Viper) zapcore.Level {
var l zapcore.Level
if err := l.UnmarshalText([]byte(v.GetString("logger_level"))); err != nil {
return zapcore.ErrorLevel
}
return l
}