Better Stack Java logging

Start logging in 5 minutes

Collect logs from your Java applications using Logback .

1. Dependencies

Add Logback Better Stack to your pom.xml or build.gradle file:

Maven (pom.xml) Gradle (build.gradle)
<dependency>
    <groupId>com.logtail</groupId>
    <artifactId>logback-logtail</artifactId>
    <version>0.2.0</version>
</dependency>
dependencies {
    implementation 'com.logtail:logback-logtail:0.2.0'
}

You will need a JAX-RS v2 implementation with a Jackson JSON mapper.

Don't have one in your project yet?
Add these dependencies to your pom.xml or build.gradle file:

Maven (pom.xml) Gradle (build.gradle)
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.11</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.2.11</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.jaxrs</groupId>
    <artifactId>jackson-jaxrs-json-provider</artifactId>
    <version>2.13.3</version>
</dependency>
<dependency>
    <groupId>jakarta.ws.rs</groupId>
    <artifactId>jakarta.ws.rs-api</artifactId>
    <version>3.0.0</version>
</dependency>
<dependency>
    <groupId>jakarta.inject</groupId>
    <artifactId>jakarta.inject-api</artifactId>
    <version>2.0.1</version>
</dependency>
<dependency>
    <groupId>jakarta.activation</groupId>
    <artifactId>jakarta.activation-api</artifactId>
    <version>2.1.0</version>
</dependency>
<dependency>
    <groupId>jakarta.annotation</groupId>
    <artifactId>jakarta.annotation-api</artifactId>
    <version>2.1.1</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-client</artifactId>
    <version>3.0.4</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-common</artifactId>
    <version>3.0.4</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.inject</groupId>
    <artifactId>jersey-hk2</artifactId>
    <version>3.0.4</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.7</version>
</dependency>
dependencies {
    implementation 'com.logtail:logback-logtail:0.1.2'
    implementation 'ch.qos.logback:logback-classic:1.2.11'
    implementation 'ch.qos.logback:logback-core:1.2.11'
    implementation 'com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.13.3'
    implementation 'jakarta.ws.rs:jakarta.ws.rs-api:3.0.0'
    implementation 'jakarta.inject:jakarta.inject-api:2.0.1'
    implementation 'jakarta.activation:jakarta.activation-api:2.1.0'
    implementation 'jakarta.annotation:jakarta.annotation-api:2.1.1'
    implementation 'org.glassfish.jersey.core:jersey-client:3.0.4'
    implementation 'org.glassfish.jersey.core:jersey-common:3.0.4'
    implementation 'org.glassfish.jersey.inject:jersey-hk2:3.0.4'
    implementation 'org.slf4j:slf4j-api:1.7.7'
}

2. Setup

Set up log appenders in your logback.xml configuration:

Logback config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="LogtailHttp" class="com.logtail.logback.LogtailAppender">
        <appName>MyApp</appName>
        <sourceToken>$SOURCE_TOKEN</sourceToken>
        <mdcFields>requestId,requestTime</mdcFields>
        <mdcTypes>string,int</mdcTypes>
    </appender>
    <appender name="Logtail" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="LogtailHttp" />
        <queueSize>500</queueSize>
        <discardingThreshold>0</discardingThreshold>
        <includeCallerData>true</includeCallerData>
    </appender>
    <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %msg%n</pattern>
        </encoder>
    </appender>
    <root level="INFO">
        <appender-ref ref="Logtail" />
        <appender-ref ref="Console" />
    </root>
</configuration>

3. Start logging ๐ŸŽ‰

Import and use the logger:

Send logs to Logtail
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class App {
    public static void main(String[] args) {
        Logger logger = LoggerFactory.getLogger(App.class);
        logger.error("Something bad happened.");
        String json = "{ \"item\": \"Orange soda\", \"price\": 100.00 }";
        logger.info("Log message with structured logging " + json);
    }
}

You should see your logs in Better Stack โ†’ Live tail .

Find structured data under the message_json field.
Better Stack parses any JSON at the end of the log line.

Need help?

Please let us know at hello@betterstack.com.
We're happy to help! ๐Ÿ™

Additional information

Example project

Want to try a more detailed example with Maven or Gradle?
See our Java Logtail example project on GitHub .