Skip to content

Commit 5f0cab8

Browse files
committed
Add log.removeHandler function
1 parent bd39196 commit 5f0cab8

2 files changed

Lines changed: 72 additions & 1 deletion

File tree

red/runtime/log.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,12 @@ var log = module.exports = {
114114
addHandler: function(func) {
115115
logHandlers.push(func);
116116
},
117+
removeHandler: function(func) {
118+
var index = logHandlers.indexOf(func);
119+
if (index > -1) {
120+
logHandlers.splice(index,1);
121+
}
122+
},
117123
log: function(msg) {
118124
msg.timestamp = Date.now();
119125
logHandlers.forEach(function(handler) {

test/red/runtime/log_spec.js

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
var should = require("should");
1717
var sinon = require("sinon");
1818
var util = require("util");
19-
2019
var log = require("../../../red/runtime/log");
2120

2221
describe("runtime/log", function() {
@@ -156,4 +155,70 @@ describe("runtime/log", function() {
156155
sinon.assert.neverCalledWithMatch(util.log,"[trace] This is a trace");
157156
sinon.assert.neverCalledWithMatch(util.log,"[metric] ");
158157
});
158+
159+
it('add a custom log handler directly', function() {
160+
var settings = {};
161+
log.init(settings);
162+
163+
var logEvents = [];
164+
var loggerOne = {
165+
emit: function(event,msg) {
166+
logEvents.push({logger:1,msg:msg});
167+
}
168+
};
169+
var loggerTwo = {
170+
emit: function(event,msg) {
171+
logEvents.push({logger:2,msg:msg});
172+
}
173+
};
174+
log.addHandler(loggerOne);
175+
log.addHandler(loggerTwo);
176+
177+
log.error("This is an error");
178+
log.warn("This is a warn");
179+
log.info("This is an info");
180+
log.debug("This is a debug");
181+
log.trace("This is a trace");
182+
log.log({level:log.METRIC,msg:"testMetric"});
183+
184+
logEvents.filter(function(evt) { return evt.logger === 1}).should.have.lengthOf(6);
185+
logEvents.filter(function(evt) { return evt.logger === 2}).should.have.lengthOf(6);
186+
});
187+
188+
it('remove a custom log handler directly', function() {
189+
var settings = {};
190+
log.init(settings);
191+
192+
var logEvents = [];
193+
var loggerOne = {
194+
emit: function(event,msg) {
195+
logEvents.push({logger:1,msg:msg});
196+
}
197+
};
198+
var loggerTwo = {
199+
emit: function(event,msg) {
200+
logEvents.push({logger:2,msg:msg});
201+
}
202+
};
203+
log.addHandler(loggerOne);
204+
log.addHandler(loggerTwo);
205+
206+
log.info("This is an info");
207+
logEvents.filter(function(evt) { return evt.logger === 1}).should.have.lengthOf(1);
208+
logEvents.filter(function(evt) { return evt.logger === 2}).should.have.lengthOf(1);
209+
210+
211+
log.removeHandler(loggerTwo);
212+
log.info("This is an info");
213+
logEvents.filter(function(evt) { return evt.logger === 1}).should.have.lengthOf(2);
214+
logEvents.filter(function(evt) { return evt.logger === 2}).should.have.lengthOf(1);
215+
216+
log.removeHandler(loggerOne);
217+
log.info("This is an info");
218+
logEvents.filter(function(evt) { return evt.logger === 1}).should.have.lengthOf(2);
219+
logEvents.filter(function(evt) { return evt.logger === 2}).should.have.lengthOf(1);
220+
221+
222+
});
223+
159224
});

0 commit comments

Comments
 (0)