Обезьяна исправляет логирование узла js winston
У вас есть идея, как обезьяна исправлять методы ведения журнала node js winston, такие как информация, отладка с помощью shimmer (https://www.npmjs.com/package/shimmer)?
Например, это моя установка Winston 3.x:
let winston = require('winston')
winstonInit = winston.createLogger({
format: winston.format.json(),
transports: [
new winston.transports.Console({ level: 'info' }),
new winston.transports.File({
name: 'winston-logging',
level: 'info',
filename: './log/winston.log',
handleExceptions: true
})
],
exceptionHandlers: [
new winston.transports.File({ filename: './log/exceptions.log', handleExceptions: true})
]
});
winston.add(winstonInit);
Итак, в моем приложении я могу назвать этоwinston.info('send this message to Slack') // output: send this message to Slack
. Помимо отображения сообщения, мы также выполняем другие функции.
Я просто хочу, чтобы обезьяна исправила этот winston.info(), например, добавив некоторые дополнительные функции, такие как отправка уведомлений о сообщениях Slack при запуске winston.info. Спасибо.
1 ответ
Этого можно добиться двумя способами:
А. shimmer
путь:
var shimmer = require('shimmer');
// Assuming that an instance of winston is accesible.
shimmer.wrap(winston, 'info-interceptor', (winstonCall) => {
return function(arguments) {
// arguments are the log messages sent to the winston method for logging.
console.log(arguments)
// check if executed winston function is winston.info or not.
if(winstonCall.name === 'info'){
// add logic to send arguments to a slack message
}
// it is important to return the original call.
retirm winstonCall;
}
});
Примечание: не рекомендуется использовать function.name
метод, поэтому я бы посоветовал не использовать способ мерцания.
Б. non-shimmer
путь
Вы можете обновить конфигурацию Winston для выполнения дополнительных функций всякий раз, когда информационный метод выполняется следующим образом:
let winston = require('winston')
winstonInit = winston.createLogger({
format: winston.format.json(),
transports: [
new winston.transports.Console({ level: 'info' }),
new winston.transports.File({
name: 'winston-logging',
level: 'info',
filename: './log/winston.log',
handleExceptions: true
}),
new HttpStreamTransport({
url: 'https://yourdomain.com/log'
})
],
exceptionHandlers: [
new winston.transports.File({ filename: './log/exceptions.log', handleExceptions: true})
]
});
// winston.add(winstonInit);
const logger = {
_sendMessageToSlack: (msg) => {
// logic for sending message to slack
return message;
},
info: (msg) => winstonInit.info(logger._sendMessageToSlack(msg)),
warn: (msg) => winstonInit.warn(msg),
error: (msg) => winstonInit.error(msg),
};
module.exports = logger;
Это позволит вам импортировать logger
экземпляр в различных файлах и использовать его как logger.info()
, logger.warn()
, logger.error()
и выполнять дополнительные функции всякий раз, когда logger.info
называется.