-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpool.go
More file actions
42 lines (33 loc) · 775 Bytes
/
pool.go
File metadata and controls
42 lines (33 loc) · 775 Bytes
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
package log
import "sync"
// recycled log messages to reduce allocations
var logMsgPool = sync.Pool{
New: func() any {
return &LogMessage{
Meta: make([]LogMessageMetaKV, 0, 1),
}
},
}
func acquireLogMessage(loggerName string, msg *LogMessage) *LogMessage {
lm := logMsgPool.Get().(*LogMessage)
lm.Timestamp = msg.Timestamp
lm.Level = msg.Level
lm.Message = msg.Message
lm.trace = msg.trace
lm.caller = msg.caller
lm.loggerName = loggerName
lm.Meta = lm.Meta[:0]
lm.Meta = append(lm.Meta, msg.Meta...)
return lm
}
func releaseLogMessage(lm *LogMessage) {
lm.Meta = lm.Meta[:0]
lm.trace = ""
lm.caller = ""
lm.loggerName = ""
// shrink if overinflated
if cap(lm.Meta) > 16 {
lm.Meta = make([]LogMessageMetaKV, 0, 1)
}
logMsgPool.Put(lm)
}