/
logger.go
60 lines (52 loc) · 1.21 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
package cmd
import (
"io"
"os"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)
const (
logFile = "./saslwatch.log"
)
// LevelWriter interface
type LevelWriter struct {
io.Writer
Level zerolog.Level
}
func (lw *LevelWriter) WriteLevel(l zerolog.Level, p []byte) (n int, err error) {
if l >= lw.Level {
return lw.Write(p)
}
return len(p), nil
}
func setLogger(debug bool) error {
var logWriter *os.File
var err error
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
zerolog.SetGlobalLevel(zerolog.InfoLevel)
if debug {
zerolog.SetGlobalLevel(zerolog.DebugLevel)
logWriter, err = os.OpenFile(
logFile,
os.O_APPEND|os.O_CREATE|os.O_WRONLY,
0664,
)
if err != nil {
panic(err)
}
}
fileWriter := zerolog.New(zerolog.ConsoleWriter{
Out: logWriter,
NoColor: true,
PartsExclude: []string{"time", "level"},
})
consoleWriter := zerolog.NewConsoleWriter(
func(w *zerolog.ConsoleWriter) {
w.Out = os.Stderr
w.PartsExclude = []string{"time"}
},
)
consoleWriterLeveled := &LevelWriter{Writer: consoleWriter, Level: zerolog.ErrorLevel}
log.Logger = zerolog.New(zerolog.MultiLevelWriter(fileWriter, consoleWriterLeveled)).With().Timestamp().Logger()
return nil
}