Subchapter 153.3
references/java.mdMarkdown4 KBView on GitHub
Required
Add the following dependencies to your pom.xml:
XML
PostHog AI
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-api</artifactId>
<version>1.32.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk</artifactId>
<version>1.32.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-otlp</artifactId>
<version>1.32.0</version>
</dependency>2
Required
You’ll need your PostHog project token to authenticate log requests. This is the same key you use for capturing events and exceptions with the PostHog SDK.
Important: Use your project token which starts with
phc_. Do not use a personal API key (which starts withphx_).
You can find your project token in Project Settings (opens in a new tab).
3
Required
Set up the OpenTelemetry SDK to send logs to PostHog.
Java
PostHog AI
import io.opentelemetry.api.logs.GlobalLoggerProvider;
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
import io.opentelemetry.sdk.logs.export.BatchLogRecordProcessor;
import io.opentelemetry.exporter.otlp.logs.OtlpHttpLogRecordExporter;
SdkLoggerProvider loggerProvider = SdkLoggerProvider.builder()
.addLogRecordProcessor(
BatchLogRecordProcessor.builder(
OtlpHttpLogRecordExporter.builder()
.setEndpoint("https://us.i.posthog.com/i/v1/logs")
.addHeader("Authorization", "Bearer <ph_project_token>")
.build()
).build()
)
.build();
GlobalLoggerProvider.set(loggerProvider);Alternatively, you can pass the API key as a query parameter:
Java
PostHog AI
OtlpHttpLogRecordExporter.builder()
.setEndpoint("https://us.i.posthog.com/i/v1/logs?token=<ph_project_token>")
.build()4
Required
Now you can start logging with OpenTelemetry:
Java
PostHog AI
import io.opentelemetry.api.logs.Logger;
Logger logger = GlobalLoggerProvider.get().get("my-app");
logger.logRecordBuilder()
.setBody("User action")
.setAttributes(Attributes.of(
AttributeKey.stringKey("userId"), "123",
AttributeKey.stringKey("action"), "login"
))
.emit();5
Recommended
Once everything is configured, test that logs are flowing into PostHog:
Checkpoint
What you can do with your logs
| Action | Description |
|---|---|
| Why you need logs (opens in a new tab) | What logs show you that nothing else does |
| Search logs (opens in a new tab) | Use the search interface to find specific log entries |
| Filter by level | Filter by INFO, WARN, ERROR, etc. |
| Link session replay (opens in a new tab) | Connect logs to users and session replays by passing posthogDistinctId and sessionId |
| Logging best practices (opens in a new tab) | Learn what to log, how to structure logs, and patterns that make logs useful in production |
Ask a question
HelpfulCould be better