mirror of
https://github.com/jcreek/MupBot.git
synced 2026-07-12 18:33:44 +00:00
feat(*): Add initialiseLogger method
This commit is contained in:
@@ -0,0 +1,78 @@
|
|||||||
|
module.exports = {
|
||||||
|
initialiseLogger: function (config, winston, Elasticsearch) {
|
||||||
|
const { format } = winston;
|
||||||
|
const { combine, timestamp } = format;
|
||||||
|
|
||||||
|
let env = 'dev';
|
||||||
|
if (process.env.NODE_ENV === 'production') {
|
||||||
|
env = 'prod';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Custom format function that will look for an error object and log out the stack and if
|
||||||
|
// its not production, the error itself
|
||||||
|
const myFormat = format.printf((info) => {
|
||||||
|
const { timestamp: tmsmp, level, message, error, ...rest } = info;
|
||||||
|
let log = `${tmsmp} - ${level}:\t${message}`;
|
||||||
|
// Only if there is an error
|
||||||
|
if ( error ) {
|
||||||
|
if ( error.stack) log = `${log}\n${error.stack}`;
|
||||||
|
if (process.env.NODE_ENV !== 'production') log = `${log}\n${JSON.stringify(error, null, 2)}`;
|
||||||
|
}
|
||||||
|
// Check if rest is object
|
||||||
|
if ( !( Object.keys(rest).length === 0 && rest.constructor === Object ) ) {
|
||||||
|
log = `${log}\n${JSON.stringify(rest, null, 2)}`;
|
||||||
|
}
|
||||||
|
return log;
|
||||||
|
});
|
||||||
|
|
||||||
|
const esTransportOpts = {
|
||||||
|
level: 'info',
|
||||||
|
indexPrefix: 'logs_mupbot',
|
||||||
|
clientOpts: {
|
||||||
|
host: config.elasticsearch.elasticsearch_address,
|
||||||
|
log: 'info'
|
||||||
|
},
|
||||||
|
transformer: logData => {
|
||||||
|
return {
|
||||||
|
timestamp: new Date().toISOString(),
|
||||||
|
severity: logData.level,
|
||||||
|
message: logData.message,
|
||||||
|
meta: {
|
||||||
|
app: 'mupbot',
|
||||||
|
env: env,
|
||||||
|
stack: logData.meta.stack
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const logger = winston.createLogger({
|
||||||
|
level: 'info',
|
||||||
|
format: combine(
|
||||||
|
winston.format.errors({ stack: true }), // <-- use errors format
|
||||||
|
winston.format.timestamp(),
|
||||||
|
winston.format.prettyPrint(),
|
||||||
|
myFormat,
|
||||||
|
winston.format.json()
|
||||||
|
),
|
||||||
|
defaultMeta: { service: 'user-service' },
|
||||||
|
transports: [
|
||||||
|
new winston.transports.File({ filename: 'error.log', level: 'error' }),
|
||||||
|
new winston.transports.File({ filename: 'combined.log' }),
|
||||||
|
new Elasticsearch(esTransportOpts)
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
//
|
||||||
|
// If we're not in production then log to the `console` with the format:
|
||||||
|
// `${info.level}: ${info.message} JSON.stringify({ ...rest }) `
|
||||||
|
//
|
||||||
|
//if (process.env.NODE_ENV !== 'production') {
|
||||||
|
logger.add(new winston.transports.Console({
|
||||||
|
format: winston.format.simple(),
|
||||||
|
}));
|
||||||
|
//}
|
||||||
|
|
||||||
|
return logger;
|
||||||
|
},
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user