From fa83dbbaae8dfe8b34ff04b6ce13bc4a24a1a43d Mon Sep 17 00:00:00 2001 From: bbottema Date: Tue, 19 Jan 2016 13:08:09 +0000 Subject: [PATCH] added logging level to the prefix --- bower.json | 2 +- dist/logging-enhancer.js | 19 ++++++++++------ dist/logging-enhancer.min.js | 2 +- package.json | 2 +- spec/logging-enhancer-spec.js | 42 ++++++++++++++++++++--------------- src/logging-enhancer.js | 19 ++++++++++------ 6 files changed, 51 insertions(+), 35 deletions(-) diff --git a/bower.json b/bower.json index ef4b0a7..260831b 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "better-logging-base", - "version": "1.0.0", + "version": "1.1.0", "repository": { "type": "git", "url": "https://github.com/better-js-logging/better-logging-base.git" diff --git a/dist/logging-enhancer.js b/dist/logging-enhancer.js index f8f5524..9c74401 100644 --- a/dist/logging-enhancer.js +++ b/dist/logging-enhancer.js @@ -17,7 +17,7 @@ config.logLevels = config.logLevels || []; return function() { if (levelPassesThreshold(context, level, config)) { - var enhancedArguments = enhanceLogline(arguments, context, datetimePattern, datetimeLocale, prefixPattern); + var enhancedArguments = enhanceLogline(arguments, context, level, datetimePattern, datetimeLocale, prefixPattern); loggingFunc.apply(null, enhancedArguments); return enhancedArguments; } @@ -42,8 +42,8 @@ } } - function enhanceLogline(args, context, datetimePattern, datetimeLocale, prefixPattern) { - var prefix = generatePrefix(context, datetimePattern, datetimeLocale, prefixPattern); + function enhanceLogline(args, context, level, datetimePattern, datetimeLocale, prefixPattern) { + var prefix = generatePrefix(context, level, datetimePattern, datetimeLocale, prefixPattern); var processedArgs = maybeApplySprintf([].slice.call(args)); return [prefix].concat([].slice.call(processedArgs)); @@ -69,7 +69,7 @@ } } - function generatePrefix(context, datetimePattern, datetimeLocale, prefixPattern) { + function generatePrefix(context, level, datetimePattern, datetimeLocale, prefixPattern) { var dateStr = ''; if (typeof moment !== 'undefined') { dateStr = moment().locale(datetimeLocale).format(datetimePattern); @@ -79,13 +79,18 @@ var timeStr = new Date().toTimeString().match(/^([0-9]{2}:[0-9]{2}:[0-9]{2})/)[0]; dateStr = d.getDate() + '-' + (d.getMonth() + 1) + '-' + d.getFullYear() + ' ' + timeStr; } + + for (var levelName in self.LEVEL) { + if (self.LEVEL[levelName] === level) { break; } + } + levelName = levelName.toLowerCase(); if (typeof sprintf !== 'undefined') { - return sprintf(prefixPattern, dateStr, context); + return sprintf(prefixPattern, dateStr, context, levelName); } else { - // use fixed layout: '%s::[%s]> ' - return dateStr + '::[' + context + ']> '; + // use fixed layout: '%s::[%s]%s> ' + return dateStr + '::' + context + '::' + levelName + '> '; } } }; diff --git a/dist/logging-enhancer.min.js b/dist/logging-enhancer.min.js index 6fec14a..7d8bed6 100644 --- a/dist/logging-enhancer.min.js +++ b/dist/logging-enhancer.min.js @@ -1 +1 @@ -!function(){"use strict";var n=function(n,e){var t=this;this.LEVEL={TRACE:4,DEBUG:3,INFO:2,WARN:1,ERROR:0,OFF:-1},this.enhanceLogging=function(o,r,i,u,l,f,a){function c(n,e,o){function r(n,e){if(n){if(void 0!==e.logLevels[n])return e.logLevels[n];if(-1!==n.indexOf("."))return r(n.substring(0,n.lastIndexOf(".")),e)}return void 0!==e.logLevels["*"]?e.logLevels["*"]:t.LEVEL.TRACE}return e>t.LEVEL.OFF&&e<=r(n,o)}function s(e,o,r,i,u){function l(e){var o="undefined"!=typeof n,r=o&&e.length>=2&&"string"==typeof e[0]&&-1!==e[0].indexOf("%");if(r)try{var i=t.countSprintfHolders(e[0]);i>0&&(e[0]=n.apply(null,e),e.splice(1,i))}catch(u){e.unshift(u)}return e}var f=d(o,r,i,u),a=l([].slice.call(e));return[f].concat([].slice.call(a))}function d(t,o,r,i){var u="";if("undefined"!=typeof e)u=e().locale(r).format(o);else{var l=new Date,f=(new Date).toTimeString().match(/^([0-9]{2}:[0-9]{2}:[0-9]{2})/)[0];u=l.getDate()+"-"+(l.getMonth()+1)+"-"+l.getFullYear()+" "+f}return"undefined"!=typeof n?n(i,u,t):u+"::["+t+"]> "}return u.logLevels=u.logLevels||[],function(){if(c(i,r,u)){var n=s(arguments,i,l,f,a);return o.apply(null,n),n}return null}},t.countSprintfHolders=function(e){function t(n){return function(){r=Math.max(r,n)}}var o=/\x25\([a-zA-Z0-9_]+\)[b-fijosuxX]/.test(e);if(o)return 1;var r=0;return n(e,t(1),t(2),t(3),t(4),t(5),t(6),t(7),t(8),t(9),t(10)),r}};if("undefined"!=typeof module)module.exports.LoggingEnhancer=n;else if("undefined"!=typeof exports)exports.LoggingEnhancer=n;else{if("undefined"==typeof window)throw new Error("unable to expose LoggingEnhancer: no module, exports object and no global window detected");window.loggingEnhancer=new n(window.sprintf,window.moment)}}(); \ No newline at end of file +!function(){"use strict";var e=function(e,n){var t=this;this.LEVEL={TRACE:4,DEBUG:3,INFO:2,WARN:1,ERROR:0,OFF:-1},this.enhanceLogging=function(o,r,i,f,u,l,a){function s(e,n,o){function r(e,n){if(e){if(void 0!==n.logLevels[e])return n.logLevels[e];if(-1!==e.indexOf("."))return r(e.substring(0,e.lastIndexOf(".")),n)}return void 0!==n.logLevels["*"]?n.logLevels["*"]:t.LEVEL.TRACE}return n>t.LEVEL.OFF&&n<=r(e,o)}function c(n,o,r,i,f,u){function l(n){var o="undefined"!=typeof e,r=o&&n.length>=2&&"string"==typeof n[0]&&-1!==n[0].indexOf("%");if(r)try{var i=t.countSprintfHolders(n[0]);i>0&&(n[0]=e.apply(null,n),n.splice(1,i))}catch(f){n.unshift(f)}return n}var a=d(o,r,i,f,u),s=l([].slice.call(n));return[a].concat([].slice.call(s))}function d(o,r,i,f,u){var l="";if("undefined"!=typeof n)l=n().locale(f).format(i);else{var a=new Date,s=(new Date).toTimeString().match(/^([0-9]{2}:[0-9]{2}:[0-9]{2})/)[0];l=a.getDate()+"-"+(a.getMonth()+1)+"-"+a.getFullYear()+" "+s}for(var c in t.LEVEL)if(t.LEVEL[c]===r)break;return c=c.toLowerCase(),"undefined"!=typeof e?e(u,l,o,c):l+"::"+o+"::"+c+"> "}return f.logLevels=f.logLevels||[],function(){if(s(i,r,f)){var e=c(arguments,i,r,u,l,a);return o.apply(null,e),e}return null}},t.countSprintfHolders=function(n){function t(e){return function(){r=Math.max(r,e)}}var o=/\x25\([a-zA-Z0-9_]+\)[b-fijosuxX]/.test(n);if(o)return 1;var r=0;return e(n,t(1),t(2),t(3),t(4),t(5),t(6),t(7),t(8),t(9),t(10)),r}};if("undefined"!=typeof module)module.exports.LoggingEnhancer=e;else if("undefined"!=typeof exports)exports.LoggingEnhancer=e;else{if("undefined"==typeof window)throw new Error("unable to expose LoggingEnhancer: no module, exports object and no global window detected");window.loggingEnhancer=new e(window.sprintf,window.moment)}}(); \ No newline at end of file diff --git a/package.json b/package.json index 954632d..97af4f2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "better-logging-base", - "version": "1.0.0", + "version": "1.1.0", "description": "> Utility to produce better logging statements including level management", "main": "logging-enhancer.min.js", "scripts": { diff --git a/spec/logging-enhancer-spec.js b/spec/logging-enhancer-spec.js index 71a3e68..d95bc75 100644 --- a/spec/logging-enhancer-spec.js +++ b/spec/logging-enhancer-spec.js @@ -24,27 +24,33 @@ describe('logging-enhancer', function() { }); it('should log simple strings with various prefix configurations', function() { - var f_none = enh.enhanceLogging(dummy.trace, enh.LEVEL.TRACE, 'dummy', {}, 'dddd hh', 'en', ''); - var f_both = enh.enhanceLogging(dummy.trace, enh.LEVEL.TRACE, 'dummy', {}, 'dddd hh', 'en', '%s(%s): '); - var f_date1 = enh.enhanceLogging(dummy.warn, enh.LEVEL.TRACE, 'dummy', {}, 'dddd hh', 'en', '%s: '); - var f_date2 = enh.enhanceLogging(dummy.warn, enh.LEVEL.TRACE, 'dummy', {}, 'dddd hh', 'en', '%1$s: '); - var f_context = enh.enhanceLogging(dummy.error, enh.LEVEL.TRACE, 'dummy', {}, 'dddd hh', 'en', '%2$s: '); - var f_reversed = enh.enhanceLogging(dummy.debug, enh.LEVEL.TRACE, 'dummy', {}, 'dddd hh', 'en', '%2$s(%1$s): '); + var f_none = enh.enhanceLogging(dummy.trace, enh.LEVEL.TRACE, 'dummy', {}, 'dddd hh', 'en', ''); + var f_both = enh.enhanceLogging(dummy.trace, enh.LEVEL.TRACE, 'dummy', {}, 'dddd hh', 'en', '%s(%s): '); + var f_both_level = enh.enhanceLogging(dummy.trace, enh.LEVEL.TRACE, 'dummy', {}, 'dddd hh', 'en', '%s(%s)%s: '); + var f_date1 = enh.enhanceLogging(dummy.warn, enh.LEVEL.TRACE, 'dummy', {}, 'dddd hh', 'en', '%s: '); + var f_date2 = enh.enhanceLogging(dummy.warn, enh.LEVEL.TRACE, 'dummy', {}, 'dddd hh', 'en', '%1$s: '); + var f_context = enh.enhanceLogging(dummy.error, enh.LEVEL.TRACE, 'dummy', {}, 'dddd hh', 'en', '%2$s: '); + var f_reversed = enh.enhanceLogging(dummy.debug, enh.LEVEL.TRACE, 'dummy', {}, 'dddd hh', 'en', '%2$s(%1$s): '); + var f_level = enh.enhanceLogging(dummy.debug, enh.LEVEL.TRACE, 'dummy', {}, 'dddd hh', 'en', '%3$s: '); + var f_level_reversed = enh.enhanceLogging(dummy.debug, enh.LEVEL.TRACE, 'dummy', {}, 'dddd hh', 'en', '%2$s(%3$s): '); var datestr = moment().format('dddd hh'); // as we can't mock momentjs, let's at least have an hour resolution - expect(f_none('Hello World!')) .toEqual(['', 'Hello World!']); - expect(f_both('Hello World!')) .toEqual([datestr + '(dummy): ', 'Hello World!']); - expect(f_both('%%')) .toEqual([datestr + '(dummy): ', '%%']); - expect(f_date1('Hello World!')) .toEqual([datestr + ': ', 'Hello World!']); - expect(f_date2('Hello World!')) .toEqual([datestr + ': ', 'Hello World!']); - expect(f_context('Hello World!')) .toEqual(['dummy: ', 'Hello World!']); - expect(f_reversed('Hello World!')) .toEqual(['dummy(' + datestr + '): ', 'Hello World!']); - - expect(counters[TRACE]).toBe(3); + expect(f_none('Hello World!')) .toEqual(['', 'Hello World!']); + expect(f_both('Hello World!')) .toEqual([datestr + '(dummy): ', 'Hello World!']); + expect(f_both('%%')) .toEqual([datestr + '(dummy): ', '%%']); + expect(f_both_level('Hello World!')) .toEqual([datestr + '(dummy)trace: ', 'Hello World!']); + expect(f_date1('Hello World!')) .toEqual([datestr + ': ', 'Hello World!']); + expect(f_date2('Hello World!')) .toEqual([datestr + ': ', 'Hello World!']); + expect(f_context('Hello World!')) .toEqual(['dummy: ', 'Hello World!']); + expect(f_reversed('Hello World!')) .toEqual(['dummy(' + datestr + '): ', 'Hello World!']); + expect(f_level('Hello World!')) .toEqual(['trace: ', 'Hello World!']); + expect(f_level_reversed('Hello World!')) .toEqual(['dummy(trace): ', 'Hello World!']); + + expect(counters[TRACE]).toBe(4); expect(counters[WARN]).toBe(2); expect(counters[ERROR]).toBe(1); - expect(counters[DEBUG]).toBe(1); + expect(counters[DEBUG]).toBe(3); }); it('should log with sprintf replacements', function() { @@ -107,8 +113,8 @@ describe('logging-enhancer', function() { enh = new (require('../src/logging-enhancer.js').LoggingEnhancer)(undefined, moment); var f = enh.enhanceLogging(dummy.debug, enh.LEVEL.TRACE, 'dummy', {}, 'YYYY', 'en', ''); - expect(f('Hello World!')).toEqual([moment().year() + '::[dummy]> ', 'Hello World!']); - expect(f('%s %s!', 'Hello', 'World', [1,2,3])).toEqual([moment().year() + '::[dummy]> ', '%s %s!', 'Hello', 'World', [1,2,3]]); + expect(f('Hello World!')).toEqual([moment().year() + '::dummy::trace> ', 'Hello World!']); + expect(f('%s %s!', 'Hello', 'World', [1,2,3])).toEqual([moment().year() + '::dummy::trace> ', '%s %s!', 'Hello', 'World', [1,2,3]]); expect(counters[DEBUG]).toBe(2); }); diff --git a/src/logging-enhancer.js b/src/logging-enhancer.js index f8f5524..9c74401 100644 --- a/src/logging-enhancer.js +++ b/src/logging-enhancer.js @@ -17,7 +17,7 @@ config.logLevels = config.logLevels || []; return function() { if (levelPassesThreshold(context, level, config)) { - var enhancedArguments = enhanceLogline(arguments, context, datetimePattern, datetimeLocale, prefixPattern); + var enhancedArguments = enhanceLogline(arguments, context, level, datetimePattern, datetimeLocale, prefixPattern); loggingFunc.apply(null, enhancedArguments); return enhancedArguments; } @@ -42,8 +42,8 @@ } } - function enhanceLogline(args, context, datetimePattern, datetimeLocale, prefixPattern) { - var prefix = generatePrefix(context, datetimePattern, datetimeLocale, prefixPattern); + function enhanceLogline(args, context, level, datetimePattern, datetimeLocale, prefixPattern) { + var prefix = generatePrefix(context, level, datetimePattern, datetimeLocale, prefixPattern); var processedArgs = maybeApplySprintf([].slice.call(args)); return [prefix].concat([].slice.call(processedArgs)); @@ -69,7 +69,7 @@ } } - function generatePrefix(context, datetimePattern, datetimeLocale, prefixPattern) { + function generatePrefix(context, level, datetimePattern, datetimeLocale, prefixPattern) { var dateStr = ''; if (typeof moment !== 'undefined') { dateStr = moment().locale(datetimeLocale).format(datetimePattern); @@ -79,13 +79,18 @@ var timeStr = new Date().toTimeString().match(/^([0-9]{2}:[0-9]{2}:[0-9]{2})/)[0]; dateStr = d.getDate() + '-' + (d.getMonth() + 1) + '-' + d.getFullYear() + ' ' + timeStr; } + + for (var levelName in self.LEVEL) { + if (self.LEVEL[levelName] === level) { break; } + } + levelName = levelName.toLowerCase(); if (typeof sprintf !== 'undefined') { - return sprintf(prefixPattern, dateStr, context); + return sprintf(prefixPattern, dateStr, context, levelName); } else { - // use fixed layout: '%s::[%s]> ' - return dateStr + '::[' + context + ']> '; + // use fixed layout: '%s::[%s]%s> ' + return dateStr + '::' + context + '::' + levelName + '> '; } } };