Passed
Push — master ( 134e8a...d40753 )
by Christian
02:47 queued 46s
created

zla.*zlogAdapter.Fatal   A

Complexity

Conditions 1

Size

Total Lines 2
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 1
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 2
nop 2
dl 0
loc 2
ccs 1
cts 1
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
package zla
2
3
import (
4
	"fmt"
5
	"io"
6
	"os"
7
	"path/filepath"
8
	"runtime"
9
	"strings"
10
	"time"
11
12
	"github.com/cdleo/go-commons/formatter"
13
	commonsFormatter "github.com/cdleo/go-commons/formatter"
14
	"github.com/cdleo/go-commons/logger"
15
	"github.com/cdleo/go-e2h"
16
	e2hformat "github.com/cdleo/go-e2h/formatter"
17
18
	"github.com/rs/zerolog"
19
	zlog "github.com/rs/zerolog/log"
20
)
21
22
type zlogAdapter struct {
23
	level           logger.LogLevel
24
	refID           string
25
	formatter       e2hformat.Formatter
26
	formatterParams e2hformat.Params
27
}
28
29
func NewLogger() (logger.Logger, error) {
30
31 1
	zerolog.SetGlobalLevel(zerolog.NoLevel)
32
33 1
	formatter, err := e2hformat.NewFormatter(e2hformat.Format_JSON)
34 1
	if err != nil {
35
		return nil, e2h.Trace(err)
36
	}
37
38 1
	_, b, _, _ := runtime.Caller(0)
39 1
	hideThisPath := filepath.Dir(b) + string(os.PathSeparator)
40 1
	params := e2hformat.Params{
41
		Beautify:         false,
42
		InvertCallstack:  false,
43
		PathHidingMethod: commonsFormatter.HidingMethod_FullBaseline,
44
		PathHidingValue:  hideThisPath,
45
	}
46
47 1
	l := &zlogAdapter{
48
		refID:           "",
49
		formatter:       formatter,
50
		formatterParams: params,
51
	}
52
53 1
	err = l.SetLogLevel(logger.LogLevel_Info.String())
54 1
	if err != nil {
55
		return nil, e2h.Trace(err)
56
	}
57
58 1
	l.SetOutput(os.Stdout)
59 1
	l.SetTimestampFunc(time.Now)
60 1
	return l, nil
61
}
62
63
func (l *zlogAdapter) SetLogLevel(level string) error {
64
65 1
	var err error
66 1
	l.level, err = logger.NewLogLevel(level)
67 1
	if err != nil {
68 1
		return e2h.Trace(err)
69
	}
70 1
	return nil
71
}
72
73
func (l *zlogAdapter) SetOutput(w io.Writer) {
74 1
	zlog.Logger = zlog.Logger.Output(w)
75
}
76
77
func (l *zlogAdapter) SetTimestampFunc(f func() time.Time) {
78 1
	zerolog.TimestampFunc = f
79
}
80
81
func (l *zlogAdapter) WithRefID(refID string) logger.Logger {
82 1
	return &zlogAdapter{
83
		level:           l.level,
84
		formatter:       l.formatter,
85
		formatterParams: l.formatterParams,
86
		refID:           refID,
87
	}
88
}
89
90
func (l *zlogAdapter) logMsg(msgLevel logger.LogLevel, err error, format string, v ...interface{}) {
91
92 1
	if l.level.IsLogAllowed(msgLevel) {
93 1
		var levelMsgHook LevelMsgHook
94 1
		levelMsgHook.where = l.getWhere()
95 1
		levelMsgHook.level = strings.ToUpper(msgLevel.String())
96 1
		if v == nil {
97 1
			levelMsgHook.message = format
98
		} else {
99 1
			levelMsgHook.message = fmt.Sprintf(format, v...)
100
		}
101
102
		//El hook de timestamp ya viene del contexto, no se puede eliminar ni modificar el orden
103 1
		var hooked zerolog.Logger
104
		//Se agrega el contexto si existe
105
		//Se agrega nivel de log, el mensaje y desde donde se llamó
106 1
		if l.refID != "" {
107 1
			hooked = zlog.Hook(ContextHook{ref: l.refID}).Hook(levelMsgHook)
108
		} else {
109 1
			hooked = zlog.Hook(levelMsgHook)
110
		}
111
112
		//Se agregan los detalles del error, si hay uno
113 1
		if err != nil {
114 1
			hooked = hooked.Hook(ErrorHook{err: err, params: l.formatterParams, formatter: l.formatter})
115
		}
116
117
		//Dispara el log
118 1
		hooked.Log().Send()
119
	}
120
}
121
122
func (l *zlogAdapter) getWhere() string {
123 1
	_, file, line, _ := runtime.Caller(3)
124 1
	where := fmt.Sprintf("%s:%d", formatter.FormatSourceFile(file, l.formatterParams.PathHidingMethod, l.formatterParams.PathHidingValue), line)
125 1
	return where
126
}
127
128
func (l *zlogAdapter) Show(msg string) {
129 1
	l.logMsg(logger.LogLevel_Show, nil, msg)
130
}
131
func (l *zlogAdapter) Showf(format string, v ...interface{}) {
132 1
	l.logMsg(logger.LogLevel_Show, nil, format, v...)
133
}
134
135
func (l *zlogAdapter) Fatal(err error, msg string) {
136 1
	l.logMsg(logger.LogLevel_Fatal, err, msg)
137
}
138
func (l *zlogAdapter) Fatalf(err error, format string, v ...interface{}) {
139 1
	l.logMsg(logger.LogLevel_Fatal, err, format, v...)
140
}
141
142
func (l *zlogAdapter) Error(err error, msg string) {
143 1
	l.logMsg(logger.LogLevel_Error, err, msg)
144
}
145
func (l *zlogAdapter) Errorf(err error, format string, v ...interface{}) {
146 1
	l.logMsg(logger.LogLevel_Error, err, format, v...)
147
}
148
149
func (l *zlogAdapter) Warn(msg string) {
150 1
	l.logMsg(logger.LogLevel_Warning, nil, msg)
151
}
152
func (l *zlogAdapter) Warnf(format string, v ...interface{}) {
153 1
	l.logMsg(logger.LogLevel_Warning, nil, format, v...)
154
}
155
156
func (l *zlogAdapter) Info(msg string) {
157 1
	l.logMsg(logger.LogLevel_Info, nil, msg)
158
}
159
func (l *zlogAdapter) Infof(format string, v ...interface{}) {
160 1
	l.logMsg(logger.LogLevel_Info, nil, format, v...)
161
}
162
163
func (l *zlogAdapter) Bus(msg string) {
164 1
	l.logMsg(logger.LogLevel_Business, nil, msg)
165
}
166
func (l *zlogAdapter) Busf(format string, v ...interface{}) {
167 1
	l.logMsg(logger.LogLevel_Business, nil, format, v...)
168
}
169
170
func (l *zlogAdapter) Msg(msg string) {
171 1
	l.logMsg(logger.LogLevel_Message, nil, msg)
172
}
173
func (l *zlogAdapter) Msgf(format string, v ...interface{}) {
174 1
	l.logMsg(logger.LogLevel_Message, nil, format, v...)
175
}
176
177
func (l *zlogAdapter) Dbg(msg string) {
178 1
	l.logMsg(logger.LogLevel_Debug, nil, msg)
179
}
180
func (l *zlogAdapter) Dbgf(format string, v ...interface{}) {
181 1
	l.logMsg(logger.LogLevel_Debug, nil, format, v...)
182
}
183
184
func (l *zlogAdapter) Qry(msg string) {
185 1
	l.logMsg(logger.LogLevel_Query, nil, msg)
186
}
187
func (l *zlogAdapter) Qryf(format string, v ...interface{}) {
188 1
	l.logMsg(logger.LogLevel_Query, nil, format, v...)
189
}
190
191
func (l *zlogAdapter) Trace(msg string) {
192 1
	l.logMsg(logger.LogLevel_Trace, nil, msg)
193
}
194
func (l *zlogAdapter) Tracef(format string, v ...interface{}) {
195 1
	l.logMsg(logger.LogLevel_Trace, nil, format, v...)
196
}
197