enrise-logger
Advanced tools
Comparing version 0.2.1 to 1.0.0
12
index.js
@@ -14,3 +14,6 @@ 'use strict'; | ||
this._settings = _.defaultsDeep(_.cloneDeep(settings), defaultSettings); | ||
const winstonSettings = _.get(settings, 'winston', {}); | ||
this._settings = _.defaultsDeep(_.cloneDeep(winstonSettings), defaultSettings.winston); | ||
this._namedSettings = _.mapKeys(_.omit(settings, 'winston'), (v, k) => {return k.toUpperCase();}); | ||
this._container = new winston.Container({ | ||
@@ -31,2 +34,7 @@ exitOnError: false | ||
// Check for a config specific for the logger we're about to create | ||
const namedSetting = _.get(this._namedSettings, label.toUpperCase()); | ||
// Named Config level comes before programmatic set level, as the config can be changed post-deploy | ||
const levelToUse = _.get(namedSetting, 'level', level); | ||
// Filter out falsey values | ||
@@ -39,3 +47,3 @@ const transportKeys = _.keys(_.pickBy(this._settings.transports, _.identity)); | ||
transportSettings.label = label; | ||
transportSettings.level = level || transportSettings.level; | ||
transportSettings.level = levelToUse || transportSettings.level; | ||
@@ -42,0 +50,0 @@ return new winston.transports[transport](transportSettings); |
{ | ||
"name": "enrise-logger", | ||
"description": "Logger used within Enrise projects and module's", | ||
"version": "0.2.1", | ||
"version": "1.0.0", | ||
"author": "Team MatchMinds @ Enrise", | ||
@@ -6,0 +6,0 @@ "main": "index.js", |
@@ -24,3 +24,4 @@ # Node.js logger module | ||
The `log` object contains functions for each [log-level](#levels): | ||
- `log.info('Some log message');` | ||
- `log.info('Some log message');` | ||
- `log.error(new Error('Some error'));` | ||
@@ -36,18 +37,20 @@ | ||
{ | ||
transports: { | ||
Console: { | ||
level: 'info', | ||
colorize: true | ||
winston: { | ||
transports: { | ||
Console: { | ||
level: 'info', | ||
colorize: true | ||
} | ||
}, | ||
levels: { | ||
error: 0, | ||
warn: 1, | ||
help: 2, | ||
data: 3, | ||
info: 4, | ||
trace: 5, | ||
debug: 6, | ||
prompt: 7, | ||
verbose: 8 | ||
} | ||
}, | ||
levels: { | ||
error: 0, | ||
warn: 1, | ||
help: 2, | ||
data: 3, | ||
info: 4, | ||
trace: 5, | ||
debug: 6, | ||
prompt: 7, | ||
verbose: 8 | ||
} | ||
@@ -57,4 +60,29 @@ } | ||
#### `transports: Object` | ||
#### `winston: Object` | ||
The top-level key `winston` in the config contains winston-specific configuration. | ||
#### `<namedloggerKey>: {level: String}` | ||
You can add other toplevel-keys to provide named-logger specific level-information. This functionality allows you to set the log-level through configuration. | ||
``` javascript | ||
{ | ||
winston: {...}, | ||
namedlogger1: { | ||
level: debug | ||
} | ||
} | ||
``` | ||
The above configuration would set the `level` of logging to `debug` for the logger which was created as follows: | ||
```javascript | ||
const log = require('enrise-logger').get('NamedLogger1'); | ||
``` | ||
Be aware that the way you'll read and apply your config dictates the actions you should take to change the actual log-level | ||
at run-time. If you only read and apply the config at the start of your program you'd have to restart your program to apply the changed log-level. | ||
#### `winston.transports: Object` | ||
The keys define the transports that the logger should use, the value is the configuration passed to the transport constructor. Multiple transports can be combined. Defaults to only the Console with the settings above. To exclude the Console transport, set it to `null`. Possible transports are: | ||
- `Console`: [winston.Console documentation](https://github.com/winstonjs/winston/blob/master/docs/transports.md#console-transport) | ||
@@ -65,3 +93,3 @@ - `File`: [winston.File documentation](https://github.com/winstonjs/winston/blob/master/docs/transports.md#file-transport) | ||
#### `levels` | ||
#### `winston.levels` | ||
The node-logger uses more detailed log-levels than winston does. The higher the priority the more important the message is considered to be, and the lower the corresponding integer priority. These levels can be modified to your liking. |
@@ -0,20 +1,24 @@ | ||
'use strict'; | ||
module.exports = { | ||
transports: { | ||
Console: { | ||
level: 'info', | ||
colorize: true | ||
winston: { | ||
transports: { | ||
Console: { | ||
level: 'info', | ||
colorize: true | ||
} | ||
}, | ||
longtrace: false, | ||
levels: { | ||
error: 0, | ||
warn: 1, | ||
help: 2, | ||
data: 3, | ||
info: 4, | ||
trace: 5, | ||
debug: 6, | ||
prompt: 7, | ||
verbose: 8 | ||
} | ||
}, | ||
longtrace: false, | ||
levels: { | ||
error: 0, | ||
warn: 1, | ||
help: 2, | ||
data: 3, | ||
info: 4, | ||
trace: 5, | ||
debug: 6, | ||
prompt: 7, | ||
verbose: 8 | ||
} | ||
}; | ||
}; |
@@ -6,2 +6,3 @@ 'use strict'; | ||
const proxyquire = require('proxyquire').noCallThru(); | ||
proxyquire.noPreserveCache(); | ||
const expect = chai.expect; | ||
@@ -41,7 +42,10 @@ chai.use(require('sinon-chai')); | ||
// Keep reference to main Logger constructor. | ||
const Logger = proxyquire('../index.js', { | ||
// Keep reference to main (Proxied) Logger constructor. | ||
const ProxiedLogger = proxyquire('../index.js', { | ||
winston: winston | ||
}); | ||
// When no need to verify stub-calls use the Logger | ||
const Logger = require('../index.js'); | ||
beforeEach(() => { | ||
@@ -72,3 +76,3 @@ winston.transports = { | ||
it('instantiates with `new` and overwrites the module', () => { | ||
const logger = new Logger(); | ||
const logger = new require('../index.js'); // eslint-disable-line new-cap | ||
expect(logger).to.equal(require('../index.js')); | ||
@@ -79,5 +83,7 @@ }); | ||
const logger = new Logger({ | ||
transports: { | ||
Console: { | ||
level: 'verbose' | ||
winston: { | ||
transports: { | ||
Console: { | ||
level: 'verbose' | ||
} | ||
} | ||
@@ -99,3 +105,3 @@ } | ||
it('creates the default transports defined by config.transports', () => { | ||
new Logger().get('TEST'); | ||
new ProxiedLogger().get('TEST'); | ||
expect(winston.transports.Console).to.have.been.calledWith({ | ||
@@ -109,3 +115,3 @@ level: 'info', | ||
it('correctly sets the log-levels', () => { | ||
new Logger().get('TEST'); | ||
new ProxiedLogger().get('TEST'); | ||
expect(winstonLogger.setLevels).to.have.been.calledWith(levels); | ||
@@ -115,7 +121,9 @@ }); | ||
it('allows modifying the transports configuration', () => { | ||
new Logger({ | ||
transports: { | ||
LogstashUDP: { | ||
bar: 'foo', | ||
level: 'verbose' | ||
new ProxiedLogger({ | ||
winston: { | ||
transports: { | ||
LogstashUDP: { | ||
bar: 'foo', | ||
level: 'verbose' | ||
} | ||
} | ||
@@ -137,8 +145,10 @@ } | ||
it('allows removal of default Console transport', () => { | ||
new Logger({ | ||
transports: { | ||
Console: null, | ||
LogstashUDP: { | ||
bar: 'foo', | ||
level: 'verbose' | ||
new ProxiedLogger({ | ||
winston: { | ||
transports: { | ||
Console: null, | ||
LogstashUDP: { | ||
bar: 'foo', | ||
level: 'verbose' | ||
} | ||
} | ||
@@ -176,3 +186,3 @@ } | ||
it('allows passing extra transport configuration to the .get() function', () => { | ||
new Logger().get('label', null, { | ||
new ProxiedLogger().get('label', null, { | ||
Console: { | ||
@@ -190,2 +200,43 @@ extra: 'settings' | ||
}); | ||
it('wont crash when colorize is set to true and level is trace', () => { | ||
const log = new Logger().get('test'); | ||
expect(log.trace('test')).to.not.throw; | ||
}); | ||
it('allows overriding of the level using configuration per named logger', () => { | ||
const config = { | ||
number1: { | ||
level: 'trace' | ||
}, | ||
winston: { | ||
transports: { | ||
LogstashUDP: { | ||
level: 'verbose' | ||
} | ||
} | ||
} | ||
}; | ||
new ProxiedLogger(config).get('Number1'); | ||
expect(winston.transports.Console).to.have.been.calledWith({ | ||
level: 'trace', | ||
colorize: true, | ||
label: 'Number1' | ||
}); | ||
expect(winston.transports.LogstashUDP).to.have.been.calledWith({ | ||
level: 'trace', | ||
label: 'Number1' | ||
}); | ||
new ProxiedLogger(config).get('Number2'); | ||
expect(winston.transports.Console).to.have.been.calledWith({ | ||
level: 'info', | ||
colorize: true, | ||
label: 'Number2' | ||
}); | ||
expect(winston.transports.LogstashUDP).to.have.been.calledWith({ | ||
level: 'verbose', | ||
label: 'Number2' | ||
}); | ||
}); | ||
}); |
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
14169
275
1
92
1