Skip to content

Instantly share code, notes, and snippets.

@msarchet
Last active August 29, 2015 14:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save msarchet/5663cfe80b99c5178106 to your computer and use it in GitHub Desktop.
Save msarchet/5663cfe80b99c5178106 to your computer and use it in GitHub Desktop.
Flannel. Extendable logging module for angular
(function () {
function homeController(logger) {
logger.log('thing', 123, {
123: 123
});
logger.warn('thing', 123, {
123: 123
});
logger.info('thing', 123, {
123: 123
});
logger.error('thing', 123, {
123: 123
});
}
var app = angular.module('app', ['flannel']);
app.run(['flannel.logger', function (logger) {
logger.setDefaultHandlers();
logger.setLogLevel(logger.logLevels.info);
logger.setLoggingHandler(logger.logLevels.info, function () {
console.log('Custom info handler!');
});
}]);
app.controller('home', ['flannel.logger', homeController]);
})();
(function () {
function logger($window, $log) {
var self = this;
function logWrapper(level) {
var handlers = self.logHandlers[level];
return function () {
var args = arguments;
if(self.logTiers[self.logLevel()].indexOf(level) !== -1) {
handlers.forEach(function (handler) {
handler.apply(this, args);
});
}
};
}
this.setLogLevel = function (level) {
$window.localStorage.setItem('flannel.loglevel', JSON.stringify(level));
};
this.logLevels = {
log: 'log',
info: 'info',
warn: 'warn',
error: 'error'
};
this.logLevel = function() {
var logLevel = $window.localStorage.getItem('flannel.loglevel');
if(logLevel && self.logLevels[logLevel]) {
return self.logLevels[logLevel]
}
return self.logLevels.error;
};
this.logTiers = {
log : ['log', 'info', 'warn', 'error'],
info : ['info', 'warn', 'error'],
warn : ['warn', 'error'],
error : ['error']
};
this.logHandlers = {
log: [],
info: [],
warn: [],
error: []
};
this.setDefaultHandlers = function() {
this.logHandlers.log.push($log.log);
this.logHandlers.warn.push($log.warn);
this.logHandlers.info.push($log.info);
this.logHandlers.error.push($log.error);
};
this.setLoggingHandler = function (level, handler) {
self.logHandlers[level].push(handler);
};
this.log = logWrapper(this.logLevels.log);
this.warn = logWrapper(this.logLevels.warn);
this.info = logWrapper(this.logLevels.info);
this.error = logWrapper(this.logLevels.error);
return this;
}
var woodsman = angular.module('flannel', []);
woodsman.factory('flannel.logger', ['$window', '$log', logger]);
})();
<div ng-app="app" ng-controller='home'>
You can change the visable logging level at runtime by setting the localstorage flag yourself.
</div>
@msarchet
Copy link
Author

See this working at this fiddle http://jsfiddle.net/AC8RH/33/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment