Created
March 17, 2016 16:43
-
-
Save jhyland87/574905a33d3bf7d6e636 to your computer and use it in GitHub Desktop.
Logging library using winston
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict' | |
import _ from 'moar-lodash' | |
import path from 'path' | |
import * as appRoot from 'app-root-path' | |
import * as Winston from 'winston-color' | |
const config = appRoot.require('./dist/lib/config').logs | |
const _internals = {} | |
// Winston logger transports | |
// @todo Need to be able to add transports, programmatically | |
const logger = new ( Winston.Logger )({ | |
transports: [ | |
// Sasset core console logging | |
new ( Winston.transports.Console )({ | |
name: 'app-core-console', | |
level: config.level.console, | |
handleExceptions: true, | |
humanReadableUnhandledException: true | |
}), | |
// Sasset core file logging | |
new ( Winston.transports.File )({ | |
name: 'app-core-file', | |
filename: config.path, | |
json: true, | |
level: config.level.file, | |
handleExceptions: true, | |
humanReadableUnhandledException: true | |
}) | |
] | |
}) | |
// Set log level of one or more transports | |
_internals.setLevel = ( transport, level ) => { | |
level = level || 'warn' | |
if( _.isArray( transport ) ) | |
_.forEach( transport, t => logger.transports[ t ].level = level ) | |
else if( _.isString( transport ) ) | |
logger.transports[ transport ].level = level | |
} | |
// Remove one or more transports | |
_internals.remove = transport => { | |
if( _.isArray( transport ) ) | |
_.forEach( transport, t => logger.remove( t ) ) | |
else if( _.isString( transport ) ) | |
logger.remove( transport ) | |
} | |
// Remove all loaded transports | |
_internals.terminate = () => { | |
_.forEach( logger.transports, t => logger.remove( t ) ) | |
} | |
// List the currently enabled transports | |
_internals.listTransports = () => { | |
return _.keys( logger.transports ) | |
} | |
// Different log methods (EG: logger.debug('something here') ) | |
module.exports = globalMeta => { | |
// Any base meta to be added to all logs using this logger | |
let baseMeta = { | |
"package" : "app-core" | |
} | |
if( _.isObject( globalMeta ) ) | |
_.merge( baseMeta, globalMeta ) | |
// @todo Why the fuck wont this merge objects!! | |
const _mergeMeta = meta => _.mergeObjs( baseMeta, meta || {} ) | |
return { | |
// Handlers | |
logger: logger, | |
transports: logger.transports, | |
// Log level methods.. | |
info: ( message, meta ) => logger.info ( message, _mergeMeta( meta ) ), | |
debug: ( message, meta ) => logger.debug( message, _mergeMeta( meta ) ), | |
warn: ( message, meta ) => logger.warn ( message, _mergeMeta( meta ) ), | |
error: ( message, meta ) => logger.error( message, _mergeMeta( meta ) ), | |
// Log utility methods.. | |
setLevel: _internals.setLevel, | |
remove: _internals.remove, | |
terminate: _internals.terminate, | |
listTransports: _internals.listTransports | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment