go-clean-template
102 строки · 2.0 Кб
1package logger
2
3import (
4"fmt"
5"os"
6"strings"
7
8"github.com/rs/zerolog"
9)
10
11// Interface -.
12type Interface interface {
13Debug(message interface{}, args ...interface{})
14Info(message string, args ...interface{})
15Warn(message string, args ...interface{})
16Error(message interface{}, args ...interface{})
17Fatal(message interface{}, args ...interface{})
18}
19
20// Logger -.
21type Logger struct {
22logger *zerolog.Logger
23}
24
25var _ Interface = (*Logger)(nil)
26
27// New -.
28func New(level string) *Logger {
29var l zerolog.Level
30
31switch strings.ToLower(level) {
32case "error":
33l = zerolog.ErrorLevel
34case "warn":
35l = zerolog.WarnLevel
36case "info":
37l = zerolog.InfoLevel
38case "debug":
39l = zerolog.DebugLevel
40default:
41l = zerolog.InfoLevel
42}
43
44zerolog.SetGlobalLevel(l)
45
46skipFrameCount := 3
47logger := zerolog.New(os.Stdout).With().Timestamp().CallerWithSkipFrameCount(zerolog.CallerSkipFrameCount + skipFrameCount).Logger()
48
49return &Logger{
50logger: &logger,
51}
52}
53
54// Debug -.
55func (l *Logger) Debug(message interface{}, args ...interface{}) {
56l.msg("debug", message, args...)
57}
58
59// Info -.
60func (l *Logger) Info(message string, args ...interface{}) {
61l.log(message, args...)
62}
63
64// Warn -.
65func (l *Logger) Warn(message string, args ...interface{}) {
66l.log(message, args...)
67}
68
69// Error -.
70func (l *Logger) Error(message interface{}, args ...interface{}) {
71if l.logger.GetLevel() == zerolog.DebugLevel {
72l.Debug(message, args...)
73}
74
75l.msg("error", message, args...)
76}
77
78// Fatal -.
79func (l *Logger) Fatal(message interface{}, args ...interface{}) {
80l.msg("fatal", message, args...)
81
82os.Exit(1)
83}
84
85func (l *Logger) log(message string, args ...interface{}) {
86if len(args) == 0 {
87l.logger.Info().Msg(message)
88} else {
89l.logger.Info().Msgf(message, args...)
90}
91}
92
93func (l *Logger) msg(level string, message interface{}, args ...interface{}) {
94switch msg := message.(type) {
95case error:
96l.log(msg.Error(), args...)
97case string:
98l.log(msg, args...)
99default:
100l.log(fmt.Sprintf("%s message %v has unknown type %v", level, message, msg), args...)
101}
102}
103