From 75fe068a985d0aa5acec8d67e6aa4d943c97fe5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Jerna=C5=9B?= Date: Wed, 8 Oct 2025 20:13:33 +0200 Subject: [PATCH] Avoid string concatenation in logging calls MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Łukasz Jernaś --- .../ai/bedrock/api/AbstractBedrockApi.java | 6 +++--- .../ai/transformer/splitter/TextSplitter.java | 2 +- .../java/org/springframework/ai/retry/RetryUtils.java | 4 ++-- .../ai/vectorstore/azure/AzureVectorStore.java | 2 +- .../ai/chroma/vectorstore/ChromaVectorStore.java | 2 +- .../ai/vectorstore/mariadb/MariaDBSchemaValidator.java | 4 ++-- .../ai/vectorstore/mariadb/MariaDBVectorStore.java | 2 +- .../ai/vectorstore/milvus/MilvusVectorStore.java | 7 ++++--- .../mongodb/atlas/MongoDBAtlasVectorStore.java | 2 +- .../vectorstore/opensearch/OpenSearchVectorStore.java | 2 +- .../ai/vectorstore/oracle/OracleVectorStore.java | 10 +++++----- .../vectorstore/pgvector/PgVectorSchemaValidator.java | 2 +- .../ai/vectorstore/typesense/TypesenseVectorStore.java | 5 +++-- 13 files changed, 26 insertions(+), 24 deletions(-) diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/api/AbstractBedrockApi.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/api/AbstractBedrockApi.java index e062570d0e9..a1236b4c406 100644 --- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/api/AbstractBedrockApi.java +++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/api/AbstractBedrockApi.java @@ -287,7 +287,7 @@ protected Flux internalInvocationStream(I request, Class clazz) { .builder() .onChunk(chunk -> { try { - logger.debug("Received chunk: " + chunk.bytes().asString(StandardCharsets.UTF_8)); + logger.debug("Received chunk: {}", chunk.bytes().asString(StandardCharsets.UTF_8)); SO response = this.objectMapper.readValue(chunk.bytes().asByteArray(), clazz); eventSink.emitNext(response, DEFAULT_EMIT_FAILURE_HANDLER); } @@ -297,7 +297,7 @@ protected Flux internalInvocationStream(I request, Class clazz) { } }) .onDefault(event -> { - logger.error("Unknown or unhandled event: " + event.toString()); + logger.error("Unknown or unhandled event: {}", event.toString()); eventSink.emitError(new Throwable("Unknown or unhandled event: " + event.toString()), DEFAULT_EMIT_FAILURE_HANDLER); }) .build(); @@ -310,7 +310,7 @@ protected Flux internalInvocationStream(I request, Class clazz) { logger.info("Completed streaming response."); }) .onError(error -> { - logger.error("\n\nError streaming response: " + error.getMessage()); + logger.error("\n\nError streaming response: {}", error.getMessage()); eventSink.emitError(error, DEFAULT_EMIT_FAILURE_HANDLER); }) .onEventStream(stream -> stream.subscribe( diff --git a/spring-ai-commons/src/main/java/org/springframework/ai/transformer/splitter/TextSplitter.java b/spring-ai-commons/src/main/java/org/springframework/ai/transformer/splitter/TextSplitter.java index 793c3fb7589..9d2dc8dca51 100644 --- a/spring-ai-commons/src/main/java/org/springframework/ai/transformer/splitter/TextSplitter.java +++ b/spring-ai-commons/src/main/java/org/springframework/ai/transformer/splitter/TextSplitter.java @@ -84,7 +84,7 @@ private List createDocuments(List texts, List metadata = metadataList.get(i); List chunks = splitText(text); if (chunks.size() > 1) { - logger.info("Splitting up document into " + chunks.size() + " chunks."); + logger.info("Splitting up document into {} chunks.", chunks.size()); } for (String chunk : chunks) { // only primitive values are in here - diff --git a/spring-ai-retry/src/main/java/org/springframework/ai/retry/RetryUtils.java b/spring-ai-retry/src/main/java/org/springframework/ai/retry/RetryUtils.java index fcbec3fb346..312a7aa9569 100644 --- a/spring-ai-retry/src/main/java/org/springframework/ai/retry/RetryUtils.java +++ b/spring-ai-retry/src/main/java/org/springframework/ai/retry/RetryUtils.java @@ -88,7 +88,7 @@ public void handleError(@NonNull ClientHttpResponse response) throws IOException @Override public void onError(RetryContext context, RetryCallback callback, Throwable throwable) { - logger.warn("Retry error. Retry count:" + context.getRetryCount(), throwable); + logger.warn("Retry error. Retry count:{}", context.getRetryCount(), throwable); } }) .build(); @@ -107,7 +107,7 @@ public void onError(RetryContext context @Override public void onError(RetryContext context, RetryCallback callback, Throwable throwable) { - logger.warn("Retry error. Retry count:" + context.getRetryCount()); + logger.warn("Retry error. Retry count:{}", context.getRetryCount()); } }) .build(); diff --git a/vector-stores/spring-ai-azure-store/src/main/java/org/springframework/ai/vectorstore/azure/AzureVectorStore.java b/vector-stores/spring-ai-azure-store/src/main/java/org/springframework/ai/vectorstore/azure/AzureVectorStore.java index 42b0d5ed39c..4ef85c4d24d 100644 --- a/vector-stores/spring-ai-azure-store/src/main/java/org/springframework/ai/vectorstore/azure/AzureVectorStore.java +++ b/vector-stores/spring-ai-azure-store/src/main/java/org/springframework/ai/vectorstore/azure/AzureVectorStore.java @@ -303,7 +303,7 @@ public void afterPropertiesSet() throws Exception { SearchIndex index = this.searchIndexClient.createOrUpdateIndex(searchIndex); - logger.info("Created search index: " + index.getName()); + logger.info("Created search index: {}", index.getName()); this.searchClient = this.searchIndexClient.getSearchClient(this.indexName); } diff --git a/vector-stores/spring-ai-chroma-store/src/main/java/org/springframework/ai/chroma/vectorstore/ChromaVectorStore.java b/vector-stores/spring-ai-chroma-store/src/main/java/org/springframework/ai/chroma/vectorstore/ChromaVectorStore.java index 8421058c24c..bb9468cd285 100644 --- a/vector-stores/spring-ai-chroma-store/src/main/java/org/springframework/ai/chroma/vectorstore/ChromaVectorStore.java +++ b/vector-stores/spring-ai-chroma-store/src/main/java/org/springframework/ai/chroma/vectorstore/ChromaVectorStore.java @@ -189,7 +189,7 @@ protected void doDelete(Filter.Expression expression) { Map whereClause = this.chromaApi.where(whereClauseStr); - logger.debug("Deleting with where clause: " + whereClause); + logger.debug("Deleting with where clause: {}", whereClause); DeleteEmbeddingsRequest deleteRequest = new DeleteEmbeddingsRequest(null, whereClause); this.chromaApi.deleteEmbeddings(this.tenantName, this.databaseName, this.collectionId, deleteRequest); diff --git a/vector-stores/spring-ai-mariadb-store/src/main/java/org/springframework/ai/vectorstore/mariadb/MariaDBSchemaValidator.java b/vector-stores/spring-ai-mariadb-store/src/main/java/org/springframework/ai/vectorstore/mariadb/MariaDBSchemaValidator.java index 82fbc0d68f0..a1baa0cac91 100644 --- a/vector-stores/spring-ai-mariadb-store/src/main/java/org/springframework/ai/vectorstore/mariadb/MariaDBSchemaValidator.java +++ b/vector-stores/spring-ai-mariadb-store/src/main/java/org/springframework/ai/vectorstore/mariadb/MariaDBSchemaValidator.java @@ -72,7 +72,7 @@ void validateTableSchema(String schemaName, String tableName, String idFieldName schemaName, tableName); } catch (DataAccessException e) { - logger.error("Error while validating database vector support " + e.getMessage()); + logger.error("Error while validating database vector support {}", e.getMessage()); logger.error("Failed to validate that database supports VECTOR.\n" + "Run the following SQL commands:\n" + " SELECT @@version; \nAnd ensure that version is >= 11.7.1"); throw new IllegalStateException(e); @@ -118,7 +118,7 @@ void validateTableSchema(String schemaName, String tableName, String idFieldName } catch (DataAccessException | IllegalStateException e) { - logger.error("Error while validating table schema" + e.getMessage()); + logger.error("Error while validating table schema{}", e.getMessage()); logger.error("Failed to operate with the specified table in the database. To resolve this issue," + " please ensure the following steps are completed:\n" + "1. Verify that the table exists with the appropriate structure. If it does not" diff --git a/vector-stores/spring-ai-mariadb-store/src/main/java/org/springframework/ai/vectorstore/mariadb/MariaDBVectorStore.java b/vector-stores/spring-ai-mariadb-store/src/main/java/org/springframework/ai/vectorstore/mariadb/MariaDBVectorStore.java index 86cae3feb58..52981d5faff 100644 --- a/vector-stores/spring-ai-mariadb-store/src/main/java/org/springframework/ai/vectorstore/mariadb/MariaDBVectorStore.java +++ b/vector-stores/spring-ai-mariadb-store/src/main/java/org/springframework/ai/vectorstore/mariadb/MariaDBVectorStore.java @@ -364,7 +364,7 @@ public List doSimilaritySearch(SearchRequest request) { this.idFieldName, this.contentFieldName, this.metadataFieldName, distanceType, this.embeddingFieldName, getFullyQualifiedTableName(), jsonPathFilter); - logger.debug("SQL query: " + sql); + logger.debug("SQL query: {}", sql); return this.jdbcTemplate.query(sql, new DocumentRowMapper(this.objectMapper), embedding, distance, request.getTopK()); diff --git a/vector-stores/spring-ai-milvus-store/src/main/java/org/springframework/ai/vectorstore/milvus/MilvusVectorStore.java b/vector-stores/spring-ai-milvus-store/src/main/java/org/springframework/ai/vectorstore/milvus/MilvusVectorStore.java index d2af691e428..3b710cef329 100644 --- a/vector-stores/spring-ai-milvus-store/src/main/java/org/springframework/ai/vectorstore/milvus/MilvusVectorStore.java +++ b/vector-stores/spring-ai-milvus-store/src/main/java/org/springframework/ai/vectorstore/milvus/MilvusVectorStore.java @@ -292,7 +292,7 @@ public void doDelete(List idList) { long deleteCount = status.getData().getDeleteCnt(); if (deleteCount != idList.size()) { - logger.warn(String.format("Deleted only %s entries from requested %s ", deleteCount, idList.size())); + logger.warn("Deleted only {} entries from requested {} ", deleteCount, idList.size()); } } @@ -544,8 +544,9 @@ int embeddingDimensions() { } } catch (Exception e) { - logger.warn("Failed to obtain the embedding dimensions from the embedding model and fall backs to default:" - + this.embeddingDimension, e); + logger.warn( + "Failed to obtain the embedding dimensions from the embedding model and fall backs to default:{}", + this.embeddingDimension, e); } return OPENAI_EMBEDDING_DIMENSION_SIZE; } diff --git a/vector-stores/spring-ai-mongodb-atlas-store/src/main/java/org/springframework/ai/vectorstore/mongodb/atlas/MongoDBAtlasVectorStore.java b/vector-stores/spring-ai-mongodb-atlas-store/src/main/java/org/springframework/ai/vectorstore/mongodb/atlas/MongoDBAtlasVectorStore.java index c6b515aa60f..5c40ceaf208 100644 --- a/vector-stores/spring-ai-mongodb-atlas-store/src/main/java/org/springframework/ai/vectorstore/mongodb/atlas/MongoDBAtlasVectorStore.java +++ b/vector-stores/spring-ai-mongodb-atlas-store/src/main/java/org/springframework/ai/vectorstore/mongodb/atlas/MongoDBAtlasVectorStore.java @@ -282,7 +282,7 @@ protected void doDelete(Filter.Expression filterExpression) { BasicQuery query = new BasicQuery(nativeFilterExpression); DeleteResult deleteResult = this.mongoTemplate.remove(query, this.collectionName); - logger.debug("Deleted " + deleteResult.getDeletedCount() + " documents matching filter expression"); + logger.debug("Deleted {} documents matching filter expression", deleteResult.getDeletedCount()); } catch (Exception e) { throw new IllegalStateException("Failed to delete documents by filter", e); diff --git a/vector-stores/spring-ai-opensearch-store/src/main/java/org/springframework/ai/vectorstore/opensearch/OpenSearchVectorStore.java b/vector-stores/spring-ai-opensearch-store/src/main/java/org/springframework/ai/vectorstore/opensearch/OpenSearchVectorStore.java index 13a3f59cf6c..8b3f7d687fb 100644 --- a/vector-stores/spring-ai-opensearch-store/src/main/java/org/springframework/ai/vectorstore/opensearch/OpenSearchVectorStore.java +++ b/vector-stores/spring-ai-opensearch-store/src/main/java/org/springframework/ai/vectorstore/opensearch/OpenSearchVectorStore.java @@ -249,7 +249,7 @@ protected void doDelete(Filter.Expression filterExpression) { .build(); DeleteByQueryResponse response = this.openSearchClient.deleteByQuery(request); - logger.debug("Deleted " + response.deleted() + " documents matching filter expression"); + logger.debug("Deleted {} documents matching filter expression", response.deleted()); if (!response.failures().isEmpty()) { throw new IllegalStateException("Failed to delete some documents: " + response.failures()); diff --git a/vector-stores/spring-ai-oracle-store/src/main/java/org/springframework/ai/vectorstore/oracle/OracleVectorStore.java b/vector-stores/spring-ai-oracle-store/src/main/java/org/springframework/ai/vectorstore/oracle/OracleVectorStore.java index 99332f311f0..4f70c74dde6 100644 --- a/vector-stores/spring-ai-oracle-store/src/main/java/org/springframework/ai/vectorstore/oracle/OracleVectorStore.java +++ b/vector-stores/spring-ai-oracle-store/src/main/java/org/springframework/ai/vectorstore/oracle/OracleVectorStore.java @@ -314,10 +314,10 @@ protected void doDelete(Filter.Expression filterExpression) { String jsonPath = this.filterExpressionConverter.convertExpression(filterExpression); String sql = String.format("DELETE FROM %s WHERE JSON_EXISTS(metadata, '%s')", this.tableName, jsonPath); - logger.debug("Executing delete with filter: " + sql); + logger.debug("Executing delete with filter: {}", sql); int deletedCount = this.jdbcTemplate.update(sql); - logger.debug("Deleted " + deletedCount + " documents matching filter expression"); + logger.debug("Deleted {} documents matching filter expression", deletedCount); } catch (Exception e) { logger.error("Failed to delete documents by filter: {}", e.getMessage(), e); @@ -378,7 +378,7 @@ public int getBatchSize() { this.distanceType == OracleVectorStore.OracleVectorStoreDistanceType.DOT ? ")/2" : "", this.tableName, jsonPathFilter, request.getTopK(), this.searchAccuracy); - logger.debug("SQL query: " + sql); + logger.debug("SQL query: {}", sql); return this.jdbcTemplate.query(sql, new DocumentRowMapper(), embeddingVector); } @@ -397,7 +397,7 @@ else if (request.getSimilarityThreshold() == SIMILARITY_THRESHOLD_EXACT_MATCH) { this.distanceType == OracleVectorStore.OracleVectorStoreDistanceType.DOT ? ")/2" : "", this.tableName, jsonPathFilter, request.getTopK()); - logger.debug("SQL query: " + sql); + logger.debug("SQL query: {}", sql); return this.jdbcTemplate.query(sql, new DocumentRowMapper(), embeddingVector); } @@ -453,7 +453,7 @@ where VECTOR_DISTANCE(embedding, ?, COSINE) <= ?%s fetch APPROXIMATE first %d rows only WITH TARGET ACCURACY %d""", this.tableName, jsonPathFilter, request.getTopK(), this.searchAccuracy)); - logger.debug("SQL query: " + sql); + logger.debug("SQL query: {}", sql); return this.jdbcTemplate.query(sql, new DocumentRowMapper(), embeddingVector, embeddingVector, distance); diff --git a/vector-stores/spring-ai-pgvector-store/src/main/java/org/springframework/ai/vectorstore/pgvector/PgVectorSchemaValidator.java b/vector-stores/spring-ai-pgvector-store/src/main/java/org/springframework/ai/vectorstore/pgvector/PgVectorSchemaValidator.java index f0c5951676b..80e79531fbb 100644 --- a/vector-stores/spring-ai-pgvector-store/src/main/java/org/springframework/ai/vectorstore/pgvector/PgVectorSchemaValidator.java +++ b/vector-stores/spring-ai-pgvector-store/src/main/java/org/springframework/ai/vectorstore/pgvector/PgVectorSchemaValidator.java @@ -131,7 +131,7 @@ void validateTableSchema(String schemaName, String tableName) { } catch (DataAccessException | IllegalStateException e) { - logger.error("Error while validating table schema" + e.getMessage()); + logger.error("Error while validating table schema{}", e.getMessage()); logger .error("Failed to operate with the specified table in the database. To resolve this issue, please ensure the following steps are completed:\n" + "1. Ensure the necessary PostgreSQL extensions are enabled. Run the following SQL commands:\n" diff --git a/vector-stores/spring-ai-typesense-store/src/main/java/org/springframework/ai/vectorstore/typesense/TypesenseVectorStore.java b/vector-stores/spring-ai-typesense-store/src/main/java/org/springframework/ai/vectorstore/typesense/TypesenseVectorStore.java index 21cad303c11..caeed19b54c 100644 --- a/vector-stores/spring-ai-typesense-store/src/main/java/org/springframework/ai/vectorstore/typesense/TypesenseVectorStore.java +++ b/vector-stores/spring-ai-typesense-store/src/main/java/org/springframework/ai/vectorstore/typesense/TypesenseVectorStore.java @@ -283,8 +283,9 @@ int embeddingDimensions() { } } catch (Exception e) { - logger.warn("Failed to obtain the embedding dimensions from the embedding model and fall backs to default:" - + this.embeddingDimension, e); + logger.warn( + "Failed to obtain the embedding dimensions from the embedding model and fall backs to default:{}", + this.embeddingDimension, e); } return OPENAI_EMBEDDING_DIMENSION_SIZE; }