File tree 3 files changed +46
-1
lines changed
3 files changed +46
-1
lines changed Original file line number Diff line number Diff line change @@ -1255,7 +1255,10 @@ class Logger extends Utility implements LoggerInterface {
1255
1255
return ;
1256
1256
}
1257
1257
1258
- const buffer = this . #buffer. get ( traceId ) || [ ] ;
1258
+ const buffer = this . #buffer. get ( traceId ) ;
1259
+ if ( buffer === undefined ) {
1260
+ return ;
1261
+ }
1259
1262
1260
1263
for ( const item of buffer ) {
1261
1264
const consoleMethod =
@@ -1266,6 +1269,16 @@ class Logger extends Utility implements LoggerInterface {
1266
1269
) . toLowerCase ( ) as keyof Omit < LogFunction , 'critical' > ) ;
1267
1270
this . console [ consoleMethod ] ( item . value ) ;
1268
1271
}
1272
+ if ( buffer . hasEvictedLog ) {
1273
+ this . printLog (
1274
+ LogLevelThreshold . WARN ,
1275
+ this . createAndPopulateLogItem (
1276
+ LogLevelThreshold . WARN ,
1277
+ 'Some logs are not displayed because they were evicted from the buffer. Increase buffer size to store more logs in the buffer' ,
1278
+ [ ]
1279
+ )
1280
+ ) ;
1281
+ }
1269
1282
1270
1283
this . #buffer. delete ( traceId ) ;
1271
1284
}
Original file line number Diff line number Diff line change @@ -17,6 +17,7 @@ export class SizedItem<V> {
17
17
18
18
export class SizedSet < V > extends Set < SizedItem < V > > {
19
19
public currentBytesSize = 0 ;
20
+ public hasEvictedLog = false ;
20
21
21
22
add ( item : SizedItem < V > ) : this {
22
23
this . currentBytesSize += item . byteSize ;
@@ -89,6 +90,7 @@ export class CircularMap<V> extends Map<string, SizedSet<V>> {
89
90
) => {
90
91
while ( buffer . currentBytesSize + item . byteSize >= this . #maxBytesSize) {
91
92
buffer . shift ( ) ;
93
+ buffer . hasEvictedLog = true ;
92
94
}
93
95
} ;
94
96
}
Original file line number Diff line number Diff line change @@ -107,4 +107,34 @@ describe('flushBuffer', () => {
107
107
expect ( console . debug ) . toHaveBeenCalledTimes ( 0 ) ;
108
108
expect ( console . warn ) . toHaveBeenCalledTimes ( 1 ) ;
109
109
} ) ;
110
+
111
+ it ( 'outputs a warning when buffered logs have been evicted' , ( ) => {
112
+ // Prepare
113
+ const logger = new TestLogger ( { logLevel : 'ERROR' } ) ;
114
+ logger . enableBuffering ( ) ;
115
+ logger . setbufferLevelThreshold ( LogLevelThreshold . INFO ) ;
116
+
117
+ // Act
118
+ const longMessage = 'blah' . repeat ( 10 ) ;
119
+
120
+ let i = 0 ;
121
+ while ( i < 4 ) {
122
+ logger . info (
123
+ `${ i } This is a really long log message intended to exceed the buffer ${ longMessage } `
124
+ ) ;
125
+ i ++ ;
126
+ }
127
+
128
+ // Act
129
+ logger . flushBufferWrapper ( ) ;
130
+
131
+ // Assess
132
+ expect ( console . warn ) . toHaveLogged (
133
+ expect . objectContaining ( {
134
+ level : 'WARN' ,
135
+ message :
136
+ 'Some logs are not displayed because they were evicted from the buffer. Increase buffer size to store more logs in the buffer' ,
137
+ } )
138
+ ) ;
139
+ } ) ;
110
140
} ) ;
You can’t perform that action at this time.
0 commit comments