Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
9b715a0
Refactors Space.Logger class to use arguments on Constructor, removes…
qejk Apr 19, 2016
03aef7d
Refactors Space.Module to: not use global Space.log, instantiate unde…
qejk Apr 19, 2016
dd32c4e
Moves temporarily Space.Logger code to coffeescript, adds support for…
qejk Apr 24, 2016
193f43b
Refactors code: moves methods to base Space.Logger.Addapter class, ad…
qejk Apr 24, 2016
c71872c
Adds default configuration from ENV to module configuration, sets min…
qejk Apr 24, 2016
a778812
Refactors
qejk Apr 24, 2016
c8ea9ea
Removes blank lines
qejk Apr 26, 2016
8942054
Moves instantiation of console transport to Space.Logger.WinstonAdapter
qejk Apr 26, 2016
64f90e0
Simplifies initialization of transports, adds dedicated method for pr…
qejk Apr 26, 2016
462bfef
Removes winston npm dependency
qejk Apr 26, 2016
dc4914f
Simplifies logging initialization by moving it to separate modules co…
qejk Apr 26, 2016
a48baa3
Moves coffeescript to ES6
qejk Apr 26, 2016
0cd08c6
Removes unnecessary variable
qejk May 7, 2016
e5a071a
Adds state related additional helper methods to Space.Logger
qejk May 7, 2016
e06d264
Changes injector mapping type
qejk May 7, 2016
37cafb0
Fixes module unit tests
qejk May 7, 2016
319b591
Refactors Space.Logger unit tests
qejk May 7, 2016
fa9c2dc
One semicolon here, one semicolon there...
qejk May 7, 2016
e2d7773
Merge branch 'develop' of https://github.com/meteor-space/base into f…
qejk Jan 7, 2017
d886a5b
Removes back winston dependency from meteor
qejk Jan 7, 2017
cbb3ca5
Refactors Logger
qejk Jan 7, 2017
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
26 changes: 0 additions & 26 deletions .npm/package/npm-shrinkwrap.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions package.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ Package.describe({

Npm.depends({
"getenv": "0.5.0",
"winston": "2.1.0",
"babel-plugin-transform-decorators-legacy": "1.3.4"
});

Expand Down Expand Up @@ -49,7 +48,9 @@ Package.onUse(function(api) {
'source/injector.coffee',
'source/injector_annotations.coffee',
'source/module.coffee',
'source/application.coffee'
'source/application.coffee',
'source/loggers/adapter.js',
'source/loggers/console-adapter.js',
]);

// Test helpers
Expand Down
39 changes: 1 addition & 38 deletions source/configuration.js
Original file line number Diff line number Diff line change
@@ -1,40 +1,3 @@

if (Meteor.isServer) {

let getenv = Npm.require('getenv');
// Wrapper
Space.getenv = getenv;

Space.configuration = Space.getenv.multi({
log: {
enabled: ['SPACE_LOG_ENABLED', false, 'bool'],
minLevel: ['SPACE_LOG_MIN_LEVEL', 'info', 'string']
}
});

// Pass down to the client
_.deepExtend(Meteor.settings, {
public: {
log: {
enabled: Space.configuration.log.enabled,
minLevel: Space.configuration.log.minLevel
}
}
});

__meteor_runtime_config__.PUBLIC_SETTINGS = Meteor.settings.public;

}

if (Meteor.isClient) {

let log = Meteor.settings.public.log;

// Guard and defaults when not loaded on server
Space.configuration = {
log: {
enabled: log && log.enabled || false,
minLevel: log && log.minLevel || 'info'
}
};
Space.getenv = Npm.require('getenv');
}
134 changes: 65 additions & 69 deletions source/logger.js
Original file line number Diff line number Diff line change
@@ -1,104 +1,100 @@
let config = Space.configuration;
const Logger = Space.Object.extend('Space.Logger', {

if (Meteor.isServer) {
winston = Npm.require('winston');
}

Space.Object.extend(Space, 'Logger', {

_logger: null,
_minLevel: 6,
_state: 'stopped',

_levels: {
'error': 3,
'warning': 4,
'warn': 4,
'info': 6,
'debug': 7
STATES: {
stopped: 'stopped',
running: 'running'
},

Constructor() {
if (Meteor.isServer) {
this._logger = new winston.Logger({
transports: [
new winston.transports.Console({
colorize: true,
prettyPrint: true
})
]
});
this._logger.setLevels(winston.config.syslog.levels);
this._state = this.STATES.stopped;
this._adapters = {};
},

addAdapter(id, adapter, shouldOverride = false) {
if (!id || typeof id !== 'string') {
throw new Error(this.constructor.ERRORS.invalidId);
}
if (Meteor.isClient) {
this._logger = console;
if (this.hasAdapter(id) && !shouldOverride) {
throw new Error(this.constructor.ERRORS.mappingExists(id));
}
this._adapters[id] = adapter;
},

setMinLevel(name) {
let newCode = this._levelCode(name);
if (this._minLevel !== newCode) {
this._minLevel = newCode;
if (Meteor.isServer) {
this._logger.transports.console.level = name;
}
}
overrideAdapter(id, adapter) {
return this.addAdapter(id, adapter, true);
},

getAdapter(id) {
return this._adapters[id] || null;
},

hasAdapter(id) {
return (this._adapters[id] !== null && this._adapters[id] !== undefined);
},

removeAdapter(id) {
if (this._adapters[id]) {delete this._adapters[id];}
},

getAdapters() {
return this._adapters;
},

start() {
if (this._is('stopped')) {
this._state = 'running';
if (this.isInState(this.STATES.stopped)) {
this._state = this.STATES.running;
}
},

stop() {
if (this._is('running')) {
this._state = 'stopped';
if (this.isInState(this.STATES.running)) {
this._state = this.STATES.stopped;
}
},

debug(message) {
check(message, String);
this._log('debug', arguments);
debug(...args) {
this._log('debug', args);
},

info(message) {
check(message, String);
this._log('info', arguments);
info(...args) {
this._log('info', args);
},

warning(message) {
check(message, String);
if (Meteor.isClient)
this._log('warn', arguments);
if (Meteor.isServer)
this._log('warning', arguments);
warning(...args) {
this._log('warning', args);
},

error(message) {
check(message, String);
this._log('error', arguments);
error(...args) {
this._log('error', args);
},

_levelCode(name) {
return this._levels[name];
isInState(expectedState) {
return (this._state === expectedState);
},

_is(expectedState) {
if (this._state === expectedState) return true;
isRunning() {
return this.isInState(this.STATES.running);
},

_log(level, message) {
if(this._is('running') && this._levelCode(level) <= this._minLevel) {
this._logger[level].apply(this._logger, message);
isStopped() {
return this.isInState(this.STATES.stopped);
},

_log(level, args) {
if (!this.isInState(this.STATES.running)) {return;}

for (let adapter of Object.values(this.getAdapters())) {
adapter[level].apply(adapter, args);
}
}

});

Space.log = new Space.Logger();
Logger.ERRORS = {
mappingExists(id) {
return `Adapter with id '${id}' would be overwritten. Use method
'overrideAdapter' for that`;
},
invalidId: 'Cannot map <null> or <undefined> or non string values'
};

if (config.log.enabled) {
Space.log.setMinLevel(config.log.minLevel);
Space.log.start();
}
export default Logger;
44 changes: 44 additions & 0 deletions source/loggers/adapter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
const LoggingAdapter = Space.Object.extend('Space.Logger.LoggingAdapter', {

_lib: null,
Constructor(lib) {
if (!lib) {
throw new Error(this.ERRORS.undefinedLibrary);
}
this.setLibrary(lib);
},

setLibrary(lib) {
this._lib = lib;
},

getLibrary() {
return this._lib || null;
},

debug(...args) {
this._log('debug', args);
},

info(...args) {
this._log('info', args);
},

warning(...args) {
this._log('warning', args);
},

error(...args) {
this._log('error', args);
},

_log(level, args) {
this._lib[level].apply(this._lib, args);
},

ERRORS: {
undefinedLibrary: 'Logging library is required'
}
});

export default LoggingAdapter;
14 changes: 14 additions & 0 deletions source/loggers/console-adapter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import LoggingAdapter from './adapter';

const ConsoleLogger = LoggingAdapter.extend('Space.Logger.ConsoleAdapter', {

Constructor() {
LoggingAdapter.call(this, console);
},

warning(...args) {
return this._log('warn', args);
}
});

export default ConsoleLogger;
Loading