Skip to content

Commit 57df8a8

Browse files
Lasse WallentinRomakita
Lasse Wallentin
authored andcommitted
fix(appenders): caching of levels cleared on appender change
Whenever the appenders are changed during the lifetime of the Logger the level cache will be cleared in order to pick up the change immediately. This way appenders can be changed at any time.
1 parent 43b5cca commit 57df8a8

File tree

2 files changed

+30
-2
lines changed

2 files changed

+30
-2
lines changed

src/logger/class/LoggerAppenders.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ export class LoggerAppenders {
5757
const instance: BaseAppender = new klass(config);
5858

5959
this._appenders.set(name, {name, instance, config});
60+
this._lvls.clear();
6061
return this;
6162
}
6263

@@ -66,14 +67,19 @@ export class LoggerAppenders {
6667
* @returns {boolean} Returns true if an element in the Map object existed and has been removed, or false if the element does not exist.
6768
*/
6869
delete(name: string): boolean {
69-
return this._appenders.delete(name);
70+
let existed = this._appenders.delete(name);
71+
if (existed) {
72+
this._lvls.clear();
73+
}
74+
return existed;
7075
}
7176

7277
/**
7378
* The `clear() method removes all elements from a loggerAppenders object.
7479
*/
7580
clear(): void {
7681
this._appenders.clear();
82+
this._lvls.clear();
7783
}
7884

7985
/**

test/logger/class/LoggerAppenders.spec.ts

+23-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ class TestAppender extends BaseAppender {
1414

1515
describe("LoggerAppenders", () => {
1616
before(() => {
17-
this.appenders = new LoggerAppenders();
1817
this.appenders = new LoggerAppenders();
1918
this.appenders.set("custom", {type: "test2", levels: ["debug"]});
2019
});
@@ -36,6 +35,29 @@ describe("LoggerAppenders", () => {
3635
assert.throws(() => this.appenders.set("unknow", {type: "unknow"}), "");
3736
});
3837
});
38+
39+
describe("caching updated", () => {
40+
beforeEach(() => {
41+
this.cachedAppenders = new LoggerAppenders();
42+
this.cachedAppenders.set("custom", {type: "test2", levels: ["debug"]});
43+
this.result = this.cachedAppenders.byLogLevel(levels().DEBUG);
44+
});
45+
it("when cleared should have no appenders", () => {
46+
this.cachedAppenders.clear();
47+
this.result = this.cachedAppenders.byLogLevel(levels().DEBUG);
48+
expect(this.result).to.be.an("array").lengthOf(0);
49+
});
50+
it("when deleted should have no appenders", () => {
51+
this.cachedAppenders.delete("custom");
52+
this.result = this.cachedAppenders.byLogLevel(levels().DEBUG);
53+
expect(this.result).to.be.an("array").lengthOf(0);
54+
});
55+
it("when deleted should have no appenders", () => {
56+
this.cachedAppenders.set("custom2", {type: "test2", levels: ["debug"]});
57+
this.result = this.cachedAppenders.byLogLevel(levels().DEBUG);
58+
expect(this.result).to.be.an("array").lengthOf(2);
59+
});
60+
});
3961
});
4062

4163

0 commit comments

Comments
 (0)