-
Notifications
You must be signed in to change notification settings - Fork 222
/
logger.go
147 lines (121 loc) · 2.56 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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
package log
import (
"io"
"log"
"os"
)
var Logger Log
type LevelType int
const (
ERROR LevelType = iota
WARN
INFO
DEBUG
)
func init() {
if Logger == nil {
Logger = NewLogger()
}
}
func NewLogger() Log {
logger := new(jfrogLogger)
logLevel := os.Getenv("JFROG_CLI_LOG_LEVEL")
if logLevel != "" {
logger.SetLogLevel(GetCliLogLevel(logLevel))
} else {
logger.SetLogLevel(INFO)
}
logger.SetOutputWriter(os.Stdout)
logger.SetStderrWriter(os.Stderr)
return logger
}
type jfrogLogger struct {
LogLevel LevelType
OutputLog *log.Logger
DebugLog *log.Logger
InfoLog *log.Logger
WarnLog *log.Logger
ErrorLog *log.Logger
}
func SetLogger(newLogger Log) {
Logger = newLogger
}
func (logger *jfrogLogger) SetLogLevel(LevelEnum LevelType) {
logger.LogLevel = LevelEnum
}
func (logger *jfrogLogger) SetOutputWriter(writer io.Writer) {
logger.OutputLog = log.New(writer, "", 0)
}
func (logger *jfrogLogger) SetStderrWriter(writer io.Writer) {
logger.DebugLog = log.New(writer, "[Debug] ", 0)
logger.InfoLog = log.New(writer, "[Info] ", 0)
logger.WarnLog = log.New(writer, "[Warn] ", 0)
logger.ErrorLog = log.New(writer, "[Error] ", 0)
}
func GetLogLevel() LevelType {
return Logger.GetLogLevel()
}
func Debug(a ...interface{}) {
Logger.Debug(a...)
}
func Info(a ...interface{}) {
Logger.Info(a...)
}
func Warn(a ...interface{}) {
Logger.Warn(a...)
}
func Error(a ...interface{}) {
Logger.Error(a...)
}
func Output(a ...interface{}) {
Logger.Output(a...)
}
func (logger jfrogLogger) GetLogLevel() LevelType {
return logger.LogLevel
}
func (logger jfrogLogger) Debug(a ...interface{}) {
if logger.GetLogLevel() >= DEBUG {
logger.DebugLog.Println(a...)
}
}
func (logger jfrogLogger) Info(a ...interface{}) {
if logger.GetLogLevel() >= INFO {
logger.InfoLog.Println(a...)
}
}
func (logger jfrogLogger) Warn(a ...interface{}) {
if logger.GetLogLevel() >= WARN {
logger.WarnLog.Println(a...)
}
}
func (logger jfrogLogger) Error(a ...interface{}) {
if logger.GetLogLevel() >= ERROR {
logger.ErrorLog.Println(a...)
}
}
func (logger jfrogLogger) Output(a ...interface{}) {
logger.OutputLog.Println(a...)
}
type Log interface {
GetLogLevel() LevelType
SetLogLevel(LevelType)
SetOutputWriter(writer io.Writer)
SetStderrWriter(writer io.Writer)
Debug(a ...interface{})
Info(a ...interface{})
Warn(a ...interface{})
Error(a ...interface{})
Output(a ...interface{})
}
func GetCliLogLevel(logLevel string) LevelType {
switch logLevel {
case "ERROR":
return ERROR
case "WARN":
return WARN
case "DEBUG":
return DEBUG
default:
return INFO
}
}