UNPKG

ag-logger

Version:

An AngularJS logger with configurable log levels.

142 lines (100 loc) 4.36 kB
(function() { 'use strict'; angular.module('agLogger'). provider('agLogger', agLoggerProvider); //////////////////// var _LOG_LEVELS = { OFF: { name: 'off', value: 6 }, ERROR: { name: 'error', value: 5, logLabel: 'ERR ' }, WARN: { name: 'warn', value: 4, logLabel: 'WARN '}, INFO: { name: 'info', value: 3, logLabel: 'INFO ' }, LOG: { name: 'log', value: 2, logLabel: 'LOG ' }, DEBUG: { name: 'debug', value: 1, logLabel: 'DEBUG' }, ALL: { name: 'all', value: 0 } }; var LOG_LEVEL_NAMES = { OFF: _LOG_LEVELS.OFF.name, ERROR: _LOG_LEVELS.ERROR.name, WARN: _LOG_LEVELS.WARN.name, INFO: _LOG_LEVELS.INFO.name, LOG: _LOG_LEVELS.LOG.name, DEBUG: _LOG_LEVELS.DEBUG.name, ALL: _LOG_LEVELS.ALL.name }; //////////////////// function agLoggerProvider() { // Enable logging of all levels by default var _initializedLogLevel = _LOG_LEVELS.ALL; //////////////////// /// Provider API //////////////////// var provider = {}; provider.LOG_LEVELS = LOG_LEVEL_NAMES; provider.enableAll = function() { _initializedLogLevel = _LOG_LEVELS.ALL; }; provider.disableAll = function() { _initializedLogLevel = _LOG_LEVELS.OFF; }; provider.setLogLevel = function(logLevelName) { _initializedLogLevel = getLogLevelObj(logLevelName); }; provider.getLogLevel = function() { return _initializedLogLevel.name; }; provider.$get = $get; provider.$get.$inject = ['$log']; return provider; //////////////////// //////////////////// /// Service API //////////////////// function $get($log) { var _currentLogLevel = null; var service = {}; service.LOG_LEVELS = LOG_LEVEL_NAMES; service.enableAll = enableAll; service.disableAll = disableAll; service.setLogLevel = setLogLevel; service.getLogLevel = getLogLevel; service.willLog = willLog; service.setLogLevel(_initializedLogLevel.name); return service; //////////////////// function getLogLevel() { return _initializedLogLevel.name; } function enableAll() { service.setLogLevel(_LOG_LEVELS.ALL.name); } function disableAll() { service.setLogLevel(_LOG_LEVELS.OFF.name); } function willLog(logLevelName) { var logLevelObj = getLogLevelObj(logLevelName); return logLevelObj.value >= _currentLogLevel.value; } function setLogLevel(logLevelName) { _currentLogLevel = getLogLevelObj(logLevelName); _refreshLogFns(); } //////////////////// function _refreshLogFns() { service.error = _getLogFn($log.error, _LOG_LEVELS.ERROR); service.warn = _getLogFn($log.warn, _LOG_LEVELS.WARN); service.info = _getLogFn($log.info, _LOG_LEVELS.INFO); service.log = _getLogFn($log.log, _LOG_LEVELS.LOG); service.debug = _getLogFn($log.debug, _LOG_LEVELS.DEBUG); } function _getLogFn(logFn, logLevelObj) { if (!service.willLog(logLevelObj.name)) { return angular.noop; } return function() { var args = Array.prototype.slice.call(arguments); if(angular.isString(args[0])) { args[0] = logLevelObj.logLabel + '|' + args[0]; } logFn.apply(null, args); }; } } } //////////////////// function getLogLevelObj(logLevelName) { if (logLevelName == null) { throw new Error('Provided logLevelName cannot be null!'); } var foundLogLevel = null; angular.forEach(_LOG_LEVELS, function(value, key) { if (value.name === logLevelName) { foundLogLevel = _LOG_LEVELS[key]; } }); if (foundLogLevel == null) { throw new Error('Invalid log level name provided: ' + logLevelName); } return foundLogLevel; } })();