...
1
2
3
4
5
6
7 package unified
8
9 import (
10 "context"
11 "sync"
12
13 "go.mongodb.org/mongo-driver/internal/logger"
14 )
15
16
17
18 type orderedLogMessage struct {
19 *logMessage
20 order int
21 }
22
23
24
25 type Logger struct {
26
27
28 bufSize int
29
30
31
32 lastOrder int
33
34
35
36
37 orderMu sync.RWMutex
38 logQueue chan orderedLogMessage
39 ignoreMessages []*logMessage
40 }
41
42 func newLogger(olm *observeLogMessages, bufSize int, ignoreMessages []*logMessage) *Logger {
43 if olm == nil {
44 return nil
45 }
46
47 return &Logger{
48 lastOrder: 1,
49 logQueue: make(chan orderedLogMessage, bufSize),
50 bufSize: bufSize,
51 ignoreMessages: ignoreMessages,
52 }
53 }
54
55
56
57 func (log *Logger) Info(level int, msg string, args ...interface{}) {
58 log.orderMu.Lock()
59 defer log.orderMu.Unlock()
60
61 if log.logQueue == nil {
62 return
63 }
64
65
66
67 if log.lastOrder > log.bufSize {
68 return
69 }
70
71
72
73 level = level + logger.DiffToInfo
74
75 logMessage, err := newLogMessage(level, msg, args...)
76 if err != nil {
77 panic(err)
78 }
79
80 for _, ignoreMessage := range log.ignoreMessages {
81 if err := verifyLogMatch(context.Background(), ignoreMessage, logMessage); err == nil {
82 return
83 }
84 }
85
86 defer func() { log.lastOrder++ }()
87
88
89
90 log.logQueue <- orderedLogMessage{
91 order: log.lastOrder + 1,
92 logMessage: logMessage}
93
94
95 if log.lastOrder == log.bufSize {
96 close(log.logQueue)
97 }
98 }
99
100
101
102
103 func (log *Logger) Error(err error, msg string, args ...interface{}) {
104 args = append(args, "error", err)
105 log.Info(int(logger.LevelInfo), msg, args)
106 }
107
View as plain text