forked from davyxu/golog
-
Notifications
You must be signed in to change notification settings - Fork 0
/
color.go
138 lines (106 loc) · 2.12 KB
/
color.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
package golog
import (
"io/ioutil"
"strings"
)
type Color int
const (
NoColor Color = iota
Black
Red
Green
Yellow
Blue
Purple
DarkGreen
White
)
var logColorPrefix = []string{
"",
"\x1b[030m",
"\x1b[031m",
"\x1b[032m",
"\x1b[033m",
"\x1b[034m",
"\x1b[035m",
"\x1b[036m",
"\x1b[037m",
}
type colorData struct {
name string
c Color
}
var colorByName = []colorData{
{"none", NoColor},
{"black", Black},
{"red", Red},
{"green", Green},
{"yellow", Yellow},
{"blue", Blue},
{"purple", Purple},
{"darkgreen", DarkGreen},
{"white", White},
}
func matchColor(name string) Color {
lower := strings.ToLower(name)
for _, d := range colorByName {
if d.name == lower {
return d.c
}
}
return NoColor
}
func colorFromLevel(l Level) Color {
switch l {
case Level_Warn:
return Yellow
case Level_Error:
return Red
}
return NoColor
}
var logColorSuffix = "\x1b[0m"
func SetColorDefine(loggerName string, jsonFormat string) error {
cf := NewColorFile()
if err := cf.Load(jsonFormat); err != nil {
return err
}
return VisitLogger(loggerName, func(l *Logger) bool {
l.SetColorFile(cf)
return true
})
}
func EnableColorLogger(loggerName string, enable bool) error {
return VisitLogger(loggerName, func(l *Logger) bool {
l.EnableColor(enable)
return true
})
}
func SetColorFile(loggerName string, colorFileName string) error {
data, err := ioutil.ReadFile(colorFileName)
if err != nil {
return err
}
return SetColorDefine(loggerName, string(data))
}
func (self *Logger) SetColor(name string) *Logger {
self.mu.Lock()
self.currColor = matchColor(name)
self.mu.Unlock()
return self
}
// 注意, 加色只能在Gogland的main方式启用, Test方式无法加色
func (self *Logger) SetColorFile(file *ColorFile) {
self.colorFile = file
}
func (self *Logger) selectColorByLevel() {
if levelColor := colorFromLevel(self.currLevel); levelColor != NoColor {
self.currColor = levelColor
}
}
func (self *Logger) selectColorByText() {
if self.enableColor && self.colorFile != nil && self.currColor == NoColor {
self.currColor = self.colorFile.ColorFromText(self.currText)
}
return
}