Created
February 18, 2018 23:22
-
-
Save fresh5447/da76b9a79e1fb248de6b863a2a901c21 to your computer and use it in GitHub Desktop.
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
import { default as envalid, str, num } from 'envalid' | |
import winston from 'winston' | |
import { Papertrail } from 'winston-papertrail' | |
const LOG_LEVELS = [ 'debug', 'verbose', 'info', 'warn', 'error'] | |
const env = envalid.cleanEnv(process.env, { | |
PAPERTRAIL_LOG_LEVEL: str({ desc: `Papertrail log level (${LOG_LEVELS})`, choices: LOG_LEVELS, devDefault: 'debug' }), | |
PAPERTRAIL_HOST: str({ desc: 'Papertrail hostname' }), | |
PAPERTRAIL_PORT: num({ desc: 'Papertrail port number'}), | |
PAPERTRAIL_CLIENT_NAME: str({ desc: 'Papertrail client name' }), | |
CONSOLE_LOG_LEVEL: str({ desc: `Console log level (${LOG_LEVELS})`, choices: LOG_LEVELS, devDefault: 'debug' }), | |
}); | |
const consoleTransport = new winston.transports.Console({ | |
level: env.CONSOLE_LOG_LEVEL, | |
colorize: true, | |
stderrLevels: ['error'] | |
}); | |
const papertrailTransport = new Papertrail({ | |
level: env.PAPERTRAIL_LOG_LEVEL, | |
host: env.PAPERTRAIL_HOST, | |
port: env.PAPERTRAIL_PORT, | |
hostname: env.PAPERTRAIL_CLIENT_NAME, | |
colorize: true, | |
logFormat(level, message) { | |
return '[' + level + '] ' + message; | |
} | |
}); | |
let logger; | |
function logImpl(level, message, metadata = {}) { | |
logger && logger.log(level, message, metadata); | |
} | |
export const log = { | |
debug(message, metadata) { | |
logImpl('debug', message, metadata); | |
}, | |
verbose(message, metadata) { | |
logImpl('verbose', message, metadata); | |
}, | |
info(message, metadata) { | |
logImpl('info', message, metadata); | |
}, | |
warn(message, metadata) { | |
logImpl('warn', message, metadata); | |
}, | |
error(message, metadata) { | |
logImpl('error', message, metadata); | |
}, | |
log(level, message, metadata) { | |
logImpl(level, message, metadata); | |
} | |
}; | |
papertrailTransport.on('error', err => { | |
log.error('Log: Papertrail error', err); | |
}); | |
papertrailTransport.on('connect', message => { | |
log.info(`Log: ${message}`); | |
}); | |
logger = new winston.Logger({ | |
levels: { error: 0, warn: 1, info: 2, verbose: 3, debug: 4 }, | |
transports: [ | |
papertrailTransport, | |
consoleTransport | |
] | |
}); | |
global.log = log; | |
log.info('Logging initialized'); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment