Copy as Markdown[Open in ChatGPT](https://chatgpt.com/?q=Read%20https%3A%2F%2Fdocs-docusaurus.kinsta.page%2Fintegrations%2Fsdks%2Fjava.md%20and%20help%20me%20with%20my%20question%20about%20this%20Coralogix%20documentation%20page.)[Open in Claude](https://claude.ai/new?q=Read%20https%3A%2F%2Fdocs-docusaurus.kinsta.page%2Fintegrations%2Fsdks%2Fjava.md%20and%20help%20me%20with%20my%20question%20about%20this%20Coralogix%20documentation%20page.)

Warning

**Deprecation Notice**: The Coralogix Java SDK (`coralogix-sdk`) will be deprecated in favor of the [OpenTelemetry SDK](https://opentelemetry.io/docs/languages/java/) and will no longer be supported after **June 30, 2026**. See the [end-of-life notice](https://docs-docusaurus.kinsta.page/user-guides/latest-updates/deprecations/java-sdk/.md) for migration details.

# Java

This guide shows how to send Java logs to Coralogix using the [OpenTelemetry Java SDK](https://opentelemetry.io/docs/languages/java/) 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[​](#package-dependencies-setup "Direct link to 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](https://docs-docusaurus.kinsta.page/user-guides/account-management/account-settings/coralogix-domain/.md) using the domain selector at the top of the page.

## Application implementation[​](#application-implementation "Direct link to 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](https://docs-docusaurus.kinsta.page/opentelemetry/instrumentation-options/java-opentelemetry-instrumentation/.md).

### Logging output[​](#logging-output "Direct link to Logging output")

With the OpenTelemetry SDK, you can send logs either to a local [OpenTelemetry Collector](https://docs-docusaurus.kinsta.page/opentelemetry/kubernetes-observability/kubernetes-observability-using-opentelemetry/.md) or directly to Coralogix using an OTLP endpoint.

#### OpenTelemetry Collector[​](#opentelemetry-collector "Direct link to OpenTelemetry Collector")

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

[![](/assets/images/otel_screenshot-9ed6410ae299d498171e11791faddad2.webp)](https://docs-docusaurus.kinsta.page/assets/images/otel_screenshot-9ed6410ae299d498171e11791faddad2.webp)

#### Coralogix OpenTelemetry endpoint[​](#coralogix-opentelemetry-endpoint "Direct link to Coralogix OpenTelemetry endpoint")

Authenticate with your [Send-Your-Data API key](https://docs-docusaurus.kinsta.page/user-guides/account-management/api-keys/send-your-data-api-key/.md) 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
```

[![](/assets/images/coralogix_screenshot-e92ee6039572ed8235a2b016a306c250.webp)](https://docs-docusaurus.kinsta.page/assets/images/coralogix_screenshot-e92ee6039572ed8235a2b016a306c250.webp)

### Additional resources[​](#additional-resources "Direct link to Additional resources")

|                            |                                                                                                                                                        |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| OpenTelemetry Java         | [OpenTelemetry Java docs](https://opentelemetry.io/docs/languages/java/)                                                                               |
| Java instrumentation guide | [Java OpenTelemetry instrumentation](https://docs-docusaurus.kinsta.page/opentelemetry/instrumentation-options/java-opentelemetry-instrumentation/.md) |
| Coralogix Endpoints        | [Coralogix Endpoints](https://docs-docusaurus.kinsta.page/integrations/coralogix-endpoints/.md)                                                        |
