-
Notifications
You must be signed in to change notification settings - Fork 3
/
logger.go
68 lines (59 loc) · 1.62 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
// Copyright (c) ClaceIO, LLC
// SPDX-License-Identifier: Apache-2.0
package utils
import (
"io"
"os"
"path"
"strings"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
lumberjack "gopkg.in/natefinch/lumberjack.v2"
)
type Logger struct {
*zerolog.Logger
}
func NewLogger(config *LogConfig) *Logger {
var writers []io.Writer
if config.Console {
writers = append(writers, zerolog.ConsoleWriter{Out: os.Stderr})
}
if config.File {
fileWriter := RollingFileLogger(config, "clace.json")
if fileWriter != nil {
writers = append(writers, fileWriter)
}
}
mw := io.MultiWriter(writers...)
level := strings.ToUpper(config.Level)
logLevel := zerolog.InfoLevel
switch level {
case "WARN":
logLevel = zerolog.WarnLevel
case "INFO":
logLevel = zerolog.InfoLevel
case "DEBUG":
logLevel = zerolog.DebugLevel
case "TRACE":
logLevel = zerolog.TraceLevel
default:
log.Warn().Str("level", level).Msg("Unknown log level, defaulting to INFO")
logLevel = zerolog.InfoLevel
}
logger := zerolog.New(mw).Level(logLevel).With().Caller().Timestamp().Logger()
logger.Info().Str("loglevel", logger.GetLevel().String()).Int("maxSizeMB",
config.MaxSizeMB).Int("backups", config.MaxBackups).Msg("Logger initialized ")
return &Logger{&logger}
}
func RollingFileLogger(config *LogConfig, logType string) io.Writer {
dir := os.ExpandEnv("$CL_HOME/logs")
if err := os.MkdirAll(dir, 0744); err != nil {
log.Error().Err(err).Str("path", dir).Msg("cannot create logging directory")
return nil
}
return &lumberjack.Logger{
Filename: path.Join(dir, logType),
MaxBackups: config.MaxBackups,
MaxSize: config.MaxSizeMB,
}
}