Explore documentation
Better Stack Java logging
Start logging in 5 minutes
Collect logs from your Java applications using Logback.
1. Dependencies
Add Better Stack Logback appender 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.3.3</version>
</dependency>
dependencies {
// ...existing dependencies...
implementation 'com.logtail:logback-logtail:0.3.3'
}
You will need a Logback logger with a data-binding package for Jackson.
Don't have Logback 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.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
dependencies {
// ...existing dependencies...
implementation 'ch.qos.logback:logback-classic:1.2.11'
implementation 'ch.qos.logback:logback-core:1.2.11'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.5'
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="Logtail" class="com.logtail.logback.LogtailAppender">
<appName>MyApp</appName>
<sourceToken>$SOURCE_TOKEN</sourceToken>
<mdcFields>requestId,requestTime</mdcFields>
<mdcTypes>string,int</mdcTypes>
</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
- New to logging in Java? Check out our Intro guide to logging in Java.
- Want to support more data types? Install an add-on module for Jackson and register it in the Logtail appender's
<objectMapperModule>
tag. For example, see adding JavaTimeModule on Github. - Need to fine-tune logging? Configure more options inside
<appender name="Logtail">
tag inlogback.xml
:appName
- Application name for Better Stack indexation.sourceToken
- Your Better Stack source token.mdcFields
- MDC fields that will be sent as metadata, separated by a comma.mdcTypes
- MDC fields types that will be sent as metadata, in the same order asmdcFields
are set up, separated by a comma. Possible values arestring
,boolean
,int
, andlong
.maxQueueSize
- Maximum number of messages in the queue. Messages over the limit will be dropped. Default: 100000.batchSize
- Batch size for the number of messages to be sent via the API. Default: 1000.batchInterval
- Maximum wait time for a batch to be sent via the API, in milliseconds. Default: 3000.setConnectTimeout
- Connection timeout of the underlying HTTP client, in milliseconds. Default: 5000.readTimeout
- Read timeout of the underlying HTTP client, in milliseconds. Default: 10000.maxRetries
- Maximum number of retries for sending logs to Better Stack. After that, current batch of logs will be dropped. Default: 5.retrySleepMilliseconds
- Number of milliseconds to sleep before retrying to send logs to Better Stack. Default: 300.objectMapperModule
- Registers an add-on data type module for Jackson to serialize logged data, e.g.com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
. Can be used multiple times.
Example project
Want to try a more detailed example with Maven or Gradle?
See our Java Logtail example projects on GitHub.