Skip to content

Commit

Permalink
prepared for 0.1.3
Browse files Browse the repository at this point in the history
*modified to skip formatting a static path
*replaced moment().valueOf() with new Date()
added test cases to verify those changes
updated README.md, package.json

*Thanks Ryan(https://github.com/rmg) for pushing the high performance
codes!!
  • Loading branch information
wood committed Jun 17, 2014
1 parent 0955186 commit be440e6
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 21 deletions.
16 changes: 9 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,9 @@
//for the details and rules of tokens, you can take a look
//http://momentjs.com/docs/#/displaying/format/
//any chars inside [] will be escaped
//if you do not need the rotation, you can specify "path" without any tokens, like "[./log]"
//if you do not need the rotation,
//you can enclose the path with [] to be a static path, like "[./log]"
//be aware of using [], static path is 400% faster than dynamic path.
"isUTC": true //optional. determinie the tokens, "YYMMDDHHmm", is in utc or local time
}, {
"level": "info",
Expand Down Expand Up @@ -88,12 +90,12 @@
* Node.js 0.10.29

#####Testing result
`run.sh 100000`|ln|bunyan (0.23.1)|log4js (0.6.14)|winston (0.7.3)
--:|:--:|:--:|:--:|:--:
real|**3.56s**|10.66s|11.76s|436.04s
user|**3.47s**|10.29s|11.39s|407.30s
sys|**0.13s**|2.09s|2.10s|22.76s
maximum resident set size|**77.6M**|79.1M|85.2M|433.6M
`run.sh 100000`|ln(0.1.3)|ln (0.1.2)|bunyan (0.23.1)|log4js (0.6.14)|winston (0.7.3)
--:|:--:|:--:|:--:|:--:|:--:
real|**0.90s**|**3.56s**|10.66s|11.76s|436.04s
user|**0.82s**|**3.47s**|10.29s|11.39s|407.30s
sys|**0.10s**|**0.13s**|2.09s|2.10s|22.76s
maximum resident set size|**79.2M**|**77.6M**|79.1M|85.2M|433.6M

####4. How can I verify your test?

Expand Down
14 changes: 9 additions & 5 deletions lib/ln.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,13 +68,17 @@ function ln(name, appenders) {
case "file":
appender.queue = {};
appender.isFlushed = true;
var fixedPath = /^\[[^\]]+\]$/.test(appender.path) ? appender.path.slice(1, -1) : false;
appender.isStaticPath = appender.path.replace(/\[.*?\]/g, "").length === 0;
if (appender.isStaticPath) {
appender.path = appender.path.slice(1, -1);
}
var log = function(appender, timestamp, string) {
var queue = appender.queue;

if (arguments.length > 1) {
var path = fixedPath ||
(appender.isUTC ? moment(timestamp).utc() : moment(timestamp)).format(appender.path);
var path = appender.path;
if (!appender.isStaticPath) {
path = (appender.isUTC ? moment(timestamp).utc() : moment(timestamp)).format(appender.path);
}
queue[path] = queue[path] || [];
var array = queue[path];
if (array.length === 0 || array[array.length - 1].length + string.length > PIPE_BUFF) {
Expand Down Expand Up @@ -150,7 +154,7 @@ function log(level) {
return;
}

var timestamp = new Date();
var timestamp = Date.now();
this.fields.t = timestamp; //timestamp
this.fields.l = level; //level

Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ln",
"version": "0.1.2",
"version": "0.1.3",
"description": "The SUPER BEST JSON logging library for Node.js",
"main": "./lib/ln.js",
"directories": {
Expand Down
47 changes: 39 additions & 8 deletions test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ var ln = require("../lib/ln.js");
var util = require("util");
var os = require("os");
var events = require("events");
var fs = require("fs");
var moment = require("moment");
var VERSION = 0;

describe("new ln", function() {
Expand Down Expand Up @@ -32,18 +34,24 @@ describe("new ln", function() {
new ln("empty", undefined);
new ln("empty", "");
new ln("empty", [{ "level": "info", "formatter": [], "emitter": [] }]);
new ln("a", [{ "type": "file", "level": "info" }]);
});
});

it("with valid params", function() {
var a = null;

assert.doesNotThrow(function() {
a = new ln("a", [{ "type": "file", "level": "info" }]);
var path = "[./ln.log]";
a = new ln("a", [{ "type": "file", "level": "info", "path": path }]);
assert.ok(a.appenders[0].hasOwnProperty("emitter"));
assert.ok(a.appenders[0].hasOwnProperty("queue"));
assert.ok(a.appenders[0].hasOwnProperty("isFlushed"));
assert.ok(a.appenders[0].hasOwnProperty("formatter"));
assert.ok(a.appenders[0].hasOwnProperty("isStaticPath"));
assert.ok(a.appenders[0].isStaticPath);
assert.ok(a.appenders[0].isFlushed);
assert.strictEqual(a.appenders[0].path, path.slice(1, -1));

a = new ln("a", [{ "type": "console", "level": "info" }]);
assert.ok(a.appenders[0].hasOwnProperty("emitter"));
Expand Down Expand Up @@ -76,7 +84,7 @@ describe("log", function () {
assert.strictEqual(data.l, log.appenders[0].level);
assert.strictEqual(data.p, process.pid);
assert.strictEqual(data.v, VERSION);
assert.strictEqual(data.t, timestamp.toJSON());
assert.strictEqual(data.t, timestamp);
assert.strictEqual(data.m, message1);
done();
});
Expand All @@ -92,7 +100,7 @@ describe("log", function () {
assert.strictEqual(data.l, log.appenders[0].level);
assert.strictEqual(data.p, process.pid);
assert.strictEqual(data.v, VERSION);
assert.strictEqual(data.t, timestamp.toJSON());
assert.strictEqual(data.t, timestamp);
assert.strictEqual(data.m, error1.stack);
done();
});
Expand All @@ -108,7 +116,7 @@ describe("log", function () {
assert.strictEqual(data.l, log.appenders[0].level);
assert.strictEqual(data.p, process.pid);
assert.strictEqual(data.v, VERSION);
assert.strictEqual(data.t, timestamp.toJSON());
assert.strictEqual(data.t, timestamp);
assert.strictEqual(data.m, message1);
assert.strictEqual(JSON.stringify(data.j), JSON.stringify(json1));
done();
Expand All @@ -125,7 +133,7 @@ describe("log", function () {
assert.strictEqual(data.l, log.appenders[0].level);
assert.strictEqual(data.p, process.pid);
assert.strictEqual(data.v, VERSION);
assert.strictEqual(data.t, timestamp.toJSON());
assert.strictEqual(data.t, timestamp);
assert.strictEqual(data.m, message2);
assert.strictEqual(JSON.stringify(data.j), JSON.stringify(json2));
done();
Expand All @@ -142,7 +150,7 @@ describe("log", function () {
assert.strictEqual(data.l, log.appenders[0].level);
assert.strictEqual(data.p, process.pid);
assert.strictEqual(data.v, VERSION);
assert.strictEqual(data.t, timestamp.toJSON());
assert.strictEqual(data.t, timestamp);
assert.strictEqual(data.m, message2);
assert.strictEqual(JSON.stringify(data.j), JSON.stringify(json2));
done();
Expand All @@ -159,7 +167,7 @@ describe("log", function () {
assert.strictEqual(data.l, log.appenders[0].level);
assert.strictEqual(data.p, process.pid);
assert.strictEqual(data.v, VERSION);
assert.strictEqual(data.t, timestamp.toJSON());
assert.strictEqual(data.t, timestamp);
assert.strictEqual(data.m, message1);
assert.ok(!data.hasOwnProperty("j"));
done();
Expand All @@ -176,7 +184,7 @@ describe("log", function () {
assert.strictEqual(data.l, log.appenders[0].level);
assert.strictEqual(data.p, process.pid);
assert.strictEqual(data.v, VERSION);
assert.strictEqual(data.t, timestamp.toJSON());
assert.strictEqual(data.t, timestamp);
assert.ok(!data.hasOwnProperty("m"));
assert.strictEqual(JSON.stringify(data.j), JSON.stringify(json1));
done();
Expand All @@ -197,6 +205,29 @@ describe("log", function () {
});
});

describe("file type appender", function () {
var path = "", log = null;
it("with a fixed path", function () {
path = "[./ln.log]";
log = new ln("ln", [ { "type": "file", "level": "info", "path": path } ]);
log.info("ln");
path = path.slice(1, -1);
assert.ok(fs.existsSync(path));
});

it("with a date path", function (done) {
path = "[./ln.log.]YYYYMMDDHHmmss";
log = new ln("ln", [ { "type": "file", "level": "info", "path": path } ]);
log.info("ln");
assert.ok(fs.existsSync(moment().format(path)));
setTimeout(function () {
log.info("ln");
assert.ok(fs.existsSync(moment().format(path)));
done();
}, 3);
});
});

describe("verify", function () {
var count = 0;
var add = function () {
Expand Down

0 comments on commit be440e6

Please sign in to comment.