-
Notifications
You must be signed in to change notification settings - Fork 0
/
LogHandle.go
73 lines (63 loc) · 1.89 KB
/
LogHandle.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
package logexternal
import (
"errors"
"github.com/bingtianyiyan/youki_gotools/logexternal/logenum"
"github.com/bingtianyiyan/youki_gotools/logexternal/logiface"
)
/*
日志消息处理中心
*/
var (
workCount uint64 = 10
workQueueLen uint32 = 2500
)
type LogHandle struct {
LogApis map[logenum.Level]logiface.ILogRouter
LogTaskWorkerQueue []chan logiface.ILogRequest
}
// NewLogHandle 日志处理对象初始化
func NewLogHandle() *LogHandle{
return &LogHandle{
LogApis: map[logenum.Level]logiface.ILogRouter{},
LogTaskWorkerQueue: make([]chan logiface.ILogRequest,workCount),
}
}
// AddLogRouter 添加日志路由
func (m *LogHandle) AddLogRouter(logLevel logenum.Level, router logiface.ILogRouter) *LogHandle {
if _,ok := m.LogApis[logLevel];ok{
panic(errors.New("LogLevel重复注册"))
return m
}
m.LogApis[logLevel] = router
return m
}
// InitLogTaskWorkerQueuePool 初始化
func (m *LogHandle) InitLogTaskWorkerQueuePool(){
for i:=0;i<int(workCount);i++{
m.LogTaskWorkerQueue[i] = make(chan logiface.ILogRequest,workQueueLen)
go m.StartLogTaskWorkerQueue(i,m.LogTaskWorkerQueue[i])
}
}
// SendMsgToLogTaskWorkerQueue 外部调用发送日志内容给Channel
func (m *LogHandle) SendMsgToLogTaskWorkerQueue(request logiface.ILogRequest){
//得到需要处理此条连接的workerID
workerID := request.GetLogId() % workCount
m.LogTaskWorkerQueue[workerID] <- request
}
// StartLogTaskWorkerQueue channel消费日志
func (m *LogHandle) StartLogTaskWorkerQueue(worker int,lcQueue chan logiface.ILogRequest){
for{
select {
case msg := <- lcQueue:
m.DoLogMsgHandler(worker,msg)
}
}
}
// DoLogMsgHandler 实际日志处理
func (m *LogHandle) DoLogMsgHandler(worker int,request logiface.ILogRequest) {
logFunc,ok := m.LogApis[request.GetLogLevel()]
if !ok{
panic(errors.New("请注册Log处理事件" + string(request.GetLogLevel())))
}
logFunc.LogExecute(request)
}