Step 1. Add the JitPack repository to your build file
Add it in your root settings.gradle at the end of repositories:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
}
Add it in your settings.gradle.kts at the end of repositories:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
maven { url = uri("https://jitpack.io") }
}
}
Add to pom.xml
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
Add it in your build.sbt at the end of resolvers:
resolvers += "jitpack" at "https://jitpack.io"
Add it in your project.clj at the end of repositories:
:repositories [["jitpack" "https://jitpack.io"]]
Step 2. Add the dependency
dependencies {
implementation 'com.github.maricn:logback-slack-appender:logback-slack-appender-1.3.0'
}
dependencies {
implementation("com.github.maricn:logback-slack-appender:logback-slack-appender-1.3.0")
}
<dependency>
<groupId>com.github.maricn</groupId>
<artifactId>logback-slack-appender</artifactId>
<version>logback-slack-appender-1.3.0</version>
</dependency>
libraryDependencies += "com.github.maricn" % "logback-slack-appender" % "logback-slack-appender-1.3.0"
:dependencies [[com.github.maricn/logback-slack-appender "logback-slack-appender-1.3.0"]]
Check out https://github.com/cyfrania/logback-slack-appender for up-to-date version (https://github.com/maricn/logback-slack-appender/issues/38).
I don't have time to take care and maintain this project anymore as I don't use logback on any of my projects. If anyone wants to have their fork linked from here, or to take over this repo, drop an issue. Take a look at a newer fork https://github.com/cyfrania/logback-slack-appender. Thanks for your support so far!
This is a simple Logback appender which pushes logs to Slack channel.
Add dependency to com.github.maricn:logback-slack-appender
in your pom.xml
.
Add SlackAppender configuration to logback.xml
file
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
...
<appender name="SLACK" class="com.github.maricn.logback.SlackAppender">
<!-- Slack API token -->
<token>1111111111-1111111-11111111-111111111</token>
<!-- Slack incoming webhook uri. Uncomment the lines below to use incoming webhook uri instead of API token. -->
<!--
<webhookUri>https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX</webhookUri>
-->
<!-- Channel that you want to post - default is #general -->
<channel>#api-test</channel>
<!-- Formatting (you can use Slack formatting - URL links, code formatting, etc.) -->
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%-4relative [%thread] %-5level %class - %msg%n</pattern>
</layout>
<!-- Username of the messages sender -->
<username>${HOSTNAME}</username>
<!-- Emoji to be used for messages -->
<iconEmoji>:stuck_out_tongue_winking_eye:</iconEmoji>
<!-- If color coding of log levels should be used -->
<colorCoding>true</colorCoding>
</appender>
<!-- Currently recommended way of using Slack appender -->
<appender name="ASYNC_SLACK" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="SLACK" />
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="ASYNC_SLACK" />
</root>
</configuration>
Example of SlackAppender
configuration to logback.groovy
file (filtering by marker):
import com.github.maricn.logback.SlackAppender
import ch.qos.logback.core.filter.EvaluatorFilter
import ch.qos.logback.classic.AsyncAppender
import ch.qos.logback.classic.boolex.OnMarkerEvaluator
appender('SLACK', SlackAppender) {
channel = "#api-test"
username = "${HOSTNAME}"
colorCoding = "true"
webhookUri = "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX"
layout(PatternLayout) {
pattern = "%-4relative [%thread] %-5level %class - %msg%n"
}
filter(EvaluatorFilter) {
evaluator(OnMarkerEvaluator) {
marker = "SLACK_MARKER"
}
onMismatch = DENY
onMatch = NEUTRAL
}
}
appender('ASYNC_SLACK', AsyncAppender) {
appenderRef("SLACK")
}