Comparing version 0.2.0 to 0.2.1
{ | ||
"name": "elecpen", | ||
"version": "0.2.0", | ||
"version": "0.2.1", | ||
"description": "a simple logger", | ||
@@ -24,2 +24,3 @@ "main": "index.js", | ||
"chalk": "^1.0.0", | ||
"debug": "^2.2.0", | ||
"moment": "^2.11.1" | ||
@@ -26,0 +27,0 @@ }, |
# ElecPen | ||
[![Build Status](https://travis-ci.org/leozdgao/elecpen.svg?branch=master)](https://travis-ci.org/leozdgao/elecpen) | ||
[![npm version](https://badge.fury.io/js/elecpen.svg)](https://badge.fury.io/js/elecpen) | ||
@@ -23,8 +24,8 @@ We take logger as a function to receive a record and output to a stream, and `elecPen` is a simple logger creator. | ||
|Option|Description| | ||
|------|-----------| | ||
|infoFile|File name for logging info and verbose| | ||
|errFile|File name for logging error and warning| | ||
|timestamp|Date format for logger or pass `true` to use the default format| | ||
|append|If file exists, append new entries to it instead of truncating| | ||
|Option|Type|Description| | ||
|------|----|-----------| | ||
|infoFile|string, function|File name for logging info and verbose| | ||
|errFile|string, function|File name for logging error and warning| | ||
|timestamp|string, boolean|Date format for logger or pass `true` to use the default format| | ||
|append|boolean|If file exists, append new entries to it instead of truncating| | ||
@@ -38,22 +39,60 @@ ### Methods | ||
### Example | ||
## Example | ||
```javascript | ||
var opts = { | ||
You can you a set of default logger: | ||
```js | ||
// use default logger | ||
const opts = { | ||
infoFile: 'info.log', // record info and verbose | ||
errFile: 'err.log', // record error and warning | ||
logToConsole: true, | ||
timestamp: true, // default to true | ||
timestamp: true, | ||
append: true // default to true | ||
}; | ||
var http = requrie('http'); | ||
var logger = require('logger').createLogger(opts); | ||
} | ||
const http = requrie('http') | ||
const logger = require('elecpen').defaultLogger(opts) | ||
http.createServer(function(req, res) { | ||
logger.info('Recieve a request. Path: %s', req.path); | ||
res.end('Hello world.'); | ||
http.createServer((req, res) => { | ||
logger.info('Recieve a request. Path: %s', req.path) | ||
res.end('Hello world.') | ||
}) | ||
.listen(4000, function() { | ||
logger.info('Server listening...'); | ||
}); | ||
.listen(4000, _ => { | ||
logger.info('Server listening...') | ||
}) | ||
``` | ||
Dynamic file name is supported, and it is useful to record log by separated file. | ||
```js | ||
const opts = { | ||
infoFile () { | ||
const now = new Date() | ||
return `log-${now.getFullYear()}-${now.getMonth() + 1}` | ||
}, | ||
errFile: 'err.log' | ||
} | ||
const logger = require('elecpen').defaultLogger(opts) | ||
logger.info('Hello World!') | ||
``` | ||
Or create you own logger: | ||
```js | ||
const fs = require('fs') | ||
const elecpen = require('elecpen') | ||
const recorder = elecpen.streamRecorder() | ||
const log = function (msg) { | ||
// dynamic stream | ||
const stream = recorder( | ||
_ => `log-${Date.now()}.log`, | ||
name => fs.createWriteStream(name, { flags: 'a' }) | ||
) | ||
stream && elecpen(stream, 'Message', timestamp)(msg) | ||
} | ||
log('Hello World!') | ||
``` | ||
## License | ||
MIT |
@@ -6,2 +6,8 @@ import fs from 'fs' | ||
const debug = require('debug')('elecpen') | ||
function isFunction (v) { | ||
return typeof v == 'function' | ||
} | ||
/** | ||
@@ -57,14 +63,21 @@ * Main method for create logger. The logger is just a function to recieve | ||
const infoRecorder = streamRecorder() | ||
const errRecorder = streamRecorder() | ||
return { | ||
verbose () { | ||
infoStream && createLogger(infoStream, 'Verbose', timestamp).apply(this, arguments) | ||
const stream = infoRecorder(infoFile, name => fs.createWriteStream(name, { flags: flag })) | ||
stream && createLogger(stream, 'Verbose', timestamp).apply(this, arguments) | ||
}, | ||
info () { | ||
infoStream && createLogger(infoStream, 'Info', timestamp).apply(this, arguments) | ||
const stream = infoRecorder(infoFile, name => fs.createWriteStream(name, { flags: flag })) | ||
stream && createLogger(stream, 'Info', timestamp).apply(this, arguments) | ||
}, | ||
warning () { | ||
errStream && createLogger(errStream, 'Warning', timestamp).apply(this, arguments) | ||
const stream = errRecorder(errFile, name => fs.createWriteStream(name, { flags: flag })) | ||
stream && createLogger(stream, 'Warning', timestamp).apply(this, arguments) | ||
}, | ||
error () { | ||
errStream && createLogger(errStream, 'Error', timestamp).apply(this, arguments) | ||
const stream = errRecorder(errFile, name => fs.createWriteStream(name, { flags: flag })) | ||
stream && createLogger(stream, 'Error', timestamp).apply(this, arguments) | ||
} | ||
@@ -74,4 +87,27 @@ } | ||
/** | ||
* Record the stream by key | ||
* @return {function} A function return stream | ||
*/ | ||
function streamRecorder () { | ||
let lastKey, lastStream | ||
return (key, createStream) => { | ||
if (isFunction(key)) key = key.call() | ||
debug(`Recorder get key: ${key}`) | ||
if (key !== lastKey) { | ||
debug(`Recorder will return a new stream`) | ||
lastKey = key | ||
lastStream = createStream.call(null, key) | ||
} | ||
return lastStream | ||
} | ||
} | ||
createLogger.defaultLogger = useDefaultLogger | ||
createLogger.streamRecorder = streamRecorder | ||
module.exports = createLogger |
@@ -40,10 +40,8 @@ var assert = require('assert') | ||
it('Should append to an existed file.', function(done) { | ||
var expect = /(?:^|\n*)\[Info\] (.*?) Hello world(?:\n+|$)/g | ||
logger2.info('Hello world') | ||
logger2.info('Hello world') | ||
fs.readFile(infoFile, { encoding: 'utf-8' }, function(err, result) { | ||
var m, count = 0 | ||
while((m = expect.exec(result)) != null) { | ||
count++ | ||
} | ||
assert.equal(count, 2) | ||
var lines = result.split('\n') | ||
assert.equal(lines.length, 3) | ||
done(err) | ||
@@ -50,0 +48,0 @@ }) |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
8944
136
97
0
3
+ Addeddebug@^2.2.0
+ Addeddebug@2.6.9(transitive)
+ Addedms@2.0.0(transitive)