Skip to content

Commit 7c01fca

Browse files
committed
添加windows彩色终端输出
1 parent 2678d00 commit 7c01fca

File tree

3 files changed

+70
-12
lines changed

3 files changed

+70
-12
lines changed

console.go

+29-4
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,29 @@ import (
66
"github.com/mattn/go-colorable"
77
)
88

9+
type Brush func(string) string
10+
11+
func NewBrush(color string) Brush {
12+
pre := "\033["
13+
reset := "\033[0m"
14+
return func(text string) string {
15+
return pre + color + "m" + text + reset
16+
}
17+
}
18+
19+
var colors = []Brush{
20+
NewBrush("1;36"), // Trace cyan
21+
NewBrush("1;34"), // Debug blue
22+
NewBrush("1;32"), // Info green
23+
NewBrush("1;33"), // Warn yellow
24+
NewBrush("1;31"), // Error red
25+
NewBrush("1;35"), // Critical purple
26+
NewBrush("1;31"), // Fatal red
27+
}
28+
929
type console struct {
10-
lg *log.Logger
30+
level LogLevel
31+
lg *log.Logger
1132
}
1233

1334
func newConsole() LoggerInterface {
@@ -16,11 +37,15 @@ func newConsole() LoggerInterface {
1637
}
1738
}
1839

19-
func (c *console) WriteMsg(msg string) error {
20-
c.lg.Println(msg)
40+
func (c *console) WriteMsg(msg string, level LogLevel) error {
41+
if c.level > level {
42+
return nil
43+
}
44+
45+
c.lg.Println(colors[level](msg))
2146
return nil
2247
}
2348

2449
func (*console) Flush() {}
2550

26-
func (*console) Destroy() {}
51+
func (*console) Close() {}

log_test.go

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package logs
2+
3+
import (
4+
"reflect"
5+
"testing"
6+
)
7+
8+
func expect(t *testing.T, a, b interface{}) {
9+
if a != b {
10+
t.Errorf("Expected %v (type %v) - Got %v (type %v)", b, reflect.TypeOf(b), a, reflect.TypeOf(a))
11+
}
12+
}
13+
14+
func refute(t *testing.T, a, b interface{}) {
15+
if a == b {
16+
t.Errorf("Did not expect %v (type %v) - Got %v (type %v)", b, reflect.TypeOf(b), a, reflect.TypeOf(a))
17+
}
18+
}

logs.go

+23-8
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,22 @@ const (
3838
)
3939

4040
type LoggerInterface interface {
41-
Write(data []byte) (int, error)
41+
Init()
42+
WriteMsg(msg string, level LogLevel) error
4243
Close()
4344
Flush()
4445
}
4546

4647
// log instance generator
4748
type LoggerGenerator func() LoggerInterface
4849

49-
var (
50+
var adapters map[LogType]LoggerGenerator
51+
52+
func init() {
5053
adapters = make(map[LogType]LoggerGenerator)
51-
)
54+
55+
adapters[LogConsole] = newConsole
56+
}
5257

5358
type logMsg struct {
5459
skip int
@@ -64,25 +69,34 @@ type Logger struct {
6469
quit chan bool
6570
}
6671

67-
func newLogger(buffer int64) *Logger {
72+
func NewLogger() *Logger {
73+
numCPU := runtime.NumCPU()
74+
75+
l := newLogger(numCPU)
76+
l.AddLogger(LogConsole)
77+
78+
return l
79+
}
80+
81+
func newLogger(buffer int) *Logger {
6882
l := &Logger{
6983
level: TRACE,
7084
outputs: make(map[LogType]LoggerInterface),
7185
msgChan: make(chan *logMsg, buffer),
7286
quit: make(chan bool),
7387
}
7488

75-
go l.StartLogger()
89+
go l.startLogger()
7690
return l
7791
}
7892

79-
func (l *Logger) AddLogger(t LogType, config string) error {
93+
func (l *Logger) AddLogger(t LogType) error {
8094
l.Lock()
8195
defer l.Unlock()
8296

8397
if logGen, ok := adapters[t]; ok {
8498
logInst := logGen()
85-
if err := logInst.Init(config); err != nil {
99+
if err := logInst.Init(); err != nil {
86100
return err
87101
}
88102
l.outputs[t] = logInst
@@ -142,7 +156,8 @@ func (l *Logger) writeMsg(skip int, level LogLevel, msg string) error {
142156
return nil
143157
}
144158

145-
func (l *Logger) StartLogger() {
159+
// 还需处理意外的情况,ctrl+c退出
160+
func (l *Logger) startLogger() {
146161
for {
147162
select {
148163
case bm := <-l.msgChan:

0 commit comments

Comments
 (0)