loggj 1.0.5 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/formatter.js +24 -1
- package/lib/handlers/handler.js +3 -5
- package/lib/handlers/rotating.js +11 -12
- package/lib/logger.js +2 -4
- package/lib/utils/file-remover.js +8 -9
- package/lib/utils/re-glob.js +3 -3
- package/package.json +5 -4
- package/test/config.js +21 -20
- package/test/console.js +4 -4
- package/test/formatter.js +32 -6
- package/test/handlers.js +34 -31
- package/test/logger.js +17 -17
- package/test/util/error.js +2 -2
package/lib/formatter.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
4
4
|
|
|
5
5
|
var util = require('util');
|
|
6
|
+
var EOL = require('os').EOL;
|
|
6
7
|
|
|
7
8
|
var compileFormat = require('./utils/compileFormat');
|
|
8
9
|
|
|
@@ -29,9 +30,31 @@ Formatter.prototype = {
|
|
|
29
30
|
formatted = util.format.apply(util, record.args);
|
|
30
31
|
|
|
31
32
|
record.message = formatted;
|
|
32
|
-
|
|
33
|
+
|
|
34
|
+
if (this._format == 'json') {
|
|
35
|
+
// Format message as JSON
|
|
36
|
+
let obj = {
|
|
37
|
+
name: record.name,
|
|
38
|
+
message: record.message,
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
['levelname', 'pid', 'timestamp'].forEach(k => {
|
|
42
|
+
if (record[k] != null) {
|
|
43
|
+
obj[k] = record[k];
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
if (record.err) {
|
|
48
|
+
obj.err = record.err.stack;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
formatted = JSON.stringify(obj) + EOL;
|
|
52
|
+
} else {
|
|
53
|
+
formatted = this._compiledFormat(record);
|
|
54
|
+
}
|
|
33
55
|
|
|
34
56
|
record.message = message;
|
|
57
|
+
|
|
35
58
|
return formatted;
|
|
36
59
|
}
|
|
37
60
|
};
|
package/lib/handlers/handler.js
CHANGED
|
@@ -4,8 +4,6 @@
|
|
|
4
4
|
|
|
5
5
|
var util = require('util');
|
|
6
6
|
|
|
7
|
-
var Promise = require('bluebird');
|
|
8
|
-
|
|
9
7
|
var Formatter = require('../formatter');
|
|
10
8
|
var Filterer = require('../filterer');
|
|
11
9
|
var LEVELS = require('../levels');
|
|
@@ -23,9 +21,9 @@ function Handler(options) {
|
|
|
23
21
|
} else if('format' in options) {
|
|
24
22
|
this.setFormatter(new Formatter(options.format));
|
|
25
23
|
}
|
|
26
|
-
this._emit =
|
|
24
|
+
this._emit = util.promisify(function() {
|
|
27
25
|
return this.emit.apply(this, arguments);
|
|
28
|
-
}
|
|
26
|
+
});
|
|
29
27
|
Handler.all.push(this);
|
|
30
28
|
Filterer.call(this, options);
|
|
31
29
|
}
|
|
@@ -41,7 +39,7 @@ var proto = {
|
|
|
41
39
|
|
|
42
40
|
handle: function(record) {
|
|
43
41
|
if (!this.filter(record)) {
|
|
44
|
-
return Promise.
|
|
42
|
+
return Promise.resolve();
|
|
45
43
|
}
|
|
46
44
|
if (this.emit.length < 2) {
|
|
47
45
|
throw new Error('Handler.emit requires a callback argument');
|
package/lib/handlers/rotating.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
const fs = require('fs').promises;
|
|
4
4
|
var util = require('util');
|
|
5
5
|
var lockFile = require('lockfile');
|
|
6
6
|
var path = require('path');
|
|
7
|
-
var Promise = require('bluebird');
|
|
8
7
|
|
|
9
|
-
var stat =
|
|
10
|
-
var readdir =
|
|
8
|
+
var stat = fs.stat;
|
|
9
|
+
var readdir = fs.readdir;
|
|
11
10
|
|
|
12
11
|
var compileFormat = require('../utils/compileFormat');
|
|
13
12
|
|
|
@@ -207,7 +206,7 @@ RotatingFileHandler.prototype.emit = function emit(record, callback) {
|
|
|
207
206
|
that.reopen().then(() => {
|
|
208
207
|
that.doRotate(false, resolve);
|
|
209
208
|
}, () => {
|
|
210
|
-
return Promise.
|
|
209
|
+
return Promise.resolve();
|
|
211
210
|
});
|
|
212
211
|
} else {
|
|
213
212
|
resolve();
|
|
@@ -229,13 +228,13 @@ FileHandler.prototype.doRotate = function (force, cb) {
|
|
|
229
228
|
that._rotatingNow = true;
|
|
230
229
|
return that.rotate().then(() => {
|
|
231
230
|
that._rotatingNow = false;
|
|
232
|
-
return Promise.
|
|
231
|
+
return Promise.resolve();
|
|
233
232
|
});
|
|
234
233
|
} else {
|
|
235
234
|
debug('Rotating now already, skipping..');
|
|
236
235
|
}
|
|
237
236
|
}
|
|
238
|
-
return Promise.
|
|
237
|
+
return Promise.resolve();
|
|
239
238
|
}).then(function () {
|
|
240
239
|
if (cb) { cb(); }
|
|
241
240
|
}).catch((err) => {
|
|
@@ -257,7 +256,7 @@ FileHandler.prototype.reopen = function reopen() {
|
|
|
257
256
|
};
|
|
258
257
|
|
|
259
258
|
RotatingFileHandler.prototype._deleteOldFiles = function () {
|
|
260
|
-
return this._remover ? this._remover.deleteOldFiles() : Promise.
|
|
259
|
+
return this._remover ? this._remover.deleteOldFiles() : Promise.resolve();
|
|
261
260
|
};
|
|
262
261
|
|
|
263
262
|
RotatingFileHandler.prototype.shouldRotate = function (force) {
|
|
@@ -324,7 +323,7 @@ RotatingFileHandler.prototype._getData = function () {
|
|
|
324
323
|
}
|
|
325
324
|
}
|
|
326
325
|
that._prevSize = stat.size;
|
|
327
|
-
return Promise.
|
|
326
|
+
return Promise.resolve([stat.size]);
|
|
328
327
|
}).catch((err) => {
|
|
329
328
|
if (err.code == 'ENOENT') {
|
|
330
329
|
debug('No file, reopening..');
|
|
@@ -390,7 +389,7 @@ RotatingFileHandler.prototype.rotate = function () {
|
|
|
390
389
|
that._rotateAt = that._nextRotate(new Date());
|
|
391
390
|
that._rotateStartPeriod = that._rotatePeriod(that._rotateAt);
|
|
392
391
|
}
|
|
393
|
-
return Promise.
|
|
392
|
+
return Promise.resolve();
|
|
394
393
|
});
|
|
395
394
|
}, (e) => {
|
|
396
395
|
debug('.Lock rejected');
|
|
@@ -406,7 +405,7 @@ RotatingFileHandler.prototype.rotate = function () {
|
|
|
406
405
|
debug('.Unlock file:', fileRotate);
|
|
407
406
|
lockFile.unlockSync(fileRotate);
|
|
408
407
|
debug(' -- ROTATE NOT OK ');
|
|
409
|
-
return Promise.
|
|
408
|
+
return Promise.resolve();
|
|
410
409
|
});
|
|
411
410
|
};
|
|
412
411
|
|
|
@@ -475,7 +474,7 @@ RotatingFileHandler.prototype._renameBySize = function () {
|
|
|
475
474
|
fs.renameSync(filename, newFilename);
|
|
476
475
|
}
|
|
477
476
|
}
|
|
478
|
-
return Promise.
|
|
477
|
+
return Promise.resolve();
|
|
479
478
|
});
|
|
480
479
|
};
|
|
481
480
|
|
package/lib/logger.js
CHANGED
|
@@ -4,8 +4,6 @@
|
|
|
4
4
|
|
|
5
5
|
var util = require('util');
|
|
6
6
|
|
|
7
|
-
var Promise = require('bluebird');
|
|
8
|
-
|
|
9
7
|
var LEVELS = require('./levels');
|
|
10
8
|
var Filterer = require('./filterer');
|
|
11
9
|
|
|
@@ -218,7 +216,7 @@ var proto = {
|
|
|
218
216
|
} else if(promises[0]) {
|
|
219
217
|
return promises[0];
|
|
220
218
|
} else {
|
|
221
|
-
return Promise.
|
|
219
|
+
return Promise.resolve();
|
|
222
220
|
}
|
|
223
221
|
},
|
|
224
222
|
|
|
@@ -240,7 +238,7 @@ var proto = {
|
|
|
240
238
|
if(this.isEnabledFor(LEVELS[level])) {
|
|
241
239
|
promise = this.handle(this.makeRecord(this._name, level, msg, args));
|
|
242
240
|
} else {
|
|
243
|
-
promise = Promise.
|
|
241
|
+
promise = Promise.resolve();
|
|
244
242
|
}
|
|
245
243
|
|
|
246
244
|
return promise;
|
|
@@ -196,15 +196,12 @@ module.exports.compileFormat = compileFormat = function(text, _defaultDateFormat
|
|
|
196
196
|
return source;
|
|
197
197
|
};
|
|
198
198
|
|
|
199
|
-
|
|
199
|
+
const fs = require('fs').promises;
|
|
200
200
|
var glob = require('./re-glob');
|
|
201
|
-
var Promise = require('bluebird');
|
|
202
201
|
var path = require('path');
|
|
203
202
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
var stat = Promise.promisify(fs.stat);
|
|
207
|
-
var unlink = Promise.promisify(fs.unlink);
|
|
203
|
+
var stat = fs.stat;
|
|
204
|
+
var unlink = fs.unlink;
|
|
208
205
|
|
|
209
206
|
//71 file per 354ms, empty 8ms
|
|
210
207
|
function FileRemover(opts) {
|
|
@@ -223,10 +220,12 @@ function compareByTime(f1, f2) {
|
|
|
223
220
|
FileRemover.prototype.deleteOldFiles = function() {
|
|
224
221
|
var that = this;
|
|
225
222
|
|
|
226
|
-
return
|
|
223
|
+
return new Promise((resolve, reject) => {
|
|
224
|
+
glob(this.filesFormat, resolve);
|
|
225
|
+
}).then(function(matchedFiles) {
|
|
227
226
|
return Promise.all(matchedFiles.map(function(file) {
|
|
228
227
|
if(that.timeCache[file])
|
|
229
|
-
return Promise.
|
|
228
|
+
return Promise.resolve([file, that.timeCache[file]]);
|
|
230
229
|
else
|
|
231
230
|
return stat(file).then(function(s) {
|
|
232
231
|
that.timeCache[file] = s.mtime.getTime();
|
|
@@ -242,4 +241,4 @@ FileRemover.prototype.deleteOldFiles = function() {
|
|
|
242
241
|
});
|
|
243
242
|
};
|
|
244
243
|
|
|
245
|
-
module.exports.FileRemover = FileRemover;
|
|
244
|
+
module.exports.FileRemover = FileRemover;
|
package/lib/utils/re-glob.js
CHANGED
|
@@ -70,8 +70,8 @@ function Minimatch(pattern, options) {
|
|
|
70
70
|
|
|
71
71
|
module.exports = glob
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
const fs = require('fs').promises;
|
|
74
|
+
var inherits = require("util").inherits
|
|
75
75
|
, EE = require("events").EventEmitter
|
|
76
76
|
, path = require("path")
|
|
77
77
|
, isDir = {}
|
|
@@ -549,4 +549,4 @@ function absWin (p) {
|
|
|
549
549
|
|
|
550
550
|
function absUnix (p) {
|
|
551
551
|
return p.charAt(0) === "/" || p === ""
|
|
552
|
-
}
|
|
552
|
+
}
|
package/package.json
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "loggj",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.7",
|
|
4
4
|
"dependencies": {
|
|
5
|
-
"bluebird": "^3.3.4",
|
|
6
5
|
"chalk": "^1.1.1",
|
|
7
6
|
"lockfile": "^1.0.1",
|
|
8
7
|
"stack-trace": "0.0.9"
|
|
9
8
|
},
|
|
10
9
|
"devDependencies": {
|
|
11
|
-
"mocha": "^2.
|
|
10
|
+
"mocha": "^10.2.0",
|
|
12
11
|
"sinon": "^1.17.3"
|
|
13
12
|
},
|
|
14
13
|
"description": "Fast hierarchical text logger",
|
|
15
14
|
"main": "./lib/index.js",
|
|
16
|
-
"scripts": {
|
|
15
|
+
"scripts": {
|
|
16
|
+
"test": "node_modules/.bin/mocha test --recursive"
|
|
17
|
+
},
|
|
17
18
|
"bugs": "https://github.com/glintik/loggj/issues",
|
|
18
19
|
"repository": {
|
|
19
20
|
"type": "git",
|
package/test/config.js
CHANGED
|
@@ -12,7 +12,7 @@ var rufus = require('../');
|
|
|
12
12
|
var NOW = Date.now();
|
|
13
13
|
var counter = 1;
|
|
14
14
|
function tmp() {
|
|
15
|
-
return path.join(os.
|
|
15
|
+
return path.join(os.tmpdir(),
|
|
16
16
|
'rufus-' + NOW + '-' + process.pid + '-' + (counter++));
|
|
17
17
|
}
|
|
18
18
|
|
|
@@ -69,37 +69,37 @@ describe('basicConfig', function () {
|
|
|
69
69
|
};
|
|
70
70
|
|
|
71
71
|
rufus.info('danger').then(function () {
|
|
72
|
-
assert.
|
|
73
|
-
assert.
|
|
74
|
-
|
|
75
|
-
|
|
72
|
+
assert.strictEqual(val, 'danger');
|
|
73
|
+
assert.strictEqual(rufus._level, oldLevel);
|
|
74
|
+
done();
|
|
75
|
+
});
|
|
76
76
|
});
|
|
77
77
|
|
|
78
78
|
it('only works once', function () {
|
|
79
79
|
rufus.basicConfig();
|
|
80
|
-
assert.
|
|
80
|
+
assert.strictEqual(rufus._level, oldLevel);
|
|
81
81
|
|
|
82
82
|
rufus.basicConfig({ level: 'critical' });
|
|
83
|
-
assert.
|
|
84
|
-
assert.
|
|
83
|
+
assert.strictEqual(rufus._handlers.length, 1);
|
|
84
|
+
assert.strictEqual(rufus._level, oldLevel);
|
|
85
85
|
});
|
|
86
86
|
|
|
87
87
|
it('works with file option', function () {
|
|
88
88
|
var name = tmp();
|
|
89
89
|
rufus.basicConfig({ file: name });
|
|
90
|
-
assert.
|
|
91
|
-
assert.
|
|
90
|
+
assert.strictEqual(rufus._handlers.length, 1);
|
|
91
|
+
assert.strictEqual(rufus._handlers[0]._file, name);
|
|
92
92
|
});
|
|
93
93
|
|
|
94
94
|
|
|
95
95
|
it('works with level', function () {
|
|
96
96
|
rufus.basicConfig({ level: 'error' });
|
|
97
|
-
assert.
|
|
97
|
+
assert.strictEqual(rufus._level, rufus.ERROR);
|
|
98
98
|
});
|
|
99
99
|
|
|
100
100
|
it('works with format', function () {
|
|
101
101
|
rufus.basicConfig({ format: '%msg'});
|
|
102
|
-
assert.
|
|
102
|
+
assert.strictEqual(rufus._handlers[0]._formatter._format, '%msg');
|
|
103
103
|
});
|
|
104
104
|
|
|
105
105
|
afterEach(function () {
|
|
@@ -149,30 +149,31 @@ describe('config', function () {
|
|
|
149
149
|
|
|
150
150
|
var log = rufus.getLogger('qqq.zzz');
|
|
151
151
|
var handler = log._handlers[0];
|
|
152
|
-
assert.
|
|
152
|
+
assert.strictEqual(log._handlers.length, 1);
|
|
153
153
|
assert(!log.propagate);
|
|
154
154
|
|
|
155
155
|
var msg = handler.format({ message: 'hi', args: [ 'hi' ], levelname: 'BAR'});
|
|
156
|
-
assert.
|
|
156
|
+
assert.strictEqual(msg, 'foo! BAR: hi');
|
|
157
157
|
|
|
158
158
|
log.debug('user').then(function () {
|
|
159
|
-
assert.
|
|
159
|
+
assert.strictEqual(handler.spy.getCallCount(), 0);
|
|
160
160
|
|
|
161
161
|
return log.info('user foo');
|
|
162
162
|
}).then(function () {
|
|
163
|
-
assert.
|
|
164
|
-
assert.
|
|
163
|
+
assert.strictEqual(handler.spy.getCallCount(), 1);
|
|
164
|
+
assert.strictEqual(handler.spy.getLastArgs()[0].message, 'user foo');
|
|
165
165
|
|
|
166
166
|
return log.info('ignore me');
|
|
167
167
|
}).then(function () {
|
|
168
|
-
assert.
|
|
169
|
-
|
|
168
|
+
assert.strictEqual(handler.spy.getCallCount(), 1);
|
|
169
|
+
done();
|
|
170
|
+
});
|
|
170
171
|
});
|
|
171
172
|
|
|
172
173
|
it('should be able to config with just JSON', function () {
|
|
173
174
|
rufus.config(require('./util/config.json'));
|
|
174
175
|
|
|
175
176
|
var log = rufus.getLogger('test.config.json');
|
|
176
|
-
assert.
|
|
177
|
+
assert.strictEqual(log._handlers.length, 2);
|
|
177
178
|
});
|
|
178
179
|
});
|
package/test/console.js
CHANGED
|
@@ -32,7 +32,7 @@ describe('Console replacement', function() {
|
|
|
32
32
|
|
|
33
33
|
after(function() {
|
|
34
34
|
rufus.console.restore();
|
|
35
|
-
assert.
|
|
35
|
+
assert.strictEqual(console.log, mockLog);
|
|
36
36
|
console.log = prevLog;
|
|
37
37
|
rufus._handlers = [];
|
|
38
38
|
});
|
|
@@ -41,14 +41,14 @@ describe('Console replacement', function() {
|
|
|
41
41
|
it('can inject into global scope', function() {
|
|
42
42
|
console.warn('test');
|
|
43
43
|
assert(spy._lastRecord);
|
|
44
|
-
assert.
|
|
44
|
+
assert.strictEqual(spy._lastRecord.message, 'test');
|
|
45
45
|
});
|
|
46
46
|
|
|
47
47
|
it('can generate a name', function() {
|
|
48
48
|
console.log('foo');
|
|
49
|
-
assert.
|
|
49
|
+
assert.strictEqual(spy._lastRecord.name, 'test.console');
|
|
50
50
|
|
|
51
51
|
consoleUtil('bar');
|
|
52
|
-
assert.
|
|
52
|
+
assert.strictEqual(spy._lastRecord.name, 'test.util.console');
|
|
53
53
|
});
|
|
54
54
|
});
|
package/test/formatter.js
CHANGED
|
@@ -12,7 +12,7 @@ var rufus = require('../');
|
|
|
12
12
|
describe('Formatter', function() {
|
|
13
13
|
it('should accept a format string', function() {
|
|
14
14
|
var formatter = new rufus.Formatter('%level');
|
|
15
|
-
assert.
|
|
15
|
+
assert.strictEqual(formatter._format, '%level');
|
|
16
16
|
});
|
|
17
17
|
|
|
18
18
|
it('should accept options', function() {
|
|
@@ -20,7 +20,7 @@ describe('Formatter', function() {
|
|
|
20
20
|
format: '%level'
|
|
21
21
|
});
|
|
22
22
|
|
|
23
|
-
assert.
|
|
23
|
+
assert.strictEqual(formatter._format, '%level');
|
|
24
24
|
});
|
|
25
25
|
|
|
26
26
|
it('should output an Error stack', function() {
|
|
@@ -37,8 +37,7 @@ describe('Formatter', function() {
|
|
|
37
37
|
err: e
|
|
38
38
|
};
|
|
39
39
|
|
|
40
|
-
assert.
|
|
41
|
-
name + ': ' + msg + EOL + e.stack + EOL);
|
|
40
|
+
assert.strictEqual(formatter.format(record), name + ': ' + msg + EOL + e.stack + EOL);
|
|
42
41
|
});
|
|
43
42
|
|
|
44
43
|
it('should allow to set date format', function() {
|
|
@@ -58,6 +57,33 @@ describe('Formatter', function() {
|
|
|
58
57
|
return '0' + val;
|
|
59
58
|
}
|
|
60
59
|
var expected = d.getFullYear() + '-' + pad(d.getMonth() + 1);
|
|
61
|
-
assert.
|
|
60
|
+
assert.strictEqual(formatter.format(record), expected);
|
|
62
61
|
});
|
|
63
|
-
|
|
62
|
+
|
|
63
|
+
it('should format as json', function() {
|
|
64
|
+
var formatter = new rufus.Formatter({
|
|
65
|
+
format: 'json'
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
var e = new Error('boom');
|
|
69
|
+
|
|
70
|
+
let message = 'some message';
|
|
71
|
+
var record = {
|
|
72
|
+
name: 'some name',
|
|
73
|
+
message,
|
|
74
|
+
args: [message, 1, 'abc'],
|
|
75
|
+
levelname: 'INFO',
|
|
76
|
+
pid: 123,
|
|
77
|
+
timestamp: new Date(),
|
|
78
|
+
err: e,
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
let recordExpected = Object.assign({}, record, {
|
|
82
|
+
err: e.stack,
|
|
83
|
+
message: `${message} 1 abc`
|
|
84
|
+
});
|
|
85
|
+
delete recordExpected.args;
|
|
86
|
+
|
|
87
|
+
assert.strictEqual(formatter.format(record), JSON.stringify(recordExpected) + EOL);
|
|
88
|
+
});
|
|
89
|
+
});
|
package/test/handlers.js
CHANGED
|
@@ -15,7 +15,7 @@ var glob = require('../lib/utils/re-glob');
|
|
|
15
15
|
var NOW = Date.now();
|
|
16
16
|
var counter = 1;
|
|
17
17
|
function tmp() {
|
|
18
|
-
return path.join(os.
|
|
18
|
+
return path.join(os.tmpdir(),
|
|
19
19
|
'rufus-' + NOW + '-' + process.pid + '-' + (counter++));
|
|
20
20
|
}
|
|
21
21
|
|
|
@@ -35,12 +35,12 @@ describe('Handler', function () {
|
|
|
35
35
|
describe('constructor', function () {
|
|
36
36
|
it('should accept options', function () {
|
|
37
37
|
var h = new rufus.Handler({ level: rufus.ERROR });
|
|
38
|
-
assert.
|
|
38
|
+
assert.strictEqual(h.level, rufus.ERROR);
|
|
39
39
|
});
|
|
40
40
|
|
|
41
41
|
it('should accept a level', function () {
|
|
42
42
|
var h = new rufus.Handler(rufus.WARN);
|
|
43
|
-
assert.
|
|
43
|
+
assert.strictEqual(h.level, rufus.WARN);
|
|
44
44
|
});
|
|
45
45
|
});
|
|
46
46
|
|
|
@@ -71,12 +71,13 @@ describe('Handler', function () {
|
|
|
71
71
|
|
|
72
72
|
h.addFilter(rufus.makeFilter('foo'));
|
|
73
73
|
h.handle({ name: 'foo' }).then(function () {
|
|
74
|
-
assert.
|
|
74
|
+
assert.strictEqual(lastRecord.name, 'foo');
|
|
75
75
|
|
|
76
76
|
return h.handle({ name: 'foobar' });
|
|
77
77
|
}).then(function () {
|
|
78
78
|
assert.notEqual(lastRecord.name, 'foobar');
|
|
79
|
-
|
|
79
|
+
done();
|
|
80
|
+
});
|
|
80
81
|
});
|
|
81
82
|
});
|
|
82
83
|
|
|
@@ -97,16 +98,16 @@ describe('Stream', function () {
|
|
|
97
98
|
stream: stream
|
|
98
99
|
});
|
|
99
100
|
|
|
100
|
-
assert.
|
|
101
|
-
assert.
|
|
101
|
+
assert.strictEqual(handler.level, rufus.INFO);
|
|
102
|
+
assert.strictEqual(handler._stream, stream);
|
|
102
103
|
});
|
|
103
104
|
|
|
104
105
|
it('should accept just a stream', function () {
|
|
105
106
|
var stream = {};
|
|
106
107
|
var handler = new rufus.handlers.Stream(stream);
|
|
107
108
|
|
|
108
|
-
assert.
|
|
109
|
-
assert.
|
|
109
|
+
assert.strictEqual(handler.level, rufus.NOTSET);
|
|
110
|
+
assert.strictEqual(handler._stream, stream);
|
|
110
111
|
});
|
|
111
112
|
});
|
|
112
113
|
|
|
@@ -125,7 +126,7 @@ describe('Stream', function () {
|
|
|
125
126
|
formatter: new rufus.Formatter('%message%n')
|
|
126
127
|
});
|
|
127
128
|
handler.handle({ message: 'foo', args: ['foo'] }).then(function () {
|
|
128
|
-
assert.
|
|
129
|
+
assert.strictEqual(out, 'foo\n');
|
|
129
130
|
done();
|
|
130
131
|
});
|
|
131
132
|
});
|
|
@@ -144,8 +145,9 @@ describe('Stream', function () {
|
|
|
144
145
|
formatter: new rufus.Formatter('%message%n')
|
|
145
146
|
});
|
|
146
147
|
handler.handle({ message: 'secret', args: ['secret'] }).then(function () {
|
|
147
|
-
assert.
|
|
148
|
-
|
|
148
|
+
assert.strictEqual(out, 'secret\n');
|
|
149
|
+
done();
|
|
150
|
+
});
|
|
149
151
|
});
|
|
150
152
|
});
|
|
151
153
|
});
|
|
@@ -159,15 +161,15 @@ describe('File', function () {
|
|
|
159
161
|
file: filename
|
|
160
162
|
});
|
|
161
163
|
|
|
162
|
-
assert.
|
|
163
|
-
assert.
|
|
164
|
+
assert.strictEqual(handler.level, rufus.WARN);
|
|
165
|
+
assert.strictEqual(handler._file, filename);
|
|
164
166
|
});
|
|
165
167
|
|
|
166
168
|
it('should accept a filename', function () {
|
|
167
169
|
var filename = tmp();
|
|
168
170
|
var handler = new rufus.handlers.File(filename);
|
|
169
171
|
|
|
170
|
-
assert.
|
|
172
|
+
assert.strictEqual(handler._file, filename);
|
|
171
173
|
});
|
|
172
174
|
});
|
|
173
175
|
|
|
@@ -184,7 +186,7 @@ describe('File', function () {
|
|
|
184
186
|
assert.equal(contents.toString(), 'recon\n');
|
|
185
187
|
done();
|
|
186
188
|
});
|
|
187
|
-
})
|
|
189
|
+
});
|
|
188
190
|
});
|
|
189
191
|
});
|
|
190
192
|
});
|
|
@@ -193,8 +195,8 @@ describe('Console', function () {
|
|
|
193
195
|
describe('constructor', function () {
|
|
194
196
|
it('should use stdout and stderr', function () {
|
|
195
197
|
var h = new rufus.handlers.Console();
|
|
196
|
-
assert.
|
|
197
|
-
assert.
|
|
198
|
+
assert.strictEqual(h._out._stream, process.stdout);
|
|
199
|
+
assert.strictEqual(h._err._stream, process.stderr);
|
|
198
200
|
});
|
|
199
201
|
});
|
|
200
202
|
|
|
@@ -214,8 +216,9 @@ describe('Console', function () {
|
|
|
214
216
|
};
|
|
215
217
|
|
|
216
218
|
h.handle({ level: rufus.INFO, message: 'oscar mike', args: ['oscar mike'] }).then(function () {
|
|
217
|
-
assert.
|
|
218
|
-
|
|
219
|
+
assert.strictEqual(val, 'oscar mike\n');
|
|
220
|
+
done();
|
|
221
|
+
});
|
|
219
222
|
});
|
|
220
223
|
|
|
221
224
|
it('should send warn and higher messages to stderr', function (done) {
|
|
@@ -233,8 +236,8 @@ describe('Console', function () {
|
|
|
233
236
|
};
|
|
234
237
|
|
|
235
238
|
h.handle({ level: rufus.WARN, message: 'mayday', args: ['mayday'] }).then(function () {
|
|
236
|
-
assert.
|
|
237
|
-
}).
|
|
239
|
+
assert.strictEqual(val, 'mayday\n');
|
|
240
|
+
}).then(done);
|
|
238
241
|
});
|
|
239
242
|
});
|
|
240
243
|
});
|
|
@@ -251,13 +254,13 @@ describe('Console', function () {
|
|
|
251
254
|
formatter: new rufus.Formatter('%message%n')
|
|
252
255
|
});
|
|
253
256
|
|
|
254
|
-
assert.
|
|
257
|
+
assert.strictEqual(handler._file, filename);
|
|
255
258
|
handler.handle(rec(bytes(60)));
|
|
256
259
|
handler.handle(rec(bytes(50)));
|
|
257
260
|
handler.handle(rec(bytes(45))).then(function () {
|
|
258
|
-
assert.
|
|
259
|
-
assert.
|
|
260
|
-
assert.
|
|
261
|
+
assert.strictEqual(fs.statSync(filename).size, 46);
|
|
262
|
+
assert.strictEqual(fs.statSync(filename + '.1').size, 51);
|
|
263
|
+
assert.strictEqual(fs.statSync(filename + '.2').size, 61);
|
|
261
264
|
}).done(done);
|
|
262
265
|
});
|
|
263
266
|
|
|
@@ -304,9 +307,9 @@ describe('Console', function () {
|
|
|
304
307
|
handler.handle({ message: bytes(55), args: [bytes(55)] });
|
|
305
308
|
handler.handle({ message: bytes(60), args: [bytes(60)] });
|
|
306
309
|
handler.handle({ message: bytes(45), args: [bytes(45)] }).then(function () {
|
|
307
|
-
assert.
|
|
308
|
-
assert.
|
|
309
|
-
assert.
|
|
310
|
+
assert.strictEqual(fs.statSync(filename).size, 46);
|
|
311
|
+
assert.strictEqual(fs.statSync(filename + '.1').size, 61);
|
|
312
|
+
assert.strictEqual(fs.statSync(filename + '.2').size, 56);
|
|
310
313
|
assert(!fs.existsSync(filename + '.3'));
|
|
311
314
|
}).done(done);
|
|
312
315
|
});
|
|
@@ -324,9 +327,9 @@ describe('Console', function () {
|
|
|
324
327
|
handler.handle({ message: bytes(29), args: [bytes(29)] }).then(function () {
|
|
325
328
|
return handler.handle({ message: bytes(31), args: [bytes(31)] });
|
|
326
329
|
}).then(function () {
|
|
327
|
-
assert.
|
|
330
|
+
assert.strictEqual(fs.statSync(filename).size, 62);
|
|
328
331
|
}).done(done);
|
|
329
332
|
});
|
|
330
333
|
});
|
|
331
334
|
});
|
|
332
|
-
*/
|
|
335
|
+
*/
|
package/test/logger.js
CHANGED
|
@@ -32,7 +32,7 @@ describe('Logger', function() {
|
|
|
32
32
|
var logger1 = new Logger(name);
|
|
33
33
|
var logger2 = new Logger(name);
|
|
34
34
|
|
|
35
|
-
assert.
|
|
35
|
+
assert.strictEqual(logger1, logger2);
|
|
36
36
|
});
|
|
37
37
|
|
|
38
38
|
it('should allow add handlers and remove them', function() {
|
|
@@ -40,10 +40,10 @@ describe('Logger', function() {
|
|
|
40
40
|
var handler = new rufus.handlers.Null();
|
|
41
41
|
|
|
42
42
|
logger.addHandler(handler);
|
|
43
|
-
assert.
|
|
43
|
+
assert.strictEqual(logger.getHandlers().length, 1);
|
|
44
44
|
|
|
45
45
|
logger.removeHandler(handler);
|
|
46
|
-
assert.
|
|
46
|
+
assert.strictEqual(logger.getHandlers().length, 0);
|
|
47
47
|
});
|
|
48
48
|
|
|
49
49
|
it('should set by default for child logger log level of its direct parent', function() {
|
|
@@ -54,7 +54,7 @@ describe('Logger', function() {
|
|
|
54
54
|
var childName = parentName + '.' + unique();
|
|
55
55
|
var child = new Logger(childName);
|
|
56
56
|
|
|
57
|
-
assert.
|
|
57
|
+
assert.strictEqual(child.getEffectiveLevel(), rufus.ERROR);
|
|
58
58
|
});
|
|
59
59
|
|
|
60
60
|
it('should make record', function() {
|
|
@@ -67,14 +67,14 @@ describe('Logger', function() {
|
|
|
67
67
|
var args = [ msg, err ];
|
|
68
68
|
var record = logger.makeRecord(name, 'DEBUG', msg, args.slice());
|
|
69
69
|
|
|
70
|
-
assert.
|
|
71
|
-
assert.
|
|
72
|
-
assert.
|
|
73
|
-
assert.
|
|
74
|
-
assert.
|
|
75
|
-
assert.
|
|
76
|
-
assert.
|
|
77
|
-
assert.
|
|
70
|
+
assert.strictEqual(record.name, name);
|
|
71
|
+
assert.strictEqual(record.level, level);
|
|
72
|
+
assert.strictEqual(record.message, msg);
|
|
73
|
+
assert.strictEqual(record.levelname, 'DEBUG');
|
|
74
|
+
assert.strictEqual(record.pid, process.pid);
|
|
75
|
+
assert.strictEqual(record.args.length, args.length - 1); //it is because last arg is Error
|
|
76
|
+
assert.strictEqual(record.args[0], msg);
|
|
77
|
+
assert.strictEqual(record.err, err);
|
|
78
78
|
});
|
|
79
79
|
|
|
80
80
|
/*it('should call its handlers', function() {
|
|
@@ -170,8 +170,8 @@ describe('Logger', function() {
|
|
|
170
170
|
logger.addHandler(h);
|
|
171
171
|
|
|
172
172
|
logger.info('bar').then(null, function(err) {
|
|
173
|
-
assert.
|
|
174
|
-
}).
|
|
173
|
+
assert.strictEqual(err.message, 'foo');
|
|
174
|
+
}).then(done);
|
|
175
175
|
});
|
|
176
176
|
});
|
|
177
177
|
|
|
@@ -182,7 +182,7 @@ module.exports = {
|
|
|
182
182
|
this.slow(300);
|
|
183
183
|
|
|
184
184
|
spawn(false, function(err, stdout, stderr) {
|
|
185
|
-
assert.
|
|
185
|
+
assert.strictEqual(stderr, 'root.ERROR - Uncaught exception handled');
|
|
186
186
|
done();
|
|
187
187
|
});
|
|
188
188
|
},
|
|
@@ -190,8 +190,8 @@ module.exports = {
|
|
|
190
190
|
this.slow(300);
|
|
191
191
|
|
|
192
192
|
spawn(true, function(err, stdout, stderr) {
|
|
193
|
-
assert.
|
|
194
|
-
assert.
|
|
193
|
+
assert.strictEqual(stderr, 'root.ERROR - Uncaught exception handled');
|
|
194
|
+
assert.strictEqual(stdout, 'root.INFO - noexit');
|
|
195
195
|
done();
|
|
196
196
|
});
|
|
197
197
|
}
|
package/test/util/error.js
CHANGED
|
@@ -9,9 +9,9 @@ rufus.addHandler(new rufus.handlers.Console({
|
|
|
9
9
|
}));
|
|
10
10
|
rufus.handleExceptions(process.argv.indexOf('--noexit') === -1);
|
|
11
11
|
|
|
12
|
-
setTimeout(function() {
|
|
12
|
+
/*setTimeout(function() {
|
|
13
13
|
throw new Error('catch me if you can');
|
|
14
|
-
}, 5)
|
|
14
|
+
}, 5);*/
|
|
15
15
|
|
|
16
16
|
setTimeout(function() {
|
|
17
17
|
rufus.info('noexit');
|