kestra-io/kestra · critical · KestraRuntimeException
No log store configured through the application property '%s
Error message
No log store configured through the application property '%s' (nor a fallback '%s'). Supported types are: %s
What it means
Thrown by KestraBeansFactory when no log data-store backend is configured. It reads kestra.logs.type, falling back to kestra.repository.type; if both are null it cannot construct a LogDataStoreInterface and throws KestraRuntimeException listing the config property names and the supported type ids. This is a bootstrap/configuration error that prevents application startup.
Source
Thrown at core/src/main/java/io/kestra/core/contexts/KestraBeansFactory.java:109
final ApplicationContext applicationContext) {
return new LogDataStoreInterfaceFactory(pluginRegistry, validator, applicationContext);
}
@Requires(property = "kestra.server-type", notEquals = "WORKER")
@Singleton
public LogDataStoreInterface logDataStore(final LogDataStoreInterfaceFactory logDataStoreInterfaceFactory) {
String pluginId = getLogDataStorePluginId(logDataStoreInterfaceFactory);
return logDataStoreInterfaceFactory.make(pluginId, logsConfig.getLogConfig(pluginId));
}
/**
* Resolves the configured log data store type, falling back to {@code kestra.repository.type} so
* that existing installs (no {@code kestra.logs.type}) keep storing logs in the main database.
*/
public String getLogDataStorePluginId(LogDataStoreInterfaceFactory logDataStoreInterfaceFactory) {
String type = logsConfig.type().orElse(repositoryConfiguration.type());
if (type == null) {
throw new KestraRuntimeException(
String.format(
"No log store configured through the application property '%s' (nor a fallback '%s'). Supported types are: %s",
KESTRA_LOGS_TYPE_CONFIG, "kestra.repository.type", logDataStoreInterfaceFactory.getLoggableTypeIds()
)
);
}
// The in-memory backend is H2 with an in-memory datasource.
return "memory".equalsIgnoreCase(type) ? "h2" : type;
}
@ConfigurationProperties("kestra")
public record StorageConfig(
@Nullable
@MapFormat(keyFormat = StringConvention.CAMEL_CASE, transformation = MapFormat.MapTransformation.NESTED) Map<String, Object> storage) {
/**
* Returns the configuration for the configured storage.
*View on GitHub (pinned to 823fada927)
Solutions
- Set kestra.repository.type to a supported value (e.g. h2, postgres, mysql, elasticsearch) in application.yml.
- Or set kestra.logs.type explicitly to decouple logs from the main repository.
- Use the 'memory' alias for local H2/testing (it maps to the h2 backend).
- Cross-check the value against getLoggableTypeIds() in the exception message to avoid typos.
Example fix
# before (no storage type)
# kestra:
# repository:
# type:
# after
kestra:
repository:
type: postgres Defensive patterns
Strategy: validation
Validate before calling
String type = logsConfig.type().orElse(repositoryConfiguration.type());
if (type == null) {
throw new IllegalStateException('Configure kestra.repository.type or kestra.logs.type before startup');
} Prevention
- Always set kestra.repository.type (or kestra.logs.type) in application.yml.
- Validate config with a startup check in CI before deploying.
- Keep profile-specific configs in sync so storage type is never blank.
When it happens
Trigger: getLogDataStorePluginId reads logsConfig.type() = empty and repositoryConfiguration.type() = null; the null branch throws KestraRuntimeException formatted with KESTRA_LOGS_TYPE_CONFIG, 'kestra.repository.type', and the factory's getLoggableTypeIds().
Common situations: Fresh install with incomplete application.yml (no repository type set), a config migration that removed kestra.repository.type without adding kestra.logs.type, env-var override blanking the value, or a profile that omits storage config.
Related errors
- Both username and password must be provided if either is pre
- {} not started in time
- Missing required options '--plugins' or environment variable
- Missing required options '--plugins' or environment variable
- Tenant id can only be 'main'
AI-assisted analysis of kestra-io/kestra@823fada927 (2026-08-14).
Data as JSON: /api/errors/1a22b11aef4fc5f4.
Report an issue: GitHub.