diff --git a/src/ng/log.js b/src/ng/log.js index ff4ec892c09c..02796ed94d6b 100644 --- a/src/ng/log.js +++ b/src/ng/log.js @@ -45,6 +45,7 @@ */ function $LogProvider(){ var debug = true, + level = 'log', self = this; /** @@ -63,6 +64,15 @@ function $LogProvider(){ } }; + this.debugLevel = function(flag) { + if (isDefined(flag)) { + level = flag; + return this; + } else { + return level; + } + }; + this.$get = ['$window', function($window){ return { /** @@ -72,7 +82,15 @@ function $LogProvider(){ * @description * Write a log message */ - log: consoleLog('log'), + log: (function () { + var fn = consoleLog('log'); + + return function() { + if (level == 'log') { + fn.apply(self, arguments); + } + }; + }()), /** * @ngdoc method @@ -81,7 +99,15 @@ function $LogProvider(){ * @description * Write an information message */ - info: consoleLog('info'), + info: (function () { + var fn = consoleLog('info'); + + return function() { + if (level == 'log' || level == 'info') { + fn.apply(self, arguments); + } + }; + }()), /** * @ngdoc method @@ -90,7 +116,15 @@ function $LogProvider(){ * @description * Write a warning message */ - warn: consoleLog('warn'), + warn: (function () { + var fn = consoleLog('warn'); + + return function() { + if (level == 'log' || level == 'info' || level == 'warn') { + fn.apply(self, arguments); + } + }; + }()), /** * @ngdoc method @@ -99,7 +133,15 @@ function $LogProvider(){ * @description * Write an error message */ - error: consoleLog('error'), + error: (function () { + var fn = consoleLog('error'); + + return function() { + if (level == 'log' || level == 'info' || level == 'warn' || level == 'error') { + fn.apply(self, arguments); + } + }; + }()), /** * @ngdoc method @@ -133,6 +175,7 @@ function $LogProvider(){ } function consoleLog(type) { + var console = $window.console || {}, logFn = console[type] || console.log || noop, hasApply = false; diff --git a/test/ng/logSpec.js b/test/ng/logSpec.js index 86d134bbdb74..85e3c8e16a5f 100644 --- a/test/ng/logSpec.js +++ b/test/ng/logSpec.js @@ -1,9 +1,10 @@ /* global $LogProvider: false */ 'use strict'; -function initService(debugEnabled) { +function initService(debugEnabled, debugLevel) { return module(function($logProvider){ $logProvider.debugEnabled(debugEnabled); + $logProvider.debugLevel(debugLevel); }); } @@ -178,4 +179,47 @@ describe('$log', function() { expect(errorArgs).toEqual(['abc', 'message\nsourceURL:123']); }); }); + + describe('$logLevel', function() { + + it('should log all levels if not defined', function(){ + $window.console = {log: log, + warn: warn, + info: info, + error: error, + debug: debug}; + }, + + function($log) { + $log.log(); + $log.info(); + $log.warn(); + $log.error(); + $log.debug(); + expect(logger).toEqual('log;info;warn;error;debug;'); + + }); + + it('should log only errors and warns if warn level is defined', function(){ + $window.console = {log: log, + warn: warn, + info: info, + error: error, + debug: debug}; + initService(true, 'warn'); + }, + + function($log) { + $log.log(); + $log.info(); + $log.warn(); + $log.error(); + $log.debug(); + expect(logger).toEqual('warn;error;debug;'); + + }); + + }); + + });