{"record":{"id":"1a22b11aef4fc5f4","repo":"kestra-io/kestra","slug":"no-log-store-configured-through-the-application-pr","errorCode":null,"errorMessage":"No log store configured through the application property '%s' (nor a fallback '%s'). Supported types are: %s","messagePattern":"No log store configured through the application property '(.+?)' \\(nor a fallback '(.+?)'\\)\\. Supported types are: (.+?)","errorType":"exception","errorClass":"KestraRuntimeException","httpStatus":null,"severity":"critical","filePath":"core/src/main/java/io/kestra/core/contexts/KestraBeansFactory.java","lineNumber":109,"sourceCode":"        final ApplicationContext applicationContext) {\n        return new LogDataStoreInterfaceFactory(pluginRegistry, validator, applicationContext);\n    }\n\n    @Requires(property = \"kestra.server-type\", notEquals = \"WORKER\")\n    @Singleton\n    public LogDataStoreInterface logDataStore(final LogDataStoreInterfaceFactory logDataStoreInterfaceFactory) {\n        String pluginId = getLogDataStorePluginId(logDataStoreInterfaceFactory);\n        return logDataStoreInterfaceFactory.make(pluginId, logsConfig.getLogConfig(pluginId));\n    }\n\n    /**\n     * Resolves the configured log data store type, falling back to {@code kestra.repository.type} so\n     * that existing installs (no {@code kestra.logs.type}) keep storing logs in the main database.\n     */\n    public String getLogDataStorePluginId(LogDataStoreInterfaceFactory logDataStoreInterfaceFactory) {\n        String type = logsConfig.type().orElse(repositoryConfiguration.type());\n        if (type == null) {\n            throw new KestraRuntimeException(\n                String.format(\n                    \"No log store configured through the application property '%s' (nor a fallback '%s'). Supported types are: %s\",\n                    KESTRA_LOGS_TYPE_CONFIG, \"kestra.repository.type\", logDataStoreInterfaceFactory.getLoggableTypeIds()\n                )\n            );\n        }\n        // The in-memory backend is H2 with an in-memory datasource.\n        return \"memory\".equalsIgnoreCase(type) ? \"h2\" : type;\n    }\n\n    @ConfigurationProperties(\"kestra\")\n    public record StorageConfig(\n        @Nullable\n        @MapFormat(keyFormat = StringConvention.CAMEL_CASE, transformation = MapFormat.MapTransformation.NESTED) Map<String, Object> storage) {\n\n        /**\n         * Returns the configuration for the configured storage.\n         *","sourceCodeStart":91,"sourceCodeEnd":127,"githubUrl":"https://github.com/kestra-io/kestra/blob/823fada9274c4f9c251ea0a516460a4f7d958032/core/src/main/java/io/kestra/core/contexts/KestraBeansFactory.java#L91-L127","documentation":"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.","triggerScenarios":"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().","commonSituations":"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.","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."],"exampleFix":"# before (no storage type)\n# kestra:\n#   repository:\n#     type:\n# after\nkestra:\n  repository:\n    type: postgres","handlingStrategy":"validation","validationCode":"String type = logsConfig.type().orElse(repositoryConfiguration.type());\nif (type == null) {\n  throw new IllegalStateException('Configure kestra.repository.type or kestra.logs.type before startup');\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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."],"tags":["configuration","logs","bootstrap","repository","startup"],"backgroundTag":null,"analyzedSha":"823fada9274c4f9c251ea0a516460a4f7d958032","analyzedAt":"2026-08-14T06:15:17.947Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}