@@ -172,25 +172,28 @@ class Logger extends Utility implements LoggerInterface {
172
172
/**
173
173
* Represents whether the buffering functionality is enabled in the logger
174
174
*/
175
- protected isBufferEnabled = false ;
175
+ protected isBufferEnabled = true ;
176
176
177
+ /**
178
+ * Whether the buffer should be flushed when an error is logged
179
+ */
180
+ protected flushOnErrorLog = true ;
177
181
/**
178
182
* Log level threshold for the buffer
179
183
* Logs with a level lower than this threshold will be buffered
184
+ * Default is DEBUG
180
185
*/
181
- protected bufferLogThreshold : number = LogLevelThreshold . DEBUG ;
186
+ protected bufferAtVerbosity : number = LogLevelThreshold . DEBUG ;
182
187
/**
183
188
* Max size of the buffer. Additions to the buffer beyond this size will
184
189
* cause older logs to be evicted from the buffer
185
190
*/
186
- readonly #maxBufferBytesSize = 1024 ;
191
+ #maxBufferBytesSize = 1024 ;
187
192
188
193
/**
189
194
* Contains buffered logs, grouped by _X_AMZN_TRACE_ID, each group with a max size of `maxBufferBytesSize`
190
195
*/
191
- readonly #buffer: CircularMap < string > = new CircularMap ( {
192
- maxBytesSize : this . #maxBufferBytesSize,
193
- } ) ;
196
+ #buffer?: CircularMap < string > ;
194
197
195
198
/**
196
199
* Log level used by the current instance of Logger.
@@ -330,6 +333,9 @@ class Logger extends Utility implements LoggerInterface {
330
333
* @param extraInput - The extra input to log.
331
334
*/
332
335
public error ( input : LogItemMessage , ...extraInput : LogItemExtraInput ) : void {
336
+ if ( this . isBufferEnabled && this . flushOnErrorLog ) {
337
+ this . flushBuffer ( ) ;
338
+ }
333
339
this . processLogItem ( LogLevelThreshold . ERROR , input , extraInput ) ;
334
340
}
335
341
@@ -1167,6 +1173,7 @@ class Logger extends Utility implements LoggerInterface {
1167
1173
environment,
1168
1174
jsonReplacerFn,
1169
1175
logRecordOrder,
1176
+ logBufferOptions,
1170
1177
} = options ;
1171
1178
1172
1179
if ( persistentLogAttributes && persistentKeys ) {
@@ -1193,6 +1200,10 @@ class Logger extends Utility implements LoggerInterface {
1193
1200
this . setLogIndentation ( ) ;
1194
1201
this . #jsonReplacerFn = jsonReplacerFn ;
1195
1202
1203
+ if ( logBufferOptions !== undefined ) {
1204
+ this . #setLogBuffering( logBufferOptions ) ;
1205
+ }
1206
+
1196
1207
return this ;
1197
1208
}
1198
1209
@@ -1223,6 +1234,30 @@ class Logger extends Utility implements LoggerInterface {
1223
1234
persistentKeys && this . appendPersistentKeys ( persistentKeys ) ;
1224
1235
}
1225
1236
1237
+ #setLogBuffering(
1238
+ options : NonNullable < ConstructorOptions [ 'logBufferOptions' ] >
1239
+ ) {
1240
+ if ( options . maxBytes !== undefined ) {
1241
+ this . #maxBufferBytesSize = options . maxBytes ;
1242
+ }
1243
+
1244
+ this . #buffer = new CircularMap ( {
1245
+ maxBytesSize : this . #maxBufferBytesSize,
1246
+ } ) ;
1247
+
1248
+ if ( options . enabled !== undefined ) {
1249
+ this . isBufferEnabled = options . enabled ;
1250
+ }
1251
+
1252
+ const bufferAtLogLevel = options . bufferAtVerbosity ?. toUpperCase ( ) ;
1253
+
1254
+ if ( this . isValidLogLevel ( bufferAtLogLevel ) ) {
1255
+ this . bufferAtVerbosity = LogLevelThreshold [ bufferAtLogLevel ] ;
1256
+
1257
+ return ;
1258
+ }
1259
+ }
1260
+
1226
1261
/**
1227
1262
* Add a log to the buffer
1228
1263
* @param xrayTraceId - _X_AMZN_TRACE_ID of the request
@@ -1242,20 +1277,20 @@ class Logger extends Utility implements LoggerInterface {
1242
1277
this . logIndentation
1243
1278
) ;
1244
1279
1245
- this . #buffer. setItem ( xrayTraceId , stringified , logLevel ) ;
1280
+ this . #buffer? .setItem ( xrayTraceId , stringified , logLevel ) ;
1246
1281
}
1247
1282
1248
1283
/**
1249
1284
* Flushes all items of the respective _X_AMZN_TRACE_ID within
1250
1285
* the buffer.
1251
1286
*/
1252
- protected flushBuffer ( ) : void {
1287
+ flushBuffer ( ) : void {
1253
1288
const traceId = this . envVarsService . getXrayTraceId ( ) ;
1254
1289
if ( traceId === undefined ) {
1255
1290
return ;
1256
1291
}
1257
1292
1258
- const buffer = this . #buffer. get ( traceId ) ;
1293
+ const buffer = this . #buffer? .get ( traceId ) ;
1259
1294
if ( buffer === undefined ) {
1260
1295
return ;
1261
1296
}
@@ -1280,7 +1315,7 @@ class Logger extends Utility implements LoggerInterface {
1280
1315
) ;
1281
1316
}
1282
1317
1283
- this . #buffer. delete ( traceId ) ;
1318
+ this . #buffer? .delete ( traceId ) ;
1284
1319
}
1285
1320
/**
1286
1321
* Tests if the log meets the criteria to be buffered
@@ -1294,7 +1329,7 @@ class Logger extends Utility implements LoggerInterface {
1294
1329
return (
1295
1330
this . isBufferEnabled &&
1296
1331
traceId !== undefined &&
1297
- logLevel <= this . bufferLogThreshold
1332
+ logLevel <= this . bufferAtVerbosity
1298
1333
) ;
1299
1334
}
1300
1335
}
0 commit comments