Skip to content

Instantly share code, notes, and snippets.

@jhyland87
Created March 17, 2016 16:43
Show Gist options
  • Save jhyland87/574905a33d3bf7d6e636 to your computer and use it in GitHub Desktop.
Save jhyland87/574905a33d3bf7d6e636 to your computer and use it in GitHub Desktop.
Logging library using winston
'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