Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Added log enablers/disablers for all logger types on $logProvider #8832

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 102 additions & 4 deletions src/ng/log.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,10 @@
*/
function $LogProvider(){
var debug = true,
error = true,
warn = true,
info = true,
log = true,
self = this;

/**
Expand All @@ -63,6 +67,69 @@ function $LogProvider(){
}
};

/**
* @ngdoc method
* @name $logProvider#errorEnabled
* @description
* @param {boolean=} flag enable or disable error level messages
* @returns {*} current value if used as getter or itself (chaining) if used as setter
*/
this.errorEnabled = function(flag) {
if (isDefined(flag)){
error = flag;
return this;
} else {
return error;
}
};

/**
* @ngdoc method
* @name $logProvider#warnEnabled
* @description
* @param {boolean=} flag enable or disable warn level messages
* @returns {*} current value if used as getter or itself (chaining) if used as setter
*/
this.warnEnabled = function(flag) {
if (isDefined(flag)){
warn = flag;
return this;
} else {
return warn;
}
};

/**
* @ngdoc method
* @name $logProvider#infoEnabled
* @description
* @param {boolean=} flag enable or disable info level messages
* @returns {*} current value if used as getter or itself (chaining) if used as setter
*/
this.infoEnabled = function(flag) {
if (isDefined(flag)){
info = flag;
} else {
return info;
}
};

/**
* @ngdoc method
* @name $logProvider#logEnabled
* @description
* @param {boolean=} flag enable or disable log level messages
* @returns {*} current value if used as getter or itself (chaining) if used as setter
*/
this.logEnabled = function(flag) {
if (isDefined(flag)){
log = flag;
return this;
} else {
return log;
}
};

this.$get = ['$window', function($window){
return {
/**
Expand All @@ -72,16 +139,31 @@ function $LogProvider(){
* @description
* Write a log message
*/
log: consoleLog('log'),
log: (function () {
var fn = consoleLog('log');

return function() {
if (log) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there's no way to toggle this setting after the config phase (without hacks).

A smaller solution would be log: log ? consoleLog('log') : noop

However this still looks really big and maybe not that useful. Something closer to karma's logLevels might make more sense

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, interesting. This is literally the same code used for the existing debugEnabled function. Do we want to change how that works as well?

fn.apply(self, arguments);
}
};
}()),
/**
* @ngdoc method
* @name $log#info
*
* @description
* Write an information message
*/
info: consoleLog('info'),
info: (function () {
var fn = consoleLog('info');

return function() {
if (info) {
fn.apply(self, arguments);
}
};
}()),

/**
* @ngdoc method
Expand All @@ -90,7 +172,15 @@ function $LogProvider(){
* @description
* Write a warning message
*/
warn: consoleLog('warn'),
warn: (function () {
var fn = consoleLog('warn');

return function() {
if (warn) {
fn.apply(self, arguments);
}
};
}()),

/**
* @ngdoc method
Expand All @@ -99,7 +189,15 @@ function $LogProvider(){
* @description
* Write an error message
*/
error: consoleLog('error'),
error: (function () {
var fn = consoleLog('error');

return function() {
if (error) {
fn.apply(self, arguments);
}
};
}()),

/**
* @ngdoc method
Expand Down
113 changes: 110 additions & 3 deletions test/ng/logSpec.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
/* global $LogProvider: false */
'use strict';

function initService(debugEnabled) {
function initService(enableDict) {
return module(function($logProvider){
$logProvider.debugEnabled(debugEnabled);
$logProvider.logEnabled(enableDict.log);
$logProvider.infoEnabled(enableDict.info);
$logProvider.warnEnabled(enableDict.warn);
$logProvider.errorEnabled(enableDict.error);
$logProvider.debugEnabled(enableDict.debug);
});
}


describe('$log', function() {
var $window, logger, log, warn, info, error, debug;

Expand Down Expand Up @@ -119,7 +124,9 @@ describe('$log', function() {

describe("$log.debug", function () {

beforeEach(initService(false));
beforeEach(initService({
debug: false
}));

it("should skip debugging output if disabled", inject(
function(){
Expand Down Expand Up @@ -156,6 +163,31 @@ describe('$log', function() {
}}});
});

it('should skip error output if disabled', function(){

initService({
error: false
});

inject(
function(){
$window.console = {log: log,
warn: warn,
info: info,
error: error,
debug: debug};
},
function($log){
$log.log();
$log.warn();
$log.info();
$log.error();
$log.debug();
expect(logger).toEqual('log;warn;info;debug;');
}
);
});


it('should pass error if does not have trace', function() {
$log.error('abc', e);
Expand All @@ -178,4 +210,79 @@ describe('$log', function() {
expect(errorArgs).toEqual(['abc', 'message\nsourceURL:123']);
});
});
describe("$log.warn", function () {

beforeEach(initService({
warn: false
}));

it("should skip debugging output if disabled", inject(
function(){
$window.console = {log: log,
warn: warn,
info: info,
error: error,
debug: debug};
},
function($log) {
$log.log();
$log.warn();
$log.info();
$log.error();
$log.debug();
expect(logger).toEqual('log;info;error;debug;');
}
));

});
describe("$log.info", function () {

beforeEach(initService({
info: false
}));

it("should skip debugging output if disabled", inject(
function(){
$window.console = {log: log,
warn: warn,
info: info,
error: error,
debug: debug};
},
function($log) {
$log.log();
$log.warn();
$log.info();
$log.error();
$log.debug();
expect(logger).toEqual('log;warn;error;debug;');
}
));

});
describe("$log.log", function () {

beforeEach(initService({
log: false
}));

it("should skip debugging output if disabled", inject(
function(){
$window.console = {log: log,
warn: warn,
info: info,
error: error,
debug: debug};
},
function($log) {
$log.log();
$log.warn();
$log.info();
$log.error();
$log.debug();
expect(logger).toEqual('warn;info;error;debug;');
}
));

});
});