/
log.go
89 lines (71 loc) 路 2.15 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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package log
import (
"strings"
"github.com/andatoshiki/toshiki-rssbot/internal/config"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
var (
// Logger log target
Logger *zap.Logger
globalLogger *zap.Logger
zapConfig zap.Config
)
func init() {
logLevel := config.GetString("log.level")
if strings.ToLower(logLevel) == "debug" {
zapConfig.Level = zap.NewAtomicLevelAt(zapcore.DebugLevel)
zapConfig.EncoderConfig = zap.NewDevelopmentEncoderConfig()
} else {
zapConfig.Level = zap.NewAtomicLevelAt(zapcore.InfoLevel)
zapConfig.EncoderConfig = zap.NewProductionEncoderConfig()
}
// Log timestamp in human-readable format
zapConfig.EncoderConfig.EncodeTime = zapcore.RFC3339TimeEncoder
logFile := config.GetString("log.file")
if logFile != "" {
zapConfig.Sampling = &zap.SamplingConfig{
Initial: 100,
Thereafter: 100,
}
zapConfig.Encoding = "json"
zapConfig.OutputPaths = []string{logFile}
zapConfig.ErrorOutputPaths = []string{logFile}
} else {
zapConfig.OutputPaths = []string{"stderr"}
zapConfig.ErrorOutputPaths = []string{"stderr"}
zapConfig.EncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
zapConfig.Encoding = "console"
}
Logger, _ = zapConfig.Build()
zap.ReplaceGlobals(Logger)
globalLogger = Logger.WithOptions(zap.AddCallerSkip(1))
}
func Warn(args ...interface{}) {
globalLogger.Sugar().Warn(args...)
}
func Warnf(template string, args ...interface{}) {
globalLogger.Sugar().Warnf(template, args...)
}
func Errorf(template string, args ...interface{}) {
globalLogger.Sugar().Errorf(template, args...)
}
func Error(args ...interface{}) {
globalLogger.Sugar().Error(args...)
}
func Info(args ...interface{}) {
globalLogger.Sugar().Info(args...)
}
func Infof(template string, args ...interface{}) {
globalLogger.Sugar().Infof(template, args...)
}
func Fatal(args ...interface{}) {
globalLogger.Sugar().Fatal(args...)
}
// Fatalf uses fmt.Sprintf to log a templated message, then calls os.Exit.
func Fatalf(template string, args ...interface{}) {
globalLogger.Sugar().Fatalf(template, args...)
}
func Debugf(template string, args ...interface{}) {
globalLogger.Sugar().Debugf(template, args...)
}