Skip to main content
warning

Deprecation Notice: The Coralogix Java SDK (coralogix-sdk) will be deprecated in favor of the OpenTelemetry SDK and will no longer be supported after June 30, 2026. See the end-of-life notice for migration details.

Java

This guide shows how to send Java logs to Coralogix using the OpenTelemetry Java SDK logs API with OTLP/gRPC export. This replaces shipping logs through the legacy coralogix-sdk package.

Use Java 17+ and OpenTelemetry Java releases compatible with the sample.

Package dependencies setup

Add OpenTelemetry API, logs SDK, and OTLP exporter dependencies to your pom.xml:

<dependencies>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-api</artifactId>
<version>1.57.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk</artifactId>
<version>1.57.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk-logs</artifactId>
<version>1.57.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-otlp</artifactId>
<version>1.57.0</version>
</dependency>
</dependencies>

Select the https://ingress. endpoint that corresponds to your Coralogix domain using the domain selector at the top of the page.

Application implementation

  1. Build a Resource with service.name, cx.application.name, and cx.subsystem.name.
  2. Create an SdkLoggerProvider with a BatchLogRecordProcessor backed by OtlpGrpcLogRecordExporter.
  3. Register OpenTelemetrySdk globally, emit one INFO record, one WARN record inside a span, then ERROR records with Hello World Coralogix.
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.logs.Logger;
import io.opentelemetry.api.logs.Severity;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.context.Scope;
import io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporter;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
import io.opentelemetry.sdk.logs.export.BatchLogRecordProcessor;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import java.time.Instant;
import java.util.concurrent.TimeUnit;

public class Main {
private static String envOrDefault(String key, String fallback) {
String value = System.getenv(key);
return value == null || value.isBlank() ? fallback : value;
}

public static void main(String[] args) throws Exception {
String endpoint = envOrDefault("OTEL_EXPORTER_OTLP_ENDPOINT", "http://host.docker.internal:4317");
String serviceName = envOrDefault("OTEL_SERVICE_NAME", "java-otel-logs-sample");
String applicationName = envOrDefault("CORALOGIX_APPLICATION", "java-otel-app");
String subsystemName = envOrDefault("CORALOGIX_SUBSYSTEM", "worker");

Resource resource = Resource.getDefault().merge(
Resource.create(Attributes.of(
AttributeKey.stringKey("service.name"), serviceName,
AttributeKey.stringKey("cx.application.name"), applicationName,
AttributeKey.stringKey("cx.subsystem.name"), subsystemName
))
);

OtlpGrpcLogRecordExporter logExporter = OtlpGrpcLogRecordExporter.builder()
.setEndpoint(endpoint)
.build();

SdkLoggerProvider loggerProvider =
SdkLoggerProvider.builder()
.setResource(resource)
.addLogRecordProcessor(BatchLogRecordProcessor.builder(logExporter).build())
.build();

SdkTracerProvider tracerProvider = SdkTracerProvider.builder()
.setResource(resource)
.build();

OpenTelemetrySdk openTelemetry =
OpenTelemetrySdk.builder()
.setLoggerProvider(loggerProvider)
.setTracerProvider(tracerProvider)
.buildAndRegisterGlobal();

Logger logger = GlobalOpenTelemetry.get().getLogsBridge().loggerBuilder("My class").build();
Tracer tracer = openTelemetry.getTracer("java-otel-example");

System.out.printf("OTLP logs endpoint: %s%n", endpoint);

logger.logRecordBuilder()
.setTimestamp(Instant.now())
.setSeverity(Severity.INFO)
.setBody("hello java logging with OpenTelemetry")
.emit();

Span span = tracer.spanBuilder("manual-span").startSpan();
try (Scope ignored = span.makeCurrent()) {
logger.logRecordBuilder()
.setTimestamp(Instant.now())
.setSeverity(Severity.WARN)
.setBody("java log with trace correlation")
.emit();
} finally {
span.end();
}

for (int i = 0; i < 10; i++) {
var builder = logger.logRecordBuilder()
.setTimestamp(Instant.now())
.setSeverity(Severity.ERROR)
.setBody("Hello World Coralogix");
builder.emit();
Thread.sleep(1000);
}

Thread.sleep(1500);
loggerProvider.forceFlush().join(10, TimeUnit.SECONDS);
loggerProvider.shutdown().join(10, TimeUnit.SECONDS);
tracerProvider.shutdown().join(10, TimeUnit.SECONDS);

System.out.println("Done: flush + shutdown completed");
}
}

Run the sample:

mvn -q -DskipTests package
java -jar target/java-otel-logs-1.0.0-jar-with-dependencies.jar

Notes

  • The logs exporter batches records. Call forceFlush() / shutdown() before exit so telemetry is delivered.
  • The internal sample defaults to http://host.docker.internal:4317; for local non-Docker runs you can use http://localhost:4317.
  • For broader Java setup including traces and metrics, see Java OpenTelemetry instrumentation.

Logging output

With the OpenTelemetry SDK, you can send logs either to a local OpenTelemetry Collector or directly to Coralogix using an OTLP endpoint.

OpenTelemetry Collector

Set OTEL_EXPORTER_OTLP_ENDPOINT to your collector OTLP/gRPC endpoint (for example http://localhost:4317).

Coralogix OpenTelemetry endpoint

Authenticate with your Send-Your-Data API key and point the OTLP exporter at your Coralogix endpoint.

OTEL_EXPORTER_OTLP_ENDPOINT=https://ingress.eu2.coralogix.com:443
OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer send_your_data_key"
OTEL_SERVICE_NAME=java-otel-logs-sample
CORALOGIX_APPLICATION=hello
CORALOGIX_SUBSYSTEM=world

Additional resources

OpenTelemetry JavaOpenTelemetry Java docs
Java instrumentation guideJava OpenTelemetry instrumentation
Coralogix EndpointsCoralogix Endpoints

Support

For help, use in-app chat or email support@coralogix.com.

Was this page helpful?
On this page