This repository has been archived by the owner on Mar 30, 2019. It is now read-only.
/
log.go
59 lines (52 loc) · 1.49 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
package log
import (
"fmt"
"os"
"path/filepath"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
// NewLogger creates a default "sugared" logger based on dev toggle
func NewLogger(logpath string, dev bool) (sugar *zap.SugaredLogger, err error) {
var logger *zap.Logger
var config zap.Config
if dev {
// Log: DebugLevel
// Encoder: console
// Errors: stderr
// Sampling: no
// Stacktraces: WarningLevel
// Colors: capitals
config = zap.NewDevelopmentConfig()
config.EncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
} else {
// Log: InfoLevel
// Encoder: json
// Errors: stderr
// Sampling: yes
// Stacktraces: ErrorLevel
config = zap.NewProductionConfig()
}
// set log paths
if logpath != "" {
if err = os.MkdirAll(filepath.Dir(logpath), os.ModePerm); err != nil {
return nil, fmt.Errorf("failed to create directories for logpath '%s': %s",
logpath, err.Error())
}
config.OutputPaths = append(config.OutputPaths, logpath)
}
if logger, err = config.Build(); err != nil {
return nil, err
}
return logger.Sugar(), nil
}
// NewProcessLogger creates a new logger that sets prefixes on fields for
// logging a specific process
func NewProcessLogger(l *zap.SugaredLogger, process string, fields ...interface{}) *zap.SugaredLogger {
args := make([]interface{}, len(fields))
for i := 0; i < len(fields); i += 2 {
args[i] = process + "." + fields[i].(string)
args[i+1] = fields[i+1]
}
return l.With(args...)
}