Socket
Socket
Sign inDemoInstall

logfmt

Package Overview
Dependencies
Maintainers
1
Versions
41
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

logfmt - npm Package Compare versions

Comparing version 0.23.0 to 1.0.0-pre

test/singleton_test.js

56

lib/logger.js

@@ -9,2 +9,7 @@ var _ = require('lodash');

if(this.timerNow){
var now = (new Date()).getTime()
logData[this.timerKey] = (now - this.timerNow).toString() + 'ms' ;
}
Object.keys(logData).forEach(function(key){

@@ -33,42 +38,9 @@ var value = logData[key];

exports.time = function(arg1, arg2, arg3) {
exports.time = function(label) {
var logfmt = require('../logfmt');
var startTime = (new Date()).getTime();
var label = arg1;
var top_data = arg2 || {};
var callback = arg3;
if(!arg2){
if(typeof arg1 === 'function'){
label = 'elapsed';
callback = arg1;
}
}
else if(!arg3){
//using method detection
if(typeof arg1 === 'string'){
label = arg1;
top_data = {};
}else{
label = 'elapsed';
top_data = arg1;
}
callback = arg2;
}
var logger = this.namespace(top_data);
var orig_log = logger.log;
logger.log = function(data, stream){
var now = (new Date()).getTime()
data = data || {};
data[label] = (now - startTime).toString() + 'ms' ;
orig_log.call(this, data, stream)
}
if (typeof callback === 'function') {
callback(logger);
}
return logger;
var label = label || 'elapsed';
var timer = new logfmt(this.stream, this.defaultData,
{key: label, now: startTime});
return timer;
}

@@ -78,4 +50,6 @@

var logfmt = require('../logfmt');
var namespace = _.extend({}, this.defaultData, object);
return new logfmt(this.stream, namespace);
var namespace = _.extend({}, this.defaultData, object);
var namespaced = new logfmt(this.stream, namespace,
{key: this.timerKey, now: this.timerNow});
return namespaced;
}

@@ -82,0 +56,0 @@

@@ -47,12 +47,11 @@ var commonFormatter = function(req, res){

var elapsed = options.elapsed || 'elapsed';
logger.time(elapsed, function(logger) {
var end = res.end;
res.end = function(chunk, encoding) {
var data = formatter(req, res);
res.end = end;
res.end(chunk, encoding);
logger.log(data);
};
next();
})
var timer = logger.time(elapsed);
var end = res.end;
res.end = function(chunk, encoding) {
var data = formatter(req, res);
res.end = end;
res.end(chunk, encoding);
timer.log(data);
};
next();
}

@@ -59,0 +58,0 @@ }

@@ -8,6 +8,10 @@ var _ = require('lodash');

function logfmt(stream, defaultData) {
function logfmt(stream, defaultData, timer) {
this.stream = stream || process.stdout;
this.defaultData = defaultData || {};
if(timer){
this.timerKey = timer.key;
this.timerNow = timer.now;
}
this.maxErrorLines = 10;
this.stream = stream || process.stdout;
}

@@ -14,0 +18,0 @@

{
"name": "logfmt",
"version": "0.23.0",
"version": "1.0.0-pre",
"description": "key=value logger and parser",

@@ -5,0 +5,0 @@ "main": "logfmt.js",

@@ -94,78 +94,35 @@ # node-logfmt

### `logfmt.time([label], [data], [callback(logfmt)])`
### `logfmt.time([label])`
Log how long something takes.
Returns a new `logfmt` with elapsed milliseconds included in every `log` call.
- `label`: optional name for the milliseconds key (defaults to `elapsed`)
- `data`: optional extra data to include with every call to `logger.log`
- `callback(logfmt)`: new logfmt object passed to callback
- `label`: optional name for the milliseconds key. defaults to: `elapsed=<milliseconds>ms`
If you don't pass in callback you get the logger returned.
```javascript
var logfmt2 = logfmt.time();
logfmt2.log();
var timer = logfmt.time();
timer.log();
//=> elapsed=1ms
```
No args defaults to `elapsed=<milliseconds>ms`
```javascript
logfmt.time(function(logger){
logger.log();
})
//=> elapsed=1ms
```
String `label` changes the key to `<string>=<milliseconds>ms`
```javascript
logfmt.time('time', function(logger){
logger.log();
logger.log();
})
var timer = logfmt.time('time');
timer.log();
//=> time=1ms
timer.log();
//=> time=2ms
```
Data can be passed to `logger.log`
If you'd like to include data, just chain a call to namespace.
```javascript
logfmt.time(function(logger){
logger.log({foo: 'bar'});
})
//=> foo=bar elapsed=1ms
var timer = logfmt.time('time').namespace({foo: 'bar'});
timer.log();
//=> time=1ms foo=bar
timer.log();
//=> time=2ms foo=bar
```
Data can also be passed to `logfmt.time` and will persist
across calls to `logger.log`
```javascript
logfmt.time('thing', {foo: 'bar'}, function(logger){
logger.log({at: 'function.start'});
logger.log({at: 'function.end'});
})
//=> at=function.start foo=bar thing=1ms
//=> at=function.end foo=bar thing=2ms
```
You do not need a `label` to pass data to `logfmt.time`
```javascript
logfmt.time({foo: 'bar'}, function(logger){
logger.log({at: 'function'});
})
//=> at=function foo=bar elapsed=1ms
```
`time` works with `namespace` as expected
```javascript
var logfmt = require('logfmt').namespace({app: 'logfmt'})
logfmt.time({foo: 'bar'}, function(logger){
logger.log({at: 'function'});
})
//=> app=logfmt at=function foo=bar elapsed=1ms
```
### customizing logging location

@@ -172,0 +129,0 @@

@@ -5,2 +5,5 @@ var logfmt = require('../logfmt'),

//avoid test bleeding
var logfmt = new logfmt;
suite('logfmt.bodyParserStream', function() {

@@ -7,0 +10,0 @@

var logfmt = require('../logfmt'),
assert = require('assert');
var logfmt = new logfmt;
var OutStream = require('./outstream');

@@ -5,0 +6,0 @@

var logfmt = require('../logfmt'),
assert = require('assert');
var logfmt = new logfmt();
var OutStream = require('./outstream');

@@ -11,22 +12,11 @@

test("logs the time", function(done){
logfmt.time(function(logger){
logger.log();
var actual = logfmt.stream.logline;
assert(/^elapsed=\dms\n$/.test(actual), actual)
done();
})
test("logs the time as elapsed", function(){
var logger = logfmt.time();
logger.log();
var actual = logfmt.stream.logline;
assert(/^elapsed=\dms\n$/.test(actual), actual)
})
test("logs the time with your label", function(done){
logfmt.time('time', function(logger){
logger.log();
var actual = logfmt.stream.logline;
assert(/^time=\dms\n$/.test(actual), actual)
done();
})
})
test("logs the time with your label if no callback is provided", function(){
var logger = logfmt.time('time')
test("logs the time with your label", function(){
var logger = logfmt.time('time');
logger.log();

@@ -37,21 +27,14 @@ var actual = logfmt.stream.logline;

test("logs the time with your label and persistent data", function(done){
logfmt.time('time', {foo: 'bar'}, function(logger){
logger.log();
var actual = logfmt.stream.logline;
assert(/^foo=bar time=\dms\n$/.test(actual), actual)
done();
})
test("logs the time with your data", function(){
var logger = logfmt.time('time1').namespace({foo: 'bar'});
logger.log({foo: 'bar'});
var actual = logfmt.stream.logline;
assert(/^foo=bar time1=\d+ms\n$/.test(actual), actual)
})
test("logs the time with persistent data", function(done){
logfmt.time({foo: 'bar'}, function(logger){
logger.log();
var actual = logfmt.stream.logline;
assert(/^foo=bar elapsed=\d+ms\n$/.test(actual), actual)
logger.log({moar: 'data'});
var actual = logfmt.stream.logline;
assert(/^foo=bar moar=data elapsed=\d+ms\n$/.test(actual), actual)
done();
})
test("logs the time with your label and your data", function(){
var logger = logfmt.time('time').namespace({foo: 'bar'})
logger.log();
var actual = logfmt.stream.logline;
assert(/^foo=bar time=\dms\n$/.test(actual), actual)
})

@@ -62,59 +45,24 @@

test("accurancy in milliseconds", function(done){
logfmt.time(function(logger){
var wrapped = function() {
logger.log();
var actual = logfmt.stream.logline;
assert(/^elapsed=2\dms\n$/.test(actual), actual)
done();
}
setTimeout(wrapped, 20);
})
})
test("logs the time with your label and data", function(done){
logfmt.time('time', function(logger){
logger.log({foo: 'bar'});
var logger = logfmt.time();
var wrapped = function() {
logger.log();
var actual = logfmt.stream.logline;
assert(/^foo=bar time=\d+ms\n$/.test(actual), actual)
assert(/^elapsed=2\dms\n$/.test(actual), actual)
done();
})
}
setTimeout(wrapped, 20);
})
test("supports log(data, stream) interface", function(done){
test("supports log(data, stream) interface", function(){
var mock_sink = new OutStream;
logfmt.time(function(logger){
logger.log({foo: 'bar'}, mock_sink);
var actual = mock_sink.logline;
assert(/^foo=bar elapsed=\d+ms\n$/.test(actual), actual)
done();
})
var logger = logfmt.time()
logger.log({foo: 'bar'}, mock_sink);
var actual = mock_sink.logline;
assert(/^foo=bar elapsed=\d+ms\n$/.test(actual), actual)
})
test("calls the callback if provided", function(){
var test;
logfmt.time(function(logger){
test = true;
});
assert(test);
})
test('returns a logfmt', function(){
var logger1 = logfmt.time();
test("does not call the callback if not provided", function(){
assert.doesNotThrow(function(){
logfmt.time();
});
})
test("returns a logfmt", function(){
var logger1, logger2;
logger1 = logfmt.time(function(logger){
logger2 = logger;
});
assert.equal(logger1, logger2);
})
test('logger is a proper logfmt object', function(){
var logger1 = logfmt.time({foo: 'bar'});
var logfmt2 = new logfmt();
for(var prop in logfmt2){
for(var prop in logfmt){
assert(logger1[prop]);

@@ -129,15 +77,14 @@ }

var mock_sink = new OutStream;
logfmt.time(function(logger){
logger.log({foo: 'bar'}, mock_sink);
var logger = logfmt.time()
logger.log({foo: 'bar'}, mock_sink);
var actual = mock_sink.logline;
assert(/^foo=bar elapsed=\d+ms\n$/.test(actual), actual)
var wrapped = function() {
logger.log({bar: 'foo'}, mock_sink);
var actual = mock_sink.logline;
assert(/^foo=bar elapsed=\d+ms\n$/.test(actual), actual)
var wrapped = function() {
logger.log({bar: 'foo'}, mock_sink);
var actual = mock_sink.logline;
assert(/^bar=foo elapsed=2\d+ms\n$/.test(actual), actual)
done();
}
setTimeout(wrapped, 20);
})
assert(/^bar=foo elapsed=2\d+ms\n$/.test(actual), actual)
done();
}
setTimeout(wrapped, 20);
})
})

@@ -7,10 +7,9 @@ var logfmt = require('../logfmt'),

suite('logfmt.namespace', function() {
test("returns a new logfmt object", function(){
var logfmt2 = logfmt.namespace();
var mock_sink = new OutStream;
var data = {foo: 'bar', a: 14}
logfmt2.log(data, mock_sink);
assert.equal("foo=bar a=14\n", mock_sink.logline)
var recovered = logfmt2.parse(mock_sink.logline)
assert.deepEqual(data, recovered);
test('returns a logfmt', function(){
var logger1 = logfmt.namespace();
var logfmt2 = new logfmt();
for(var prop in logfmt2){
assert(logger1[prop]);
}
})

@@ -38,27 +37,12 @@

test("can chain namespace calls", function(done){
test("can chain namespace calls", function(){
var logfmt2 = logfmt.namespace({ns: 'logfmt'})
.namespace({thing: 'data'});
logfmt2.time(function(logger){
var mock_sink = new OutStream;
logger.log({}, mock_sink);
var actual = mock_sink.logline;
assert(/^ns=logfmt thing=data elapsed=\dms\n$/.test(actual), actual)
done();
})
})
test("works when a stream is not passed in", function(){
var logfmt2 = logfmt.namespace();
var logger = logfmt2.time();
var mock_sink = new OutStream;
var data = '';
try {
logfmt2.log({"foo":"bar"});
data = 'success';
} catch (err) {
data = 'failure';
}
assert.equal('success', data);
logger.log({}, mock_sink);
var actual = mock_sink.logline;
assert(/^ns=logfmt thing=data elapsed=\dms\n$/.test(actual), actual)
})
})

@@ -1,2 +0,2 @@

var logfmt = new require('../logfmt'),
var logfmt = require('../logfmt'),
assert = require('assert');

@@ -7,40 +7,33 @@

suite('logfmt.namespace.time', function() {
test("works with explicit logging location", function(done){
test("works with explicit logging location", function(){
var logfmt2 = logfmt.namespace({ns: 'logfmt'})
logfmt2.time(function(logger){
var mock_sink = new OutStream;
logger.log({}, mock_sink);
var actual = mock_sink.logline;
assert(/^ns=logfmt elapsed=\dms\n$/.test(actual), actual)
done();
})
var logger = logfmt2.time();
var mock_sink = new OutStream;
logger.log({}, mock_sink);
var actual = mock_sink.logline;
assert(/^ns=logfmt elapsed=\dms\n$/.test(actual), actual)
})
test("works with logfmt.time and implicit log location", function(done){
test("works with logfmt.time and implicit log location", function(){
var logfmt2 = logfmt.namespace({ns: 'logfmt'})
logfmt2.stream = new OutStream;
logfmt2.time('time', function(logger){
logger.log({foo: 'bar'});
var actual = logfmt2.stream.logline;
assert(/^ns=logfmt foo=bar time=\dms\n$/.test(actual), actual)
done();
})
var timer = logfmt2.time('time');
timer.log({foo: 'bar'});
var actual = logfmt2.stream.logline;
assert(/^ns=logfmt foo=bar time=\dms\n$/.test(actual), actual)
})
test("works with persistent data", function(done){
test("works with persistent data", function(){
var logfmt2 = logfmt.namespace({ns: 'logfmt'})
logfmt2.stream = new OutStream;
logfmt2.time({foo: 'bar'}, function(logger){
logger.log();
var actual = logfmt2.stream.logline;
assert(/^ns=logfmt foo=bar elapsed=\dms\n$/.test(actual), actual)
logger.log({moar: 'data'});
var actual = logfmt2.stream.logline;
assert(/^ns=logfmt foo=bar moar=data elapsed=\dms\n$/.test(actual),
actual)
done();
})
var logger = logfmt2.time().namespace({foo: 'bar'});
logger.log();
var actual = logfmt2.stream.logline;
assert(/^ns=logfmt foo=bar elapsed=\dms\n$/.test(actual), actual)
logger.log({moar: 'data'});
var actual = logfmt2.stream.logline;
assert(/^ns=logfmt foo=bar moar=data elapsed=\dms\n$/.test(actual),
actual)
})
})
var logfmt = require('../logfmt'),
assert = require('assert');
//avoid test bleeding
var logfmt = new logfmt;
var OutStream = require('./outstream');

@@ -17,2 +20,3 @@

assert.equal('', logfmt.stream.logline);
done();
};

@@ -31,3 +35,2 @@

assert(expectation.test(actual), actual);
done();
})

@@ -40,2 +43,3 @@

assert.equal('method=GET status=200\n', logfmt.stream.logline);
done()
};

@@ -50,3 +54,2 @@

logger(mockReq, mockRes, next)
done()
})

@@ -68,2 +71,3 @@

assert.equal('foo', actual.content_length);
done()
};

@@ -73,3 +77,2 @@

logger(mockReq, mockRes, next)
done()
})

@@ -83,2 +86,3 @@

assert.equal('', logfmt.stream.logline);
done()
};

@@ -97,3 +101,2 @@

assert(expectation.test(actual), actual);
done()
})

@@ -216,2 +219,3 @@

assert.equal('namespacetest', actual.ns);
done()
};

@@ -221,5 +225,3 @@

logger(mockReq, mockRes, next)
done()
})
})
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc