/
console.go
60 lines (54 loc) · 1.21 KB
/
console.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
package logger
import (
"container/list"
"fmt"
"sync"
"time"
)
//控制台日志写入器
type ConsoleLogWriter struct {
logList *list.List // 日志列表
logmu *sync.Mutex // 日志列表锁
closed bool // 是否已经停止
}
// NewConsoleLogWriter 创建控制台日志写入器
func NewConsoleLogWriter() (*ConsoleLogWriter, error) {
return new(ConsoleLogWriter), nil
}
// Write 写入日志
func (this *ConsoleLogWriter) Write(log string) {
fmt.Println(log)
}
// AsyncWrite 异步写入日志
func (this *ConsoleLogWriter) AsyncWrite(logList *list.List, mu *sync.Mutex) {
this.logList = logList
this.logmu = mu
go func() {
for !this.closed {
if this.logList.Len() > 0 {
var start *list.Element
var length = 0
this.logmu.Lock()
start = this.logList.Front()
length = this.logList.Len()
this.logList.Init()
this.logmu.Unlock()
for i := 0; i < length; i++ {
var v, ok = start.Value.(string)
if ok {
this.Write(v)
}
start = start.Next()
}
} else {
//暂停15毫秒
time.Sleep(15 * time.Millisecond)
//runtime.Gosched()
}
}
}()
}
// Close 关闭日志写入器
func (this *ConsoleLogWriter) Close() {
this.closed = true
}