winston-slack-webhook-transport
A Slack transport for Winston 3+ that logs to a channel via webhooks.

Installation
npm install winston winston-slack-webhook-transport
Usage
Set up with transports
const winston = require("winston");
const SlackHook = require("winston-slack-webhook-transport");
const logger = winston.createLogger({
level: "info",
transports: [
new SlackHook({
webhookUrl: "https://hooks.slack.com/services/xxx/xxx/xxx"
})
]
});
logger.info("This should now appear on Slack");
Set up by adding
const winston = require("winston");
const SlackHook = require("winston-slack-webhook-transport");
const logger = winston.createLogger({});
logger.add(new SlackHook({ webhookUrl: "https://hooks.slack.com/services/xxx/xxx/xxx" }));
Options
Message formatting
winston-slack-webhook-transport
supports the ability to format messages using Slack's message layout features. To do this, supply a custom formatter function that returns the requisite object structure to create the desired layout. You can use the Slack Block Kit Builder to quickly and easily prototype advanced layouts using Block Kit.
If for some reason you don't want to send a message to Slack, you can also return false
to prevent the log message from being sent.
Formatters can also override the channel the message is posted to, username, and icon by defining the properties channel
, username
, iconEmoji
, or iconUrl
in the same object structure. These will override any options set in the transport constructor.
Note that if you're using Block Kit using either the attachments
or blocks
keys, the text
parameter will function as a fallback for surfaces that do not support Block Kit, such as push notifications. It is recommended to include text
when possible in these cases.
const winston = require("winston");
const SlackHook = require("winston-slack-webhook-transport");
const logger = winston.createLogger({
level: "info",
transports: [
new SlackHook({
webhookUrl: "https://hooks.slack.com/services/xxx/xxx/xxx",
formatter: info => {
return {
text: "This will function as a fallback for surfaces that don't support Block Kit, like IRC clients or mobile push notifications.",
blocks: [
{
type: "section",
text: {
type: "plain_text",
text: "You can pass more info to the formatter by supplying additional parameters in the logger call"
}
}
],
attachments: [
{
text: "Or don't pass anything. That's fine too"
}
]
}
}
})
]
});
logger.info("Definitely try playing around with this.");