Test Setup Failed
Pull Request — master (#1)
by Christian
01:57
created

zla.*zlogAdapter.getWhere   A

Complexity

Conditions 1

Size

Total Lines 4
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 1
CRAP Score 1

Importance

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