@@ -3,125 +3,232 @@ package custmsg
3
3
import (
4
4
"context"
5
5
"fmt"
6
+ "time"
6
7
7
8
"github.com/smartcontractkit/chainlink-common/pkg/logger"
8
9
)
9
10
10
- const LogLevelKey = "log_level"
11
+ const (
12
+ LogLevelKey = "log_level"
13
+ defaultBeholderEmitTimeoutMs = 100
14
+ )
11
15
12
16
type beholderLogger struct {
13
- underlying logger.Logger
14
- emitter MessageEmitter
17
+ underlying logger.Logger
18
+ emitter MessageEmitter
19
+ emitTimeout time.Duration
15
20
}
16
21
17
22
func NewBeholderLogger (underlying logger.Logger , emitter MessageEmitter ) * beholderLogger {
18
23
return & beholderLogger {
19
- underlying : logger .Helper (underlying , 1 ),
20
- emitter : emitter ,
24
+ underlying : logger .Helper (underlying , 1 ),
25
+ emitter : emitter ,
26
+ emitTimeout : defaultBeholderEmitTimeoutMs * time .Millisecond ,
21
27
}
22
28
}
23
29
24
30
func (b * beholderLogger ) With (args ... any ) * beholderLogger {
25
- emitterWithLabels := b .emitter .WithMapLabels (getLabelMap (args ... ))
26
- underlyingWith := logger .With (b .underlying , args ... )
27
- return NewBeholderLogger (underlyingWith , emitterWithLabels )
31
+ return & beholderLogger {
32
+ underlying : logger .With (b .underlying , args ... ),
33
+ emitter : b .emitter .WithMapLabels (getLabelMap (args ... )),
34
+ emitTimeout : b .emitTimeout ,
35
+ }
36
+ }
37
+
38
+ func (b * beholderLogger ) WithEmitTimeout (name string , emitTimeout time.Duration ) * beholderLogger {
39
+ return & beholderLogger {
40
+ underlying : b .underlying ,
41
+ emitter : b .emitter ,
42
+ emitTimeout : emitTimeout ,
43
+ }
28
44
}
29
45
30
46
func (b * beholderLogger ) Named (name string ) * beholderLogger {
31
47
return & beholderLogger {
32
- underlying : logger .Named (b .underlying , name ),
33
- emitter : b .emitter ,
48
+ underlying : logger .Named (b .underlying , name ),
49
+ emitter : b .emitter ,
50
+ emitTimeout : b .emitTimeout ,
34
51
}
35
52
}
36
53
37
54
func (b * beholderLogger ) Debug (args ... any ) {
38
- _ = b .emitter .With (LogLevelKey , "debug" ).Emit (context .Background (), fmt .Sprint (args ... ))
39
55
b .underlying .Debug (args ... )
56
+ ctx , cancel := getBeholderCallContext ()
57
+ defer cancel ()
58
+ err := b .emitter .With (LogLevelKey , "debug" ).Emit (ctx , fmt .Sprint (args ... ))
59
+ if err != nil {
60
+ b .underlying .Errorw ("error emitting log to Beholder" , "error" , err )
61
+ }
40
62
}
41
63
42
64
func (b * beholderLogger ) Info (args ... any ) {
43
- _ = b .emitter .With (LogLevelKey , "info" ).Emit (context .Background (), fmt .Sprint (args ... ))
44
65
b .underlying .Info (args ... )
66
+ ctx , cancel := getBeholderCallContext ()
67
+ defer cancel ()
68
+ err := b .emitter .With (LogLevelKey , "info" ).Emit (ctx , fmt .Sprint (args ... ))
69
+ if err != nil {
70
+ b .underlying .Errorw ("error emitting log to Beholder" , "error" , err )
71
+ }
45
72
}
46
73
47
74
func (b * beholderLogger ) Warn (args ... any ) {
48
- _ = b .emitter .With (LogLevelKey , "warn" ).Emit (context .Background (), fmt .Sprint (args ... ))
49
75
b .underlying .Warn (args ... )
76
+ ctx , cancel := getBeholderCallContext ()
77
+ defer cancel ()
78
+ err := b .emitter .With (LogLevelKey , "warn" ).Emit (ctx , fmt .Sprint (args ... ))
79
+ if err != nil {
80
+ b .underlying .Errorw ("error emitting log to Beholder" , "error" , err )
81
+ }
50
82
}
51
83
52
84
func (b * beholderLogger ) Error (args ... any ) {
53
- _ = b .emitter .With (LogLevelKey , "error" ).Emit (context .Background (), fmt .Sprint (args ... ))
54
85
b .underlying .Error (args ... )
86
+ ctx , cancel := getBeholderCallContext ()
87
+ defer cancel ()
88
+ err := b .emitter .With (LogLevelKey , "error" ).Emit (ctx , fmt .Sprint (args ... ))
89
+ if err != nil {
90
+ b .underlying .Errorw ("error emitting log to Beholder" , "error" , err )
91
+ }
55
92
}
56
93
57
94
func (b * beholderLogger ) Panic (args ... any ) {
58
- _ = b .emitter .With (LogLevelKey , "panic" ).Emit (context .Background (), fmt .Sprint (args ... ))
59
95
b .underlying .Panic (args ... )
96
+ ctx , cancel := getBeholderCallContext ()
97
+ defer cancel ()
98
+ err := b .emitter .With (LogLevelKey , "panic" ).Emit (ctx , fmt .Sprint (args ... ))
99
+ if err != nil {
100
+ b .underlying .Errorw ("error emitting log to Beholder" , "error" , err )
101
+ }
60
102
}
61
103
62
104
func (b * beholderLogger ) Fatal (args ... any ) {
63
- _ = b .emitter .With (LogLevelKey , "fatal" ).Emit (context .Background (), fmt .Sprint (args ... ))
64
105
b .underlying .Fatal (args ... )
106
+ ctx , cancel := getBeholderCallContext ()
107
+ defer cancel ()
108
+ err := b .emitter .With (LogLevelKey , "fatal" ).Emit (ctx , fmt .Sprint (args ... ))
109
+ if err != nil {
110
+ b .underlying .Errorw ("error emitting log to Beholder" , "error" , err )
111
+ }
65
112
}
66
113
67
114
func (b * beholderLogger ) Debugf (format string , values ... any ) {
68
- _ = b .emitter .With (LogLevelKey , "debug" ).Emit (context .Background (), fmt .Sprintf (format , values ... ))
69
115
b .underlying .Debugf (format , values ... )
116
+ ctx , cancel := getBeholderCallContext ()
117
+ defer cancel ()
118
+ err := b .emitter .With (LogLevelKey , "debug" ).Emit (ctx , fmt .Sprintf (format , values ... ))
119
+ if err != nil {
120
+ b .underlying .Errorw ("error emitting log to Beholder" , "error" , err )
121
+ }
70
122
}
71
123
72
124
func (b * beholderLogger ) Infof (format string , values ... any ) {
73
- _ = b .emitter .With (LogLevelKey , "info" ).Emit (context .Background (), fmt .Sprintf (format , values ... ))
74
125
b .underlying .Infof (format , values ... )
126
+ ctx , cancel := getBeholderCallContext ()
127
+ defer cancel ()
128
+ err := b .emitter .With (LogLevelKey , "info" ).Emit (ctx , fmt .Sprintf (format , values ... ))
129
+ if err != nil {
130
+ b .underlying .Errorw ("error emitting log to Beholder" , "error" , err )
131
+ }
75
132
}
76
133
77
134
func (b * beholderLogger ) Warnf (format string , values ... any ) {
78
- _ = b .emitter .With (LogLevelKey , "warn" ).Emit (context .Background (), fmt .Sprintf (format , values ... ))
79
135
b .underlying .Warnf (format , values ... )
136
+ ctx , cancel := getBeholderCallContext ()
137
+ defer cancel ()
138
+ err := b .emitter .With (LogLevelKey , "warn" ).Emit (ctx , fmt .Sprintf (format , values ... ))
139
+ if err != nil {
140
+ b .underlying .Errorw ("error emitting log to Beholder" , "error" , err )
141
+ }
80
142
}
81
143
82
144
func (b * beholderLogger ) Errorf (format string , values ... any ) {
83
- _ = b .emitter .With (LogLevelKey , "error" ).Emit (context .Background (), fmt .Sprintf (format , values ... ))
84
145
b .underlying .Errorf (format , values ... )
146
+ ctx , cancel := getBeholderCallContext ()
147
+ defer cancel ()
148
+ err := b .emitter .With (LogLevelKey , "error" ).Emit (ctx , fmt .Sprintf (format , values ... ))
149
+ if err != nil {
150
+ b .underlying .Errorw ("error emitting log to Beholder" , "error" , err )
151
+ }
85
152
}
86
153
87
154
func (b * beholderLogger ) Panicf (format string , values ... any ) {
88
- _ = b .emitter .With (LogLevelKey , "panic" ).Emit (context .Background (), fmt .Sprintf (format , values ... ))
89
155
b .underlying .Panicf (format , values ... )
156
+ ctx , cancel := getBeholderCallContext ()
157
+ defer cancel ()
158
+ err := b .emitter .With (LogLevelKey , "panic" ).Emit (ctx , fmt .Sprintf (format , values ... ))
159
+ if err != nil {
160
+ b .underlying .Errorw ("error emitting log to Beholder" , "error" , err )
161
+ }
90
162
}
91
163
92
164
func (b * beholderLogger ) Fatalf (format string , values ... any ) {
93
- _ = b .emitter .With (LogLevelKey , "fatal" ).Emit (context .Background (), fmt .Sprintf (format , values ... ))
94
165
b .underlying .Fatalf (format , values ... )
166
+ ctx , cancel := getBeholderCallContext ()
167
+ defer cancel ()
168
+ err := b .emitter .With (LogLevelKey , "fatal" ).Emit (ctx , fmt .Sprintf (format , values ... ))
169
+ if err != nil {
170
+ b .underlying .Errorw ("error emitting log to Beholder" , "error" , err )
171
+ }
95
172
}
96
173
97
174
func (b * beholderLogger ) Debugw (msg string , keysAndValues ... any ) {
98
- _ = b .emitter .With (LogLevelKey , "debug" ).WithMapLabels (getLabelMap (keysAndValues ... )).Emit (context .Background (), msg )
99
175
b .underlying .Debugw (msg , keysAndValues ... )
176
+ ctx , cancel := getBeholderCallContext ()
177
+ defer cancel ()
178
+ err := b .emitter .With (LogLevelKey , "debug" ).WithMapLabels (getLabelMap (keysAndValues ... )).Emit (ctx , msg )
179
+ if err != nil {
180
+ b .underlying .Errorw ("error emitting log to Beholder" , "error" , err )
181
+ }
100
182
}
101
183
102
184
func (b * beholderLogger ) Infow (msg string , keysAndValues ... any ) {
103
- _ = b .emitter .With (LogLevelKey , "info" ).WithMapLabels (getLabelMap (keysAndValues ... )).Emit (context .Background (), msg )
104
185
b .underlying .Infow (msg , keysAndValues ... )
186
+ ctx , cancel := getBeholderCallContext ()
187
+ defer cancel ()
188
+ err := b .emitter .With (LogLevelKey , "info" ).WithMapLabels (getLabelMap (keysAndValues ... )).Emit (ctx , msg )
189
+ if err != nil {
190
+ b .underlying .Errorw ("error emitting log to Beholder" , "error" , err )
191
+ }
105
192
}
106
193
107
194
func (b * beholderLogger ) Warnw (msg string , keysAndValues ... any ) {
108
- _ = b .emitter .With (LogLevelKey , "warn" ).WithMapLabels (getLabelMap (keysAndValues ... )).Emit (context .Background (), msg )
109
195
b .underlying .Warnw (msg , keysAndValues ... )
196
+ ctx , cancel := getBeholderCallContext ()
197
+ defer cancel ()
198
+ err := b .emitter .With (LogLevelKey , "warn" ).WithMapLabels (getLabelMap (keysAndValues ... )).Emit (ctx , msg )
199
+ if err != nil {
200
+ b .underlying .Errorw ("error emitting log to Beholder" , "error" , err )
201
+ }
110
202
}
111
203
112
204
func (b * beholderLogger ) Errorw (msg string , keysAndValues ... any ) {
113
- _ = b .emitter .With (LogLevelKey , "error" ).WithMapLabels (getLabelMap (keysAndValues ... )).Emit (context .Background (), msg )
114
205
b .underlying .Errorw (msg , keysAndValues ... )
206
+ ctx , cancel := getBeholderCallContext ()
207
+ defer cancel ()
208
+ err := b .emitter .With (LogLevelKey , "error" ).WithMapLabels (getLabelMap (keysAndValues ... )).Emit (ctx , msg )
209
+ if err != nil {
210
+ b .underlying .Errorw ("error emitting log to Beholder" , "error" , err )
211
+ }
115
212
}
116
213
117
214
func (b * beholderLogger ) Panicw (msg string , keysAndValues ... any ) {
118
- _ = b .emitter .With (LogLevelKey , "panic" ).WithMapLabels (getLabelMap (keysAndValues ... )).Emit (context .Background (), msg )
119
215
b .underlying .Panicw (msg , keysAndValues ... )
216
+ ctx , cancel := getBeholderCallContext ()
217
+ defer cancel ()
218
+ err := b .emitter .With (LogLevelKey , "panic" ).WithMapLabels (getLabelMap (keysAndValues ... )).Emit (ctx , msg )
219
+ if err != nil {
220
+ b .underlying .Errorw ("error emitting log to Beholder" , "error" , err )
221
+ }
120
222
}
121
223
122
224
func (b * beholderLogger ) Fatalw (msg string , keysAndValues ... any ) {
123
- _ = b .emitter .With (LogLevelKey , "fatal" ).WithMapLabels (getLabelMap (keysAndValues ... )).Emit (context .Background (), msg )
124
225
b .underlying .Fatalw (msg , keysAndValues ... )
226
+ ctx , cancel := getBeholderCallContext ()
227
+ defer cancel ()
228
+ err := b .emitter .With (LogLevelKey , "fatal" ).WithMapLabels (getLabelMap (keysAndValues ... )).Emit (ctx , msg )
229
+ if err != nil {
230
+ b .underlying .Errorw ("error emitting log to Beholder" , "error" , err )
231
+ }
125
232
}
126
233
127
234
func (b * beholderLogger ) Sync () error {
@@ -146,3 +253,8 @@ func getLabelMap(keysAndValues ...any) map[string]string {
146
253
}
147
254
return labels
148
255
}
256
+
257
+ func getBeholderCallContext () (context.Context , context.CancelFunc ) {
258
+ // Beholder Emit() should not block for logs wrapped in a custom event but let's be safe
259
+ return context .WithTimeout (context .Background (), defaultBeholderEmitTimeoutMs * time .Millisecond )
260
+ }
0 commit comments