quarkusio/quarkus · error · IllegalStateException
No OTLP protocol specified. Please check `quarkus.otel.expor
Error message
No OTLP protocol specified. Please check `quarkus.otel.exporter.otlp.logs.protocol` property
What it means
Before creating the OTLP log record exporter, Quarkus requires an explicit protocol via `quarkus.otel.exporter.otlp.logs.protocol`. If the property is absent or empty, the recorder throws IllegalStateException because it cannot decide between the gRPC and HTTP senders. Unlike an unsupported value, this means nothing was configured at all.
Source
Thrown at extensions/opentelemetry/runtime/src/main/java/io/quarkus/opentelemetry/runtime/exporter/otlp/OTelExporterRecorder.java:279
final URI baseUri = getLogsUri(exporterRuntimeConfig.getValue());
return new Function<>() {
@Override
public LogRecordExporter apply(SyntheticCreationalContext<LogRecordExporter> context) {
if (runtimeConfig.getValue().sdkDisabled() || baseUri == null) {
return NoopLogRecordExporter.INSTANCE;
}
MemoryMode memoryMode = exporterRuntimeConfig.getValue().memoryMode();
LogRecordExporter logRecordExporter;
try {
TlsConfigurationRegistry tlsConfigurationRegistry = context
.getInjectedReference(TlsConfigurationRegistry.class);
OtlpExporterLogsConfig logsConfig = exporterRuntimeConfig.getValue().logs();
if (logsConfig.protocol().isEmpty()) {
throw new IllegalStateException("No OTLP protocol specified. " +
"Please check `quarkus.otel.exporter.otlp.logs.protocol` property");
}
String protocol = logsConfig.protocol().get();
if (GRPC.equals(protocol)) {
logRecordExporter = new VertxGrpcLogRecordExporter(
new GrpcExporter(
new VertxGrpcSender(
baseUri,
VertxGrpcSender.GRPC_LOG_SERVICE_NAME,
determineCompression(logsConfig),
logsConfig.timeout(),
populateTracingExportHttpHeaders(logsConfig),
new HttpClientOptionsConsumer(logsConfig, baseUri, tlsConfigurationRegistry),
vertx.get()),
InternalTelemetryVersion.LATEST,
ComponentId.generateLazy(
StandardComponentId.ExporterType.OTLP_GRPC_LOG_EXPORTER), // use the same as OTel doesView on GitHub (pinned to e1c734241f)
Solutions
- Set `quarkus.otel.exporter.otlp.logs.protocol=http/protobuf`
- Or set it to `grpc` if your collector endpoint speaks gRPC
- If logs export is not wanted, disable it so no protocol is required
Example fix
# before # (no logs protocol configured) # after quarkus.otel.exporter.otlp.logs.protocol=http/protobuf
Defensive patterns
Strategy: validation
Validate before calling
java.util.Optional<String> p = ConfigProvider.getConfig().getOptionalValue("quarkus.otel.exporter.otlp.logs.protocol", String.class);
if (p.isEmpty()) throw new IllegalStateException("Set quarkus.otel.exporter.otlp.logs.protocol (grpc | http/protobuf)"); Type guard
static boolean logsProtocolConfigured(java.util.Optional<String> p) {
return p != null && p.isPresent() && !p.get().isBlank();
} Try / catch
try {
app.start();
} catch (IllegalStateException e) {
if (String.valueOf(e.getMessage()).contains("No OTLP protocol specified")) {
LOG.error("Add quarkus.otel.exporter.otlp.logs.protocol=http/protobuf");
}
} Prevention
- When enabling OTLP logs, always set the protocol property in the same change
- Mirror the protocol already used for traces/metrics
- Use Quarkus config validation / dev mode config warnings
When it happens
Trigger: OTLP log export is enabled but `quarkus.otel.exporter.otlp.logs.protocol` is not set (or set to empty) in configuration.
Common situations: Adding the OpenTelemetry extension and enabling logs without completing the exporter config; migrating config where the logs protocol was omitted while the metrics/traces protocol existed; assuming a default that does not exist.
Understand the failure class
Background: "X is required", "must be set", "cannot be empty": the missing-required-config error family, from Vertex AI project/location to WeChat keys — this error's family across 18 libraries.
Related errors
- Unsupported OTLP protocol %s specified. Please check `quarku
- Unsupported OTLP protocol %s specified. Please check `quarku
- Unable to create instance of Logging Filter ''
- Only one handler can be configured with the same name '%s'
- Unable to install OTLP Exporter
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/a3d0a27cc2cce80b.
Report an issue: GitHub.