Explore documentation
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:
<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:
<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:
<?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:
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
New to logging in Java? Check out our Intro guide to logging in Java.
Want to learn more about Logback AsyncAppender options like
queueSize
anddiscardingThreshold
? Read the official Logback documentation .
Example project
Want to try a more detailed example with Maven or Gradle?
See our Java Logtail example project on GitHub .