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.21.0 to 0.22.0

7

lib/body_parser_stream.js

@@ -29,4 +29,9 @@ var split = require('split');

function end() { req.body.push(null); }
req.pipe(split()).pipe(through(parseLine, end));
function trimNewline(line) {
return line.replace(/\r?\n/, '');
}
req.pipe(split(/\b\r?\n\b/, trimNewline, null)).pipe(through(parseLine, end));
return next();

@@ -33,0 +38,0 @@ }

69

lib/logger.js

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

logfmt = require('../logfmt');
var _ = require('lodash');

@@ -6,5 +6,7 @@ exports.log = function(data, stream) {

var line = '';
Object.keys(data).forEach(function(key){
var value = data[key];
var line = '';
var logData = _.extend({}, this.defaultData, data);
Object.keys(logData).forEach(function(key){
var value = logData[key];
var is_null = false;

@@ -17,3 +19,3 @@ if(value == null) {

var needs_quoting = value.indexOf(' ') > -1 || value.indexOf('=') > -1;
var needs_quoting = value.indexOf(' ') > -1 || value.indexOf('=') > -1;
var needs_escaping = value.indexOf('"') > -1;

@@ -40,8 +42,12 @@

if(!arg2){
label = 'elapsed';
callback = arg1;
if(typeof arg1 === 'function'){
label = 'elapsed';
callback = arg1;
}
}
else if(!arg3){
if(arg1.substring){
//using method detection
if(typeof arg1 === 'string'){
label = arg1;
top_data = {};
}else{

@@ -54,28 +60,12 @@ label = 'elapsed';

var logger = {};
var self = this;
var logger = this.namespace(top_data);
var orig_log = logger.log;
logger.log = function(data, stream){
var now = (new Date()).getTime()
if(!data) data = {};
for (key in top_data) {
data[key] = top_data[key];
}
data = data || {};
data[label] = (now - startTime).toString() + 'ms' ;
var stream = stream || self.stream
self.log(data, stream);
orig_log.call(this, data, stream)
}
logger.error = function(err, stream){
var now = (new Date()).getTime()
var id = Math.random().toString().slice(2, 12);
data = { error:true, id:id };
for (key in top_data) {
data[key] = top_data[key];
}
data[label] = (now - startTime).toString() + 'ms';
var stream = stream || self.stream;
self.log(data, stream);
self.error(err, id);
}
if (typeof callback === 'function') {

@@ -88,19 +78,6 @@ callback(logger);

exports.namespace = function(object){
var new_logfmt = new logfmt;
var old_log = this.log;
var old_stream = this.stream;
new_logfmt.log = function(data, stream){
if(stream == undefined) stream = old_stream;
data = data || {};
logdata = {};
for (key in object) {
logdata[key] = object[key];
}
for (key in data) {
logdata[key] = data[key];
}
old_log(logdata, stream);
}
return new_logfmt;
exports.namespace = function(object) {
var logfmt = require('../logfmt');
var namespace = _.extend({}, this.defaultData, object);
return new logfmt(this.stream, namespace);
}

@@ -107,0 +84,0 @@

@@ -8,3 +8,3 @@ var commonFormatter = function(req, res){

//in express it is an attribute
var path = req.path || req.url;
var path = req.originalUrl || req.path || req.url;
}

@@ -11,0 +11,0 @@

@@ -1,40 +0,39 @@

var logfmt = function(stream){
var parse = require('./lib/logfmt_parser').parse;
var _ = require('lodash');
var bodyParser = require('./lib/body_parser');
var bodyParserStream = require('./lib/body_parser_stream');
var logfmtParser = require('./lib/logfmt_parser');
var logger = require('./lib/logger');
var requestLogger = require('./lib/request_logger');
this.parse = parse;
function logfmt(stream, defaultData) {
this.defaultData = defaultData || {};
this.maxErrorLines = 10;
this.stream = stream || process.stdout;
}
var logger = require('./lib/logger');
this.log = logger.log;
this.time = logger.time;
this.namespace = logger.namespace;
this.error = logger.error;
_.extend(logfmt.prototype, logger);
this.maxErrorLines = 10;
logfmt.prototype.parse = logfmtParser.parse;
//Syncronous Body Parser
var bodyParser = require('./lib/body_parser')
this.bodyParser = function(options) {
if(options == null) options = {};
var mime = options.contentType || "application/logplex-1"
return bodyParser({contentType: mime, parser: parse})
}
// Synchronous body parser
logfmt.prototype.bodyParser = function(options) {
options || (options = {});
var mime = options.contentType || "application/logplex-1";
return bodyParser({ contentType: mime, parser: this.parse });
};
//Stream Body Parser
var bodyParserStream = require('./lib/body_parser_stream');
this.bodyParserStream = function(options) {
if(options == null) options = {};
var mime = options.contentType || "application/logplex-1"
return bodyParserStream({contentType: mime, parser: parse})
}
// Stream parser
logfmt.prototype.bodyParserStream = function(options) {
options || (options = {});
var mime = options.contentType || "application/logplex-1";
return bodyParserStream({ contentType: mime, parser: this.parse });
};
//Request Logger
var requestLogger = require('./lib/request_logger');
this.requestLogger = function(options, formatter){
return requestLogger.init(this, options, formatter);
}
this.requestLogger.commonFormatter = requestLogger.commonFormatter
}
logfmt.prototype.requestLogger = function(options, formatter) {
return requestLogger.init(this, options, formatter);
};
exports = module.exports = logfmt;
logfmt.call(exports)
logfmt.prototype.requestLogger.commonFormatter = requestLogger.commonFormatter;
_.extend(logfmt, logfmt.prototype);
module.exports = logfmt;
{
"name": "logfmt",
"version": "0.21.0",
"version": "0.22.0",
"description": "key=value logger and parser",

@@ -14,3 +14,4 @@ "main": "logfmt.js",

"split": "0.2.x",
"through": "2.3.x"
"through": "2.3.x",
"lodash": "~2.4.1"
},

@@ -17,0 +18,0 @@ "devDependencies": {

@@ -83,6 +83,4 @@ # node-logfmt

### `logfmt.time([label], [data], [callback(logger)])`
### `logfmt.time([label], [data], [callback(logfmt)])`
#### `logger.log([data], [stream])`
Log how long something takes.

@@ -92,4 +90,11 @@

- `data`: optional extra data to include with every call to `logger.log`
- `logger`: object passed to callback with a `log` function
- `callback(logfmt)`: new logfmt object passed to callback
If you don't pass in callback you get the logger returned.
```javascript
var logfmt2 = logfmt.time();
logfmt2.log();
//=> elapsed=1ms
```
No args defaults to `elapsed=<milliseconds>ms`

@@ -104,9 +109,2 @@

If you don't pass in callback you get the logger returned.
```javascript
var logger = logfmt.time();
logger.log();
//=> elapsed=1ms
```
String `label` changes the key to `<string>=<milliseconds>ms`

@@ -186,3 +184,3 @@

```javascript
var logfmt = require('logfmmt');
var logfmt = require('logfmt');
logfmt.error(new Error('test error'));

@@ -189,0 +187,0 @@ //=> at=error id=12345 message="test error"

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

var mockReq = new stream.Readable;
var data;
mockReq.header = function(){

@@ -60,6 +62,12 @@ return 'application/logplex-1';

mockReq.body.on('readable', function(){
var data = mockReq.body.read();
assert.deepEqual(data, {hello: 'kitty'})
var chunk = mockReq.body.read();
if (chunk !== null) {
data = chunk;
}
})
mockReq.body.on('end', function() {
assert.deepEqual(data, { hello: 'kitty' });
done();
})
});
})

@@ -70,2 +78,3 @@

var mockReq = new stream.Readable;
var data;
mockReq.header = function(){

@@ -83,6 +92,12 @@ return 'foo';

mockReq.body.on('readable', function(){
var data = mockReq.body.read();
assert.deepEqual(data, {hello: 'kitty'})
var chunk = mockReq.body.read();
if (chunk !== null) {
data = chunk;
}
})
mockReq.body.on('end', function() {
assert.deepEqual(data, { hello: 'kitty' })
done();
})
});
})

@@ -89,0 +104,0 @@

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

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

@@ -29,2 +29,9 @@

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

@@ -46,3 +53,3 @@ logfmt.time('time', {foo: 'bar'}, function(logger){

var actual = logfmt.stream.logline;
assert(/^moar=data foo=bar elapsed=\d+ms\n$/.test(actual), actual)
assert(/^foo=bar moar=data elapsed=\d+ms\n$/.test(actual), actual)
done();

@@ -99,3 +106,3 @@ })

test("returns a logger", function(){
test("returns a logfmt", function(){
var logger1, logger2;

@@ -108,2 +115,11 @@ logger1 = logfmt.time(function(logger){

test('logger is a proper logfmt object', function(){
var logger1 = logfmt.time({foo: 'bar'});
var logfmt2 = new logfmt();
for(var prop in logfmt2){
assert(logger1[prop]);
}
})
// tests you can pass the logger into a closure

@@ -110,0 +126,0 @@ // and call `log` multiple times.

@@ -39,3 +39,3 @@ var logfmt = require('../logfmt'),

var logfmt2 = logfmt.namespace({ns: 'logfmt'})
.namespace({thing: 'data'})
.namespace({thing: 'data'});

@@ -42,0 +42,0 @@ logfmt2.time(function(logger){

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

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

@@ -40,3 +40,3 @@

var actual = logfmt2.stream.logline;
assert(/^ns=logfmt moar=data foo=bar elapsed=\dms\n$/.test(actual),
assert(/^ns=logfmt foo=bar moar=data elapsed=\dms\n$/.test(actual),
actual)

@@ -43,0 +43,0 @@ done();

@@ -26,3 +26,3 @@ var logfmt = require('../logfmt'),

test('constructor accepts a stream', function(){
stream = new OutStream;
var stream = new OutStream;
var logfmt2 = new logfmt(stream);

@@ -29,0 +29,0 @@ var data = {foo: 'bar', a: 14}

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

test("commonFormatter uses correct path with express", function(){
var mockReq = {method: 'GET'}
mockReq.originalUrl = '/bar'
mockReq.ip = '1.0.0.1'
mockReq.header = function(h){ return 'foo' }
var mockRes = {statusCode: 200}
mockRes.get = function(){ return 'foo' }
var actual = logfmt.requestLogger.commonFormatter(mockReq, mockRes);
assert.equal('/bar', actual.path);
})
test("commonFormatter uses correct path", function(){

@@ -154,0 +165,0 @@ var mockReq = {method: 'GET'}

Sorry, the diff of this file is not supported yet

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