@kevit/log4js-hangout
Version:
Log4js hangout appender
74 lines (67 loc) • 2.47 kB
JavaScript
const rp = require('request-promise');
let threadName = '';
let messageInterval = 24*60*60*1000;
let setUserDefinedInterval = (messageInterval) => {
// console.log("In set interval...");
setInterval(function () {
// console.log('Reseting thread name ', new Date().toLocaleTimeString());
threadName = '';
}, messageInterval);
};
let sendMessage = (message, webhookUrl) => {
if(message.length>4096){
console.log('log4js-hangout warning: Length of error message exceeded 4096 characters. Hangout allows only 4096 characters, so error message trimmed to 4096 characters.');
message = message.substr(0, 4096);
}
rp({
method: 'POST',
uri: webhookUrl,
body: {
text: message,
thread: {
name: threadName
}
},
json: true,
header: {
'Content-Type': 'application/json',
'charset': 'UTF-8'
}
}).then(response=>{
if(threadName === ''){
threadName = response.thread.name;
}
})
.catch(function (err) {
console.error('log4js hangout appender - Error happened', 'Error in calling webhook', err);
});
};
function configure(config, layouts) {
let pattern = "`%p` %c%n%m";
let layout = layouts.patternLayout(pattern);
if (config.layout) {
layout = layouts.layout(config.layout.type, config.layout);
}
if (config.space && config.key && config.token)
config.webhookUrl = `https://chat.googleapis.com/v1/spaces/${config.space}/messages?key=${config.key}&token=${config.token}`;
else if (!config.webhookUrl)
return new Error('log4js hangout appender - Incomplete configurations');
if (config.sendInterval && !isNaN(config.sendInterval)) {
setUserDefinedInterval(parseInt(config.sendInterval))
}
else{
setUserDefinedInterval(messageInterval);
}
return hangoutAppender(config, layout);
}
function hangoutAppender(config, layout, pattern) {
const appender = (loggingEvent) => {
if (!config.webhookUrl)
console.error('log4js hangout appender - Error happened', 'WebHook not defined in config');
else
sendMessage(layout(loggingEvent), config.webhookUrl);
};
//TODO: implement time-interval
return appender;
}
exports.configure = configure;