Skip to content

Commit f471552

Browse files
authored
feat(logger): Emit a warning on buffer flush (#3639)
1 parent 7ae904a commit f471552

File tree

3 files changed

+46
-1
lines changed

3 files changed

+46
-1
lines changed

Diff for: packages/logger/src/Logger.ts

+14-1
Original file line numberDiff line numberDiff 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
}

Diff for: packages/logger/src/logBuffer.ts

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export class SizedItem<V> {
1717

1818
export 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
}

Diff for: packages/logger/tests/unit/logBuffer.test.ts

+30
Original file line numberDiff line numberDiff 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
});

0 commit comments

Comments
 (0)