Skip to content

Instantly share code, notes, and snippets.

@fresh5447
Created February 18, 2018 23:22
Show Gist options
  • Save fresh5447/da76b9a79e1fb248de6b863a2a901c21 to your computer and use it in GitHub Desktop.
Save fresh5447/da76b9a79e1fb248de6b863a2a901c21 to your computer and use it in GitHub Desktop.
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