Skip to content

Commit 6d4d4a6

Browse files
committed
Use struct instead of map to improve the performance of linelogger
Add LineBuf struct to help build the json buffer. partial-issue: xcat2#14
1 parent ef19db8 commit 6d4d4a6

File tree

1 file changed

+31
-27
lines changed

1 file changed

+31
-27
lines changed

console/pipeline/logger.go

Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,29 @@ func init() {
2020
LOGGER_INIT_MAP[BYTE_LOGGER] = NewByteLogger
2121
}
2222

23+
func NewLineBuf(Type string, message string, node string, LogTimestamp bool) *LineBuf {
24+
buf := &LineBuf{Type: Type, Message: message, Node: node}
25+
if LogTimestamp {
26+
buf.Date = time.Now().Format("2006-01-02 15:04:05.00000")
27+
}
28+
return buf
29+
}
30+
31+
type LineBuf struct {
32+
Type string `json:"type"`
33+
Message string `json:"message"`
34+
Node string `json:"node"`
35+
Date string `json:"date,omitempty"`
36+
}
37+
38+
func (self *LineBuf) Marshal() ([]byte, error) {
39+
buf, err := json.Marshal(self)
40+
if err != nil {
41+
return nil, err
42+
}
43+
return buf, nil
44+
}
45+
2346
func NewLineLogger() Logger {
2447
logger := LineLogger{
2548
publishers: make([]Publisher, 0),
@@ -47,23 +70,13 @@ func (self *LineLogger) MakeRecord(node string, b []byte, last *RemainBuffer) er
4770
}
4871
for i := 0; i < len(b); i++ {
4972
if b[i] == '\n' {
50-
var line bytes.Buffer
51-
line.Write(b[p:i])
52-
bufMap := make(map[string]string)
53-
bufMap["type"] = CONSOLE_TYPE
54-
bufMap["message"] = line.String()
55-
bufMap["node"] = node
56-
57-
if serverConfig.Console.LogTimestamp {
58-
bufMap["date"] = time.Now().Format("2006-01-02 15:04:05.00000")
59-
}
73+
lineBuf := NewLineBuf(CONSOLE_TYPE, string(b[p:i]), node, serverConfig.Console.LogTimestamp)
6074
p = i + 1
61-
buf, err = json.Marshal(bufMap)
75+
buf, err = lineBuf.Marshal()
6276
if err != nil {
6377
plog.ErrorNode(node, err)
6478
continue
6579
}
66-
line.Reset()
6780
self.bufChan <- append(buf, []byte{'\n'}...)
6881
}
6982
}
@@ -75,15 +88,12 @@ func (self *LineLogger) PromptLast(node string, last *RemainBuffer) error {
7588
var err error
7689
var buf []byte
7790
if last.Buf != nil {
78-
bufMap := make(map[string]string)
79-
bufMap["message"] = string(last.Buf)
80-
// check again after copy
81-
if bufMap["message"] == "" {
91+
message := string(last.Buf)
92+
if message == "" {
8293
return nil
8394
}
84-
bufMap["type"] = REMAIN_TYPE
85-
bufMap["node"] = node
86-
buf, err = json.Marshal(bufMap)
95+
lineBuf := NewLineBuf(REMAIN_TYPE, message, node, serverConfig.Console.LogTimestamp)
96+
buf, err = lineBuf.Marshal()
8797
if err != nil {
8898
plog.ErrorNode(node, err)
8999
return err
@@ -118,14 +128,8 @@ func (self *LineLogger) Fetch(node string, count int) (string, error) {
118128
func (self *LineLogger) Prompt(node string, message string) error {
119129
var err error
120130
var buf []byte
121-
bufMap := make(map[string]string)
122-
bufMap["type"] = EVENT_TYPE
123-
bufMap["message"] = message
124-
bufMap["node"] = node
125-
if serverConfig.Console.LogTimestamp {
126-
bufMap["date"] = time.Now().Format("2006-01-02 15:04:05.00000")
127-
}
128-
buf, err = json.Marshal(bufMap)
131+
lineBuf := NewLineBuf(EVENT_TYPE, message, node, serverConfig.Console.LogTimestamp)
132+
buf, err = lineBuf.Marshal()
129133
if err != nil {
130134
plog.ErrorNode(node, err)
131135
return err

0 commit comments

Comments
 (0)