feat: add buffer max to buffer appender
This commit is contained in:
@@ -4,6 +4,7 @@ import { LogLevel, type LogMessage } from './log-message'
|
||||
export class BufferLogAppender implements LogAppender {
|
||||
public threshold: LogLevel
|
||||
public buffer: LogMessage[]
|
||||
public bufferMax?: number
|
||||
|
||||
constructor(buffer?: LogMessage[], threshold?: LogLevel) {
|
||||
this.buffer = buffer ?? []
|
||||
@@ -12,7 +13,15 @@ export class BufferLogAppender implements LogAppender {
|
||||
|
||||
public appendMessage(msg: LogMessage): void {
|
||||
if (this.threshold && msg.level < this.threshold) return
|
||||
else this.buffer.push(msg)
|
||||
|
||||
this.buffer.push(msg)
|
||||
|
||||
if (this.bufferMax !== undefined) {
|
||||
const max = Math.max(0, this.bufferMax)
|
||||
while (this.buffer.length > max) {
|
||||
this.buffer.shift()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public clearBuffer(): void {
|
||||
|
||||
@@ -39,6 +39,36 @@ describe("BufferLogAppender", () => {
|
||||
expect(appender.buffer[1].msg).toBe("second");
|
||||
});
|
||||
|
||||
test("defaults to an unbounded buffer", () => {
|
||||
const appender = new BufferLogAppender();
|
||||
|
||||
appender.appendMessage(makeMsg({ msg: "first" }));
|
||||
appender.appendMessage(makeMsg({ msg: "second" }));
|
||||
appender.appendMessage(makeMsg({ msg: "third" }));
|
||||
|
||||
expect(appender.buffer.length).toBe(3);
|
||||
expect(appender.buffer.map((message) => message.msg)).toEqual([
|
||||
"first",
|
||||
"second",
|
||||
"third",
|
||||
]);
|
||||
});
|
||||
|
||||
test("trims oldest messages when bufferMax is exceeded", () => {
|
||||
const appender = new BufferLogAppender();
|
||||
appender.bufferMax = 2;
|
||||
|
||||
appender.appendMessage(makeMsg({ msg: "first" }));
|
||||
appender.appendMessage(makeMsg({ msg: "second" }));
|
||||
appender.appendMessage(makeMsg({ msg: "third" }));
|
||||
|
||||
expect(appender.buffer.length).toBe(2);
|
||||
expect(appender.buffer.map((message) => message.msg)).toEqual([
|
||||
"second",
|
||||
"third",
|
||||
]);
|
||||
});
|
||||
|
||||
test("respects threshold", () => {
|
||||
const appender = new BufferLogAppender(undefined, LogLevel.WARN);
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
"module": "commonjs",
|
||||
"target": "es2016",
|
||||
"declaration": true,
|
||||
"rootDir": "./src",
|
||||
"outDir": "./dist",
|
||||
"strict": true,
|
||||
"skipLibCheck": true
|
||||
|
||||
Reference in New Issue
Block a user