File size: 2,135 Bytes
befd7da |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
'use strict';
const _ = require('lodash');
const bunyan = require('bunyan');
const raven = require('raven');
const sentryStream = require('bunyan-sentry-stream');
const PrettyStream = require('bunyan-prettystream');
const SensitiveDataStream = require('./streams/sensitive-data');
const serializers = require('./serializers');
const defaultConfig = {
logger: {
name: process.env.LOGGER_NAME || 'Development logger',
level: process.env.LOGGER_LEVEL || 'info',
pretty: process.env.USE_BUNYAN_PRETTY_STREAM === 'true',
hideSensitiveData: process.env.LOGGER_USE_SENSITIVE_DATA_STREAM !== 'false',
sensitiveDataPattern: process.env.LOGGER_SENSITIVE_DATA_PATTERN,
},
sentry: {
dsn: process.env.SENTRY_DSN,
release: undefined,
environment: process.env.NODE_ENV || 'development',
},
};
function init(config) {
const finalConfig = _.defaultsDeep(config, defaultConfig);
const loggerName = finalConfig.logger.name;
const loggerLevel = finalConfig.logger.level;
const loggerConfig = {
name: loggerName,
level: loggerLevel,
streams: [],
serializers: {
err: serializers.err,
},
};
if (finalConfig.logger.pretty) {
const prettyStdOut = new PrettyStream();
prettyStdOut.pipe(process.stdout);
loggerConfig.streams.push({
type: 'raw',
level: loggerLevel,
stream: prettyStdOut,
});
} else if (finalConfig.logger.hideSensitiveData) {
loggerConfig.streams.push({
level: loggerLevel,
stream: new SensitiveDataStream(finalConfig.logger.sensitiveDataPattern),
});
} else {
loggerConfig.streams.push({ level: loggerLevel, stream: process.stdout });
}
if (finalConfig.sentry && finalConfig.sentry.dsn) {
const client = new raven.Client(finalConfig.sentry.dsn, {
name: loggerName,
release: finalConfig.sentry.release,
environment: finalConfig.sentry.environment,
});
client.install();
loggerConfig.streams.push(sentryStream(client));
}
return bunyan.createLogger(loggerConfig);
}
const logger = init(defaultConfig);
module.exports = logger;
module.exports.init = init;
|