-
Notifications
You must be signed in to change notification settings - Fork 19
/
agent.go
executable file
·150 lines (119 loc) · 2.8 KB
/
agent.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
148
/**************
*
* 根据配置文件中的local_dir和tcp_addr分别生成logger,在本地和远程上报错误日志
*
*/
package loglib
import (
"strings"
// "os"
"runtime"
"fmt"
)
var logAgent *LogAgent
var HeartBeatPort = ""
func Init(config map[string]string) {
logAgent = newLogAgent(config)
}
type LogAgent struct {
logs []Log
// message map[string]string
}
var levels = map[string]int{"debug":0, "info":1, "warning":2, "error":3}
func newLogAgent(config map[string]string) *LogAgent {
var level = DEBUG
levelStr, ok := config["local_level"]
if ok && levelStr != "" {
tmp, ok := levels[ strings.ToLower(levelStr) ]
if ok {
level = tmp
}
}
agent := new(LogAgent)
dir, ok := config["local_dir"]
if ok {
fileLog := NewFileLog(dir, level)
agent.logs = append(agent.logs, fileLog)
}
level = WARNING //tcp 默认level
levelStr, ok = config["tcp_level"]
if ok && levelStr != "" {
tmp, ok := levels[ strings.ToLower(levelStr) ]
if ok {
level = tmp
}
}
addr, ok := config["tcp_addr"]
if ok {
netLog := NewNetLog(addr, level)
agent.logs = append(agent.logs, netLog)
}
return agent
}
func SetLevel(level int) {
logAgent.setLevel(level)
}
func Debug(msg string) {
logAgent.debug(makeDebugMessage(msg))
}
func makeDebugMessage(msg string) string {
//test
var m string
var pc []uintptr = make([]uintptr, 100)
i := runtime.Callers(0,pc)
for j := 0; j < i; j++ {
// _,_,line,_ := runtime.Caller(j)
f := runtime.FuncForPC(pc[j])
pName := getPackageName(f.Name() )
if pName == "runtime" || pName == "logd/loglib" {
continue
}else {
file,line := f.FileLine(pc[j])
m = fmt.Sprintf("file:%s,func_name:%s,line:%d,msg:%s",file,f.Name(),line,msg)
break
}
}
return m
}
func Info(msg string) {
logAgent.info(msg)
}
func Warning(msg string) {
logAgent.warning(msg)
}
func Error(msg string) {
logAgent.error(msg)
}
func (a *LogAgent) setLevel(level int) {
for _, l := range a.logs {
l.SetLevel(level)
}
}
func (a *LogAgent) debug(msg string) {
for _, l := range a.logs {
l.Debug(msg)
}
}
func (a *LogAgent) info(msg string) {
for _, l := range a.logs {
l.Info(msg)
}
}
func (a *LogAgent) warning(msg string) {
for _, l := range a.logs {
l.Warning(msg)
}
}
func (a *LogAgent) error(msg string) {
for _, l := range a.logs {
l.Error(msg)
}
}
func getPackageName(function string) string {
a := strings.Split(function,".")
if len(a) != 2 {
return function
}else {
return a[0]
}
}