File tree Expand file tree Collapse file tree 3 files changed +46
-1
lines changed Expand file tree Collapse file tree 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 {
12551255 return ;
12561256 }
12571257
1258- const buffer = this . #buffer. get ( traceId ) || [ ] ;
1258+ const buffer = this . #buffer. get ( traceId ) ;
1259+ if ( buffer === undefined ) {
1260+ return ;
1261+ }
12591262
12601263 for ( const item of buffer ) {
12611264 const consoleMethod =
@@ -1266,6 +1269,16 @@ class Logger extends Utility implements LoggerInterface {
12661269 ) . toLowerCase ( ) as keyof Omit < LogFunction , 'critical' > ) ;
12671270 this . console [ consoleMethod ] ( item . value ) ;
12681271 }
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+ }
12691282
12701283 this . #buffer. delete ( traceId ) ;
12711284 }
Original file line number Diff line number Diff line change @@ -17,6 +17,7 @@ export class SizedItem<V> {
1717
1818export class SizedSet < V > extends Set < SizedItem < V > > {
1919 public currentBytesSize = 0 ;
20+ public hasEvictedLog = false ;
2021
2122 add ( item : SizedItem < V > ) : this {
2223 this . currentBytesSize += item . byteSize ;
@@ -89,6 +90,7 @@ export class CircularMap<V> extends Map<string, SizedSet<V>> {
8990 ) => {
9091 while ( buffer . currentBytesSize + item . byteSize >= this . #maxBytesSize) {
9192 buffer . shift ( ) ;
93+ buffer . hasEvictedLog = true ;
9294 }
9395 } ;
9496}
Original file line number Diff line number Diff line change @@ -107,4 +107,34 @@ describe('flushBuffer', () => {
107107 expect ( console . debug ) . toHaveBeenCalledTimes ( 0 ) ;
108108 expect ( console . warn ) . toHaveBeenCalledTimes ( 1 ) ;
109109 } ) ;
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+ } ) ;
110140} ) ;
You can’t perform that action at this time.
0 commit comments