logger.prettyLogger   A
last analyzed

Complexity

Conditions 2

Size

Total Lines 6
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 6
nop 0
dl 0
loc 6
rs 10
c 0
b 0
f 0
1
package logger
2
3
import (
4
	"fmt"
5
	"io"
6
	"os"
7
	"path"
8
	"strings"
9
10
	"github.com/memnix/memnix-rest/config"
11
	"github.com/rs/zerolog"
12
	"github.com/rs/zerolog/diode"
13
	"github.com/rs/zerolog/log"
14
	"gopkg.in/natefinch/lumberjack.v2"
15
)
16
17
func prettyLogger() zerolog.ConsoleWriter {
18
	return zerolog.ConsoleWriter{
19
		Out:        os.Stderr,
20
		TimeFormat: zerolog.TimeFormatUnix,
21
		FormatLevel: func(i interface{}) string {
22
			return strings.ToUpper(fmt.Sprintf("[%s]", i))
23
		},
24
	}
25
}
26
27
func CreateLogger() {
28
	wr := diode.NewWriter(newRollingFile(), config.DiodeLoggerSize, config.DiodeLoggerTime, func(missed int) {
29
		log.Printf("Logger Dropped %d messages", missed)
30
	})
31
	switch os.Getenv("LOG_LEVEL") {
32
	case "debug":
33
		zerolog.SetGlobalLevel(zerolog.DebugLevel)
34
		log.Logger = log.Output(prettyLogger()).With().Caller().Logger()
35
		return
36
	case "info":
37
		zerolog.SetGlobalLevel(zerolog.InfoLevel)
38
	case "warn":
39
		zerolog.SetGlobalLevel(zerolog.WarnLevel)
40
	case "error":
41
		zerolog.SetGlobalLevel(zerolog.ErrorLevel)
42
	case "none":
43
		zerolog.SetGlobalLevel(zerolog.Disabled)
44
	default:
45
		zerolog.SetGlobalLevel(zerolog.WarnLevel)
46
	}
47
	log.Logger = log.Output(wr).With().Caller().Logger()
48
}
49
50
func newRollingFile() io.Writer {
51
	return &lumberjack.Logger{
52
		Filename:   path.Join("./logs", "logs.log"),
53
		MaxBackups: config.MaxBackupLogFiles, // files
54
		MaxSize:    config.MaxSizeLogFiles,   // megabytes
55
	}
56
}
57