loglevel-plugin-prefix
Advanced tools
Comparing version 0.6.0 to 0.7.0
@@ -1,1 +0,1 @@ | ||
!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof module&&module.exports?module.exports=t():e.prefix=t(e)}(this,function(e){"use strict";var t,r={template:"[%t] %l:",timestampFormatter:function(e){return e.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/,"$1")},levelFormatter:function(e){return e.toUpperCase()},nameFormatter:function(e){return e||"root"}},n={},o={apply:function(e,t){if(!e||!e.setLevel)throw new TypeError("Argument is not a logger");var o=!!e.getLogger,a=e.methodFactory,i=e.name||"",l=n[i]||n[""]||r;return n[i]||(e.methodFactory=function(e,t,r){var i=a(e,t,r),l=n[r||""],f=-1!==l.template.indexOf("%t"),p=-1!==l.template.indexOf("%l"),m=-1!==l.template.indexOf("%n");return function(){for(var t=l.template,a=arguments.length,u=Array(a),c=0;c<a;c++)u[c]=arguments[c];o&&n[r]||(f&&(t=t.replace(/%t/,l.timestampFormatter(new Date))),p&&(t=t.replace(/%l/,l.levelFormatter(e))),m&&(t=t.replace(/%n/,l.nameFormatter(r))),u.length&&"string"==typeof u[0]?u[0]=t+" "+u[0]:u.unshift(t)),i.apply(void 0,u)}}),n[i]=function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(t in arguments[r])Object.prototype.hasOwnProperty.call(arguments[r],t)&&(e[t]=arguments[r][t]);return e}({},l,t),e.setLevel(e.getLevel()),e}};return e&&(t=e.prefix,o.noConflict=function(){return e.prefix===o&&(e.prefix=t),o}),o}); | ||
!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof module&&module.exports?module.exports=t():e.prefix=t(e)}(this,function(e){"use strict";var t,r={template:"[%t] %l:",timestampFormatter:function(e){return e.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/,"$1")},levelFormatter:function(e){return e.toUpperCase()},nameFormatter:function(e){return e||"root"}},n={},o={apply:function(e,t){if(!e||!e.setLevel)throw new TypeError("Argument is not a logger");var o=!!e.getLogger,a=e.methodFactory,f=e.name||"",i=n[f]||n[""]||r;return n[f]||(e.methodFactory=function(e,t,r){var f=a(e,t,r),i=n[r||""],l=-1!==i.template.indexOf("%t"),m=-1!==i.template.indexOf("%l"),p=-1!==i.template.indexOf("%n");return function(){for(var t="",a=arguments.length,u=Array(a),c=0;c<a;c++)u[c]=arguments[c];o&&n[r]||(i.format?t+=i.format(e,r):(t+=i.template,l&&(t=t.replace(/%t/,i.timestampFormatter(new Date))),m&&(t=t.replace(/%l/,i.levelFormatter(e))),p&&(t=t.replace(/%n/,i.nameFormatter(r)))),u.length&&"string"==typeof u[0]?u[0]=t+" "+u[0]:u.unshift(t)),f.apply(void 0,u)}}),(t=t||{}).format="function"==typeof t.format?t.format:void 0,n[f]=function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(t in arguments[r])Object.prototype.hasOwnProperty.call(arguments[r],t)&&(e[t]=arguments[r][t]);return e}({},i,t),e.setLevel(e.getLevel()),e}};return e&&(t=e.prefix,o.noConflict=function(){return e.prefix===o&&(e.prefix=t),o}),o}); |
@@ -12,3 +12,3 @@ (function (root, factory) { | ||
var merge = function merge(target) { | ||
var merge = function (target) { | ||
var i = 1; | ||
@@ -40,5 +40,5 @@ var length = arguments.length; | ||
var loggers = {}; | ||
var configs = {}; | ||
var apply = function apply(logger, config) { | ||
var apply = function (logger, config) { | ||
if (!logger || !logger.setLevel) { | ||
@@ -52,3 +52,3 @@ throw new TypeError('Argument is not a logger'); | ||
var name = logger.name || ''; | ||
var parent = loggers[name] || loggers[''] || defaults; | ||
var parent = configs[name] || configs[''] || defaults; | ||
/* eslint-enable vars-on-top */ | ||
@@ -58,3 +58,3 @@ | ||
var originalMethod = originalFactory(methodName, logLevel, loggerName); | ||
var options = loggers[loggerName || '']; | ||
var options = configs[loggerName || '']; | ||
@@ -66,3 +66,3 @@ var hasTimestamp = options.template.indexOf('%t') !== -1; | ||
return function () { | ||
var content = options.template; | ||
var content = ''; | ||
@@ -76,10 +76,17 @@ var length = arguments.length; | ||
if (!(isRoot && loggers[loggerName])) { | ||
if (hasTimestamp) content = content.replace(/%t/, options.timestampFormatter(new Date())); | ||
if (hasLevel) content = content.replace(/%l/, options.levelFormatter(methodName)); | ||
if (hasName) content = content.replace(/%n/, options.nameFormatter(loggerName)); | ||
if (!(isRoot && configs[loggerName])) { | ||
if (options.format) { | ||
content += options.format(methodName, loggerName); | ||
} else { | ||
content += options.template; | ||
if (hasTimestamp) { | ||
content = content.replace(/%t/, options.timestampFormatter(new Date())); | ||
} | ||
if (hasLevel) content = content.replace(/%l/, options.levelFormatter(methodName)); | ||
if (hasName) content = content.replace(/%n/, options.nameFormatter(loggerName)); | ||
} | ||
if (args.length && typeof args[0] === 'string') { | ||
// concat prefix with first argument to support string substitutions | ||
args[0] = '' + content + ' ' + args[0]; | ||
args[0] = content + ' ' + args[0]; | ||
} else { | ||
@@ -94,7 +101,10 @@ args.unshift(content); | ||
if (!loggers[name]) { | ||
if (!configs[name]) { | ||
logger.methodFactory = methodFactory; | ||
} | ||
loggers[name] = merge({}, parent, config); | ||
config = config || {}; | ||
config.format = typeof config.format === 'function' ? config.format : undefined; | ||
configs[name] = merge({}, parent, config); | ||
logger.setLevel(logger.getLevel()); | ||
@@ -109,2 +119,3 @@ return logger; | ||
var save; | ||
if (root) { | ||
@@ -111,0 +122,0 @@ save = root.prefix; |
@@ -25,3 +25,3 @@ { | ||
"license": "MIT", | ||
"version": "0.6.0", | ||
"version": "0.7.0", | ||
"main": "./lib/loglevel-plugin-prefix", | ||
@@ -39,2 +39,3 @@ "scripts": { | ||
"eslint-plugin-chai-friendly": "^0.3.6", | ||
"eslint-plugin-import": "^2.8.0", | ||
"loglevel": "^1.6.0", | ||
@@ -41,0 +42,0 @@ "loglevel-plugin-mock": "^0.1.0", |
# loglevel-plugin-prefix | ||
Plugin for [loglevel](https://github.com/pimterry/loglevel) message prefixing | ||
Plugin for [loglevel](https://github.com/pimterry/loglevel) message prefixing. | ||
[![NPM version](https://img.shields.io/npm/v/loglevel-plugin-prefix.svg?style=flat-square)](https://www.npmjs.com/package/loglevel-plugin-prefix)[![Build Status](https://img.shields.io/travis/kutuluk/loglevel-plugin-prefix/master.svg?style=flat-square)](https://travis-ci.org/kutuluk/loglevel-plugin-prefix) | ||
## Installation | ||
```sh | ||
npm install loglevel-plugin-prefix --save | ||
npm i loglevel-plugin-prefix --save | ||
``` | ||
@@ -12,9 +15,9 @@ | ||
```javascript | ||
apply(log[, options]); | ||
``` | ||
**This plugin is under active development and should be considered as an unstable. No guarantees regarding API stability are made. Backward compatibility is guaranteed only by path releases.** | ||
#### ```apply(logger, options)``` | ||
This method applies the plugin to the logger. | ||
**log** - loglevel logger | ||
**logger** - loglevel logger | ||
@@ -48,8 +51,20 @@ **options** - configuration object | ||
## Base usage | ||
Alternatively, you can use **format** option. This is a function with two arguments (level and logger), which should return a prefix string. For example, | ||
```javascript | ||
function simpleFormat(level, logger) { | ||
return level + " (" + logger + "):"; | ||
} | ||
``` | ||
If the format function is present, the other options are ignored. | ||
## Usage | ||
### Browser directly | ||
```html | ||
<script src="https://unpkg.com/loglevel/dist/loglevel.min.js"></script> | ||
<script src="https://unpkg.com/loglevel-plugin-prefix/dist/loglevel-plugin-prefix.min.js"></script> | ||
<script src="https://unpkg.com/loglevel-plugin-prefix@^0.7/dist/loglevel-plugin-prefix.min.js"></script> | ||
@@ -56,0 +71,0 @@ <script> |
129
test/test.js
@@ -1,10 +0,31 @@ | ||
const expect = require("chai").expect; | ||
const loglevel = require("loglevel"); | ||
const other = require("loglevel-plugin-mock"); | ||
const sinon = require("sinon"); | ||
const prefix = require("../lib/loglevel-plugin-prefix"); | ||
const expect = require('chai').expect; | ||
const loglevel = require('loglevel'); | ||
const other = require('loglevel-plugin-mock'); | ||
const sinon = require('sinon'); | ||
const prefix = require('../lib/loglevel-plugin-prefix'); | ||
const spy = sinon.spy(); | ||
describe("", () => { | ||
loglevel.enableAll(); | ||
describe('API', () => { | ||
it('Methods', () => { | ||
expect(prefix).to.have.property('apply').with.be.a('function'); | ||
expect(prefix).not.to.have.property('noConflict'); | ||
}); | ||
it('Empty arguments', () => { | ||
expect(prefix.apply).to.throw(TypeError, 'Argument is not a logger'); | ||
}); | ||
it('Incorrect argument', () => { | ||
expect(() => prefix.apply('logger')).to.throw(TypeError, 'Argument is not a logger'); | ||
}); | ||
}); | ||
describe('Prefix', () => { | ||
other.apply(loglevel, { method: spy }); | ||
const child = loglevel.getLogger('child'); | ||
child.enableAll(); | ||
beforeEach(() => { | ||
@@ -14,71 +35,59 @@ spy.reset(); | ||
describe("API", () => { | ||
it("Methods", () => { | ||
expect(prefix).to.have.property("apply").with.be.a("function"); | ||
expect(prefix).not.to.have.property("noConflict"); | ||
}); | ||
it('Applying', () => { | ||
expect(() => prefix.apply(loglevel)).to.not.throw(); | ||
}); | ||
it("Empty arguments", () => { | ||
expect(prefix.apply).to.throw(TypeError, "Argument is not a logger"); | ||
}); | ||
it('Reapplying', () => { | ||
expect(() => prefix.apply(loglevel)).to.not.throw(); | ||
}); | ||
it("Incorrect argument", () => { | ||
expect(() => prefix.apply("logger")).to.throw(TypeError, "Argument is not a logger"); | ||
it('Format', () => { | ||
prefix.apply(loglevel, { | ||
format: (level, logger) => `${level} (${logger}):` | ||
}); | ||
it("Applying", () => { | ||
expect(() => prefix.apply(loglevel)).to.not.throw(); | ||
}); | ||
loglevel.info('test'); | ||
it("Reapplying", () => { | ||
expect(() => prefix.apply(loglevel)).to.not.throw(); | ||
}); | ||
expect(spy.calledWith('info (undefined): test')).to.be.true; | ||
}); | ||
describe("Prefix", () => { | ||
other.apply(loglevel, { method: spy }); | ||
const child = loglevel.getLogger("child"); | ||
child.enableAll(); | ||
it('All methods of the previous plugin should be called', () => { | ||
prefix.apply(loglevel); | ||
it("All methods of the previous plugin should be called", () => { | ||
prefix.apply(loglevel); | ||
loglevel.trace(); | ||
loglevel.debug(); | ||
loglevel.info(); | ||
loglevel.warn(); | ||
loglevel.error(); | ||
expect(spy.callCount).to.equal(5); | ||
}); | ||
loglevel.enableAll(); | ||
loglevel.trace(); | ||
loglevel.debug(); | ||
loglevel.info(); | ||
loglevel.warn(); | ||
loglevel.error(); | ||
expect(spy.callCount).to.equal(5); | ||
}); | ||
it('Child logger', () => { | ||
prefix.apply(child, { template: '%l (%n):' }); | ||
child.info('test'); | ||
expect(spy.calledWith('INFO (child): test')).to.be.true; | ||
}); | ||
it("Child logger", () => { | ||
prefix.apply(child, { template: "%l (%n):" }); | ||
child.info("test"); | ||
expect(spy.calledWith("INFO (child): test")).to.be.true; | ||
it('Child reapplyng', () => { | ||
prefix.apply(child, { | ||
levelFormatter(level) { | ||
return level; | ||
} | ||
}); | ||
child.info('test'); | ||
expect(spy.calledWith('info (child): test')).to.be.true; | ||
}); | ||
it("Child reapplyng", () => { | ||
prefix.apply(child, { | ||
levelFormatter: function(level) { | ||
return level; | ||
} | ||
}); | ||
child.info("test"); | ||
expect(spy.calledWith("info (child): test")).to.be.true; | ||
}); | ||
it('Root reapplyng', () => { | ||
prefix.apply(loglevel, { template: '%l (%n):' }); | ||
loglevel.info('test'); | ||
expect(spy.calledWith('INFO (root): test')).to.be.true; | ||
}); | ||
it("Root reapplyng", () => { | ||
prefix.apply(loglevel, { template: "%l (%n):" }); | ||
loglevel.info("test"); | ||
expect(spy.calledWith("INFO (root): test")).to.be.true; | ||
}); | ||
it('The prefix must be combined with the first argument, if it is a string', () => { | ||
prefix.apply(loglevel, { template: '%l:' }); | ||
it("The prefix must be combined with the first argument, if it is a string", () => { | ||
prefix.apply(loglevel, { template: "%l:" }); | ||
loglevel.warn("foo %s", "bar"); | ||
expect(spy.calledWith("WARN: foo %s", "bar")).to.be.true; | ||
}); | ||
loglevel.warn('foo %s', 'bar'); | ||
expect(spy.calledWith('WARN: foo %s', 'bar')).to.be.true; | ||
}); | ||
}); |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
15013
9
206
197
10