go-clean-template

Форк
0
102 строки · 2.0 Кб
1
package logger
2

3
import (
4
	"fmt"
5
	"os"
6
	"strings"
7

8
	"github.com/rs/zerolog"
9
)
10

11
// Interface -.
12
type Interface interface {
13
	Debug(message interface{}, args ...interface{})
14
	Info(message string, args ...interface{})
15
	Warn(message string, args ...interface{})
16
	Error(message interface{}, args ...interface{})
17
	Fatal(message interface{}, args ...interface{})
18
}
19

20
// Logger -.
21
type Logger struct {
22
	logger *zerolog.Logger
23
}
24

25
var _ Interface = (*Logger)(nil)
26

27
// New -.
28
func New(level string) *Logger {
29
	var l zerolog.Level
30

31
	switch strings.ToLower(level) {
32
	case "error":
33
		l = zerolog.ErrorLevel
34
	case "warn":
35
		l = zerolog.WarnLevel
36
	case "info":
37
		l = zerolog.InfoLevel
38
	case "debug":
39
		l = zerolog.DebugLevel
40
	default:
41
		l = zerolog.InfoLevel
42
	}
43

44
	zerolog.SetGlobalLevel(l)
45

46
	skipFrameCount := 3
47
	logger := zerolog.New(os.Stdout).With().Timestamp().CallerWithSkipFrameCount(zerolog.CallerSkipFrameCount + skipFrameCount).Logger()
48

49
	return &Logger{
50
		logger: &logger,
51
	}
52
}
53

54
// Debug -.
55
func (l *Logger) Debug(message interface{}, args ...interface{}) {
56
	l.msg("debug", message, args...)
57
}
58

59
// Info -.
60
func (l *Logger) Info(message string, args ...interface{}) {
61
	l.log(message, args...)
62
}
63

64
// Warn -.
65
func (l *Logger) Warn(message string, args ...interface{}) {
66
	l.log(message, args...)
67
}
68

69
// Error -.
70
func (l *Logger) Error(message interface{}, args ...interface{}) {
71
	if l.logger.GetLevel() == zerolog.DebugLevel {
72
		l.Debug(message, args...)
73
	}
74

75
	l.msg("error", message, args...)
76
}
77

78
// Fatal -.
79
func (l *Logger) Fatal(message interface{}, args ...interface{}) {
80
	l.msg("fatal", message, args...)
81

82
	os.Exit(1)
83
}
84

85
func (l *Logger) log(message string, args ...interface{}) {
86
	if len(args) == 0 {
87
		l.logger.Info().Msg(message)
88
	} else {
89
		l.logger.Info().Msgf(message, args...)
90
	}
91
}
92

93
func (l *Logger) msg(level string, message interface{}, args ...interface{}) {
94
	switch msg := message.(type) {
95
	case error:
96
		l.log(msg.Error(), args...)
97
	case string:
98
		l.log(msg, args...)
99
	default:
100
		l.log(fmt.Sprintf("%s message %v has unknown type %v", level, message, msg), args...)
101
	}
102
}
103

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.