Logback appender which posts logs to slack via incoming webhook.
<repositories >
<repository >
<id >slack-webhook-appender</id >
<url >https://raw.github.com/dwango/slack-webhook-appender/mvn-repo/</url >
</repository >
</repositories >
<dependencies >
<dependency >
<groupId >jp.co.dwango</groupId >
<artifactId >slack-webhook-appender</artifactId >
<version >0.2.0</version > <!-- replace with the latest version -->
</dependency >
</dependencies >
<configuration >
<appender name =" SLACK" class =" jp.co.dwango.logback.SlackWebhookAppender" >
<webhookUrl >...</webhookUrl >
<timeout >50000</timeout >
<payload >
{
"channel": "#_channel",
"username": "username",
"icon_emoji": emoji,
"link_names": 1,
"attachments": [{
"title": level + " (" + hostname + ")",
"fallback": level + " (" + hostname + ")",
"color": color,
"fields": [{
"title": "Hostname",
"value": hostname,
"short": true
}, {
"title": "Time",
"value": timestamp,
"short": true
}, {
"title": "Level",
"value": level,
"short": true
}, {
"title": "Trigger",
"value": message,
"short": false
}]
}]
}
</payload >
</appender >
<appender name =" ASYNC_SLACK" class =" ch.qos.logback.classic.AsyncAppender" >
<appender-ref ref =" SLACK" />
<filter class =" ch.qos.logback.classic.filter.ThresholdFilter" >
<level >INFO</level >
</filter >
</appender >
<root level =" INFO" >
<appender-ref ref =" ASYNC_SLACK" />
</root >
</configuration >
Key
Required
Detail
webhookUrl
Y
URL of incoming webhook.
timeout
N
Timeout of posting to Slack in milliseconds. (Default 50,000 milliseconds)
payload
Y
Payload written in JavaScript to send to Slack.
Written in JavaScript
Available Buildin variables
Variable Name
Type
Description
event
ILoggingEvent
The representation of logging events. see API
property(name)
function
A function to get a property in which only context properties or system properties are accessible. For a key passed as argument, the property() methods return the String value of the property.
hostname
string
Hostname where the event occurred
level
string
Log level. eg. FATAL, ERROR, WARN, INFO, DEBUG, TRACE.
timestamp
string
Time when the event occurred. eg. 2018-02-21T19:00:25.827+09:00
message
string
The message of logging events.
color
string
Color according to log level.
emoji
string
Emoji according to log level.
{
"channel" : "#_channel" ,
"username" : "username" ,
"icon_emoji" : emoji ,
"link_names" : 1 ,
"attachments" : [ {
"title" : level + " (" + hostname + ")" ,
"fallback" : level + " (" + hostname + ")" ,
"color" : color ,
"fields" : [ {
"title" : "Hostname" ,
"value" : hostname ,
"short" : true
} , {
"title" : "Time" ,
"value" : timestamp ,
"short" : true
} , {
"title" : "Level" ,
"value" : level ,
"short" : true
} , {
"title" : "Trigger" ,
"value" : message ,
"short" : false
} ]
} ]
}
var env = 'dev' , mention = '' ;
if ( hostname . indexOf ( 'dev' ) == - 1 ) {
env = 'production' ; mention = '@channel' ;
}
return {
"channel" : "#_channel" ,
"username" : "username" ,
"icon_emoji" : emoji ,
"link_names" : 1 ,
"attachments" : [ {
"title" : level + " ( " + env + " ) " + mention ,
"fallback" : level + " ( " + hostname + " )" ,
"color" : color ,
"fields" : [ {
"title" : "Hostname" ,
"value" : hostname ,
"short" : true
} , {
"title" : "Time" ,
"value" : timestamp ,
"short" : true
} , {
"title" : "Level" ,
"value" : level ,
"short" : true
} , {
"title" : "Trigger" ,
"value" : message ,
"short" : false
} ]
} ]
} ;
logback.xml (Legacy Style)
<configuration >
<appender name =" SLACK" class =" jp.co.dwango.logback.SlackWebhookAppender" >
<webhookUrl >...</webhookUrl >
<channel >...</channel >
<username >...</username >
<layout >
<pattern >%date [%level] from %logger in %thread - %message%n%xException</pattern >
</layout >
</appender >
<appender name =" ASYNC_SLACK" class =" ch.qos.logback.classic.AsyncAppender" >
<appender-ref ref =" SLACK" />
<filter class =" ch.qos.logback.classic.filter.ThresholdFilter" >
<level >INFO</level >
</filter >
</appender >
<root level =" INFO" >
<appender-ref ref =" ASYNC_SLACK" />
</root >
</configuration >
Key
Required
Detail
webhookUrl
Y
URL of incoming webhook
channel
Y
channel to post logs to
username
Y
username which post logs as
iconEmoji
N
icon of the user; you probably want colons like :smiley:
iconUrl
N
icon of the user
linkNames
N
(true
/ false
) If false
, you will not be notified by posing message which includes @channel
, @{username}
and so forth (true
by default)
sbt release