-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlogger.go
69 lines (55 loc) · 1.48 KB
/
logger.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package circuitbreaker
import (
"encoding/json"
"fmt"
"io"
)
// Logger is what a logger look like in circuit breaker.
type Logger interface {
Info(v ...interface{})
Error(v ...interface{})
Warn(v ...interface{})
}
const (
// OutPutTypeJSON is json type of output enum.
OutPutTypeJSON = "json"
// OutPutTypeSimple is simple text type of output enum.
OutPutTypeSimple = "simple"
)
type logType struct {
status string
}
// nolint:gochecknoglobals
var (
logTypeError = logType{status: "error"}
logTypeWarning = logType{status: "warning"}
logTypeInfo = logType{status: "info"}
)
// IOLogger is io logger and use any io.Writer.
type IOLogger struct {
writer io.Writer
outPutType string
}
// NewIOLogger create new instance of IOLogger.
func NewIOLogger(writer io.Writer, outPutType string) *IOLogger {
return &IOLogger{writer, outPutType}
}
// Info log with info logTypeInfo.
func (i *IOLogger) Info(v ...interface{}) {
_ = i.formatToWriter(append(v, logTypeInfo))
}
// Error log with logTypeError.
func (i *IOLogger) Error(v ...interface{}) {
_ = i.formatToWriter(append(v, logTypeError))
}
// Warn log with logTypeWarning.
func (i *IOLogger) Warn(v ...interface{}) {
_ = i.formatToWriter(append(v, logTypeWarning))
}
func (i *IOLogger) formatToWriter(v []interface{}) error { // nolint:varnamelen
if i.outPutType == OutPutTypeSimple {
_, err := fmt.Fprintln(i.writer, v...)
return err // nolint:wrapcheck
}
return json.NewEncoder(i.writer).Encode(v) // nolint:wrapcheck
}