You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by sz...@apache.org on 2023/10/18 09:45:03 UTC
[nifi-minifi-cpp] 02/03: MINIFICPP-2220 Change core::logging::Logger to use fmt format
This is an automated email from the ASF dual-hosted git repository.
szaszm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
commit 4383de650821ef00e5abf4312ca1e38c63b1e28a
Author: Martin Zink <ma...@apache.org>
AuthorDate: Wed Oct 18 11:16:07 2023 +0200
MINIFICPP-2220 Change core::logging::Logger to use fmt format
Closes #1670
Signed-off-by: Marton Szasz <sz...@apache.org>
---
controller/MiNiFiController.cpp | 2 +-
extensions/aws/processors/DeleteS3Object.cpp | 8 +-
extensions/aws/processors/FetchS3Object.cpp | 10 +-
extensions/aws/processors/ListS3.cpp | 24 +--
extensions/aws/processors/PutS3Object.cpp | 48 ++---
extensions/aws/processors/S3Processor.cpp | 14 +-
extensions/aws/s3/MultipartUploadStateStorage.cpp | 8 +-
extensions/aws/s3/S3ClientRequestSender.cpp | 50 ++---
extensions/aws/s3/S3Wrapper.cpp | 24 +--
extensions/aws/s3/S3Wrapper.h | 2 +-
extensions/aws/utils/AWSSdkLogger.cpp | 81 ++++----
.../processors/AzureBlobStorageProcessorBase.cpp | 2 +-
.../AzureDataLakeStorageProcessorBase.cpp | 2 +-
.../azure/processors/AzureStorageProcessorBase.cpp | 4 +-
.../azure/processors/DeleteAzureBlobStorage.cpp | 4 +-
.../processors/DeleteAzureDataLakeStorage.cpp | 4 +-
.../azure/processors/FetchAzureBlobStorage.cpp | 8 +-
.../azure/processors/FetchAzureDataLakeStorage.cpp | 10 +-
.../azure/processors/ListAzureBlobStorage.cpp | 4 +-
.../azure/processors/ListAzureDataLakeStorage.cpp | 4 +-
.../azure/processors/PutAzureBlobStorage.cpp | 4 +-
.../azure/processors/PutAzureDataLakeStorage.cpp | 8 +-
extensions/azure/storage/AzureBlobStorage.cpp | 14 +-
extensions/azure/storage/AzureDataLakeStorage.cpp | 12 +-
extensions/azure/utils/AzureSdkLogger.cpp | 8 +-
extensions/bustache/ApplyTemplate.cpp | 2 +-
extensions/civetweb/processors/ListenHTTP.cpp | 48 ++---
extensions/civetweb/processors/ListenHTTP.h | 4 +-
extensions/civetweb/protocols/RESTReceiver.cpp | 2 +-
extensions/coap/COAPLoader.cpp | 2 +-
extensions/coap/protocols/CoapC2Protocol.cpp | 14 +-
extensions/coap/protocols/CoapC2Protocol.h | 2 +-
extensions/elasticsearch/PostElasticsearch.cpp | 6 +-
.../expression-language/ProcessContextExpr.cpp | 8 +-
.../GCPCredentialsControllerService.cpp | 13 +-
extensions/gcp/processors/DeleteGCSObject.cpp | 4 +-
extensions/gcp/processors/FetchGCSObject.cpp | 4 +-
extensions/gcp/processors/GCSProcessor.cpp | 2 +-
extensions/gcp/processors/ListGCSBucket.cpp | 2 +-
extensions/gcp/processors/PutGCSObject.cpp | 2 +-
extensions/gps/GetGPS.cpp | 4 +-
extensions/http-curl/client/HTTPCallback.h | 16 +-
extensions/http-curl/client/HTTPClient.cpp | 28 ++-
extensions/http-curl/client/HTTPStream.h | 2 +-
extensions/http-curl/processors/InvokeHTTP.cpp | 18 +-
extensions/http-curl/protocols/RESTSender.cpp | 14 +-
extensions/http-curl/sitetosite/HTTPProtocol.cpp | 28 +--
extensions/http-curl/sitetosite/HTTPProtocol.h | 4 +-
extensions/http-curl/sitetosite/PeersEntity.h | 25 +--
.../http-curl/tests/C2PropertiesUpdateTests.cpp | 2 +-
extensions/http-curl/tests/C2UpdateAssetTest.cpp | 8 +-
extensions/http-curl/tests/SiteToSiteRestTest.cpp | 4 +-
.../http-curl/tests/VerifyInvokeHTTPGetTest.cpp | 2 +-
.../http-curl/tests/VerifyInvokeHTTPPostTest.cpp | 4 +-
extensions/jni/ExecuteJavaProcessor.cpp | 4 +-
extensions/jni/JVMCreator.h | 2 +-
extensions/jni/jvm/JniLogger.cpp | 10 +-
.../org/apache/nifi/processor/JniClassLoader.java | 2 +-
.../KubernetesControllerService.cpp | 6 +-
.../processors/CollectKubernetesPodMetrics.cpp | 6 +-
extensions/libarchive/ArchiveStreamProvider.cpp | 2 +-
extensions/libarchive/BinFiles.cpp | 36 ++--
extensions/libarchive/BinFiles.h | 7 +-
extensions/libarchive/CompressContent.cpp | 16 +-
extensions/libarchive/FocusArchiveEntry.cpp | 20 +-
extensions/libarchive/ManipulateArchive.cpp | 18 +-
extensions/libarchive/MergeContent.cpp | 28 +--
extensions/libarchive/MergeContent.h | 2 +-
extensions/libarchive/ReadArchiveStream.cpp | 12 +-
extensions/libarchive/UnfocusArchiveEntry.cpp | 16 +-
extensions/libarchive/WriteArchiveStream.cpp | 24 +--
extensions/librdkafka/ConsumeKafka.cpp | 22 +-
extensions/librdkafka/KafkaConnection.cpp | 14 +-
extensions/librdkafka/KafkaProcessorBase.cpp | 18 +-
extensions/librdkafka/PublishKafka.cpp | 80 ++++----
extensions/librdkafka/rdkafka_utils.cpp | 6 +-
.../database/ColumnHandle.cpp => lua/LuaLogger.h} | 25 ++-
extensions/lua/LuaScriptEngine.cpp | 8 +-
extensions/lua/LuaScriptEngine.h | 2 +
.../mqtt/processors/AbstractMQTTProcessor.cpp | 82 ++++----
extensions/mqtt/processors/ConsumeMQTT.cpp | 48 ++---
extensions/mqtt/processors/PublishMQTT.cpp | 28 +--
extensions/opc/src/fetchopc.cpp | 11 +-
extensions/opc/src/opc.cpp | 14 +-
extensions/opc/src/opcbase.cpp | 2 +-
extensions/opc/src/putopc.cpp | 26 ++-
extensions/opencv/CaptureRTSPFrame.cpp | 2 +-
extensions/opencv/MotionDetector.cpp | 2 +-
.../SourceInitiatedSubscriptionListener.cpp | 57 +++---
extensions/pcap/CapturePacket.cpp | 16 +-
extensions/pdh/PerformanceDataMonitor.cpp | 16 +-
extensions/procfs/ProcFs.cpp | 8 +-
extensions/procfs/processors/ProcFsMonitor.cpp | 4 +-
extensions/prometheus/PrometheusExposerWrapper.cpp | 2 +-
.../prometheus/PrometheusMetricsPublisher.cpp | 4 +-
extensions/python/PythonCreator.h | 4 +-
extensions/python/tests/CMakeLists.txt | 4 +-
extensions/python/types/PyLogger.cpp | 10 +-
extensions/python/types/PyStateManager.cpp | 6 +-
.../rocksdb-repos/DatabaseContentRepository.cpp | 36 ++--
extensions/rocksdb-repos/FlowFileLoader.cpp | 8 +-
extensions/rocksdb-repos/FlowFileRepository.cpp | 26 +--
extensions/rocksdb-repos/ProvenanceRepository.cpp | 11 +-
extensions/rocksdb-repos/RocksDbRepository.cpp | 2 +-
.../controllers/RocksDbStateStorage.cpp | 24 +--
extensions/rocksdb-repos/database/ColumnHandle.cpp | 2 +-
extensions/rocksdb-repos/database/DbHandle.cpp | 2 +-
.../rocksdb-repos/database/RocksDatabase.cpp | 14 +-
.../rocksdb-repos/database/RocksDbInstance.cpp | 24 +--
.../encryption/RocksDbEncryptionProvider.cpp | 4 +-
extensions/sftp/client/SFTPClient.cpp | 82 ++++----
extensions/sftp/processors/FetchSFTP.cpp | 8 +-
extensions/sftp/processors/ListSFTP.cpp | 92 +++++----
extensions/sftp/processors/PutSFTP.cpp | 32 +--
extensions/sftp/processors/SFTPProcessorBase.cpp | 30 +--
extensions/sftp/tests/tools/SFTPTestServer.cpp | 14 +-
extensions/smb/FetchSmb.cpp | 2 +-
extensions/smb/ListSmb.cpp | 6 +-
extensions/smb/PutSmb.cpp | 8 +-
extensions/sql/data/SociConnectors.cpp | 4 +-
extensions/sql/processors/ExecuteSQL.cpp | 2 +-
extensions/sql/processors/PutSQL.cpp | 2 +-
extensions/sql/processors/QueryDatabaseTable.cpp | 14 +-
extensions/sql/processors/SQLProcessor.cpp | 2 +-
.../controllers/InMemoryKeyValueStorage.cpp | 2 +-
.../controllers/PersistentMapStateStorage.cpp | 24 +--
.../processors/AttributesToJSON.cpp | 4 +-
.../processors/DefragmentText.cpp | 6 +-
.../processors/ExecuteProcess.cpp | 14 +-
.../standard-processors/processors/ExtractText.cpp | 2 +-
.../standard-processors/processors/FetchFile.cpp | 22 +-
.../processors/GenerateFlowFile.cpp | 6 +-
.../standard-processors/processors/GetFile.cpp | 18 +-
.../standard-processors/processors/GetTCP.cpp | 8 +-
.../standard-processors/processors/ListFile.cpp | 8 +-
.../processors/LogAttribute.cpp | 18 +-
.../processors/NetworkListenerProcessor.cpp | 4 +-
.../standard-processors/processors/PutFile.cpp | 12 +-
.../standard-processors/processors/PutTCP.cpp | 18 +-
.../standard-processors/processors/PutUDP.cpp | 11 +-
.../standard-processors/processors/ReplaceText.cpp | 16 +-
.../processors/RetryFlowFile.cpp | 14 +-
.../processors/RouteOnAttribute.cpp | 4 +-
.../standard-processors/processors/RouteText.cpp | 2 +-
.../standard-processors/processors/TailFile.cpp | 52 ++---
.../standard-processors/processors/TailFile.h | 3 +
.../processors/UpdateAttribute.cpp | 8 +-
.../standard-processors/tests/unit/PutTCPTests.cpp | 2 +-
extensions/systemd/ConsumeJournald.cpp | 2 +-
extensions/test-processors/KamikazeProcessor.cpp | 6 +-
extensions/usb-camera/GetUSBCamera.cpp | 48 ++---
extensions/windows-event-log/Bookmark.cpp | 12 +-
extensions/windows-event-log/Bookmark.h | 2 +-
.../CollectorInitiatedSubscription.cpp | 40 ++--
.../windows-event-log/ConsumeWindowsEventLog.cpp | 64 +++---
.../windows-event-log/ConsumeWindowsEventLog.h | 3 +-
extensions/windows-event-log/TailEventLog.cpp | 23 +--
extensions/windows-event-log/TailEventLog.h | 18 --
libminifi/include/RemoteProcessorGroupPort.h | 4 +-
libminifi/include/c2/triggers/FileUpdateTrigger.h | 2 +-
libminifi/include/core/ClassLoader.h | 8 +-
libminifi/include/core/ConfigurableComponent.h | 8 +-
libminifi/include/core/ProcessContext.h | 2 +-
libminifi/include/core/ThreadedRepository.h | 6 +-
libminifi/include/core/TypedValues.h | 2 +-
.../controller/StandardControllerServiceProvider.h | 16 +-
libminifi/include/core/extension/Utils.h | 2 +-
libminifi/include/core/logging/Logger.h | 222 ++++++++-------------
libminifi/include/sitetosite/RawSocketProtocol.h | 2 +-
libminifi/include/utils/LogUtils.h | 47 +++--
libminifi/include/utils/ResourceQueue.h | 12 +-
libminifi/include/utils/SmallString.h | 28 ++-
libminifi/include/utils/crypto/ciphers/Aes256Ecb.h | 6 +-
libminifi/include/utils/file/FileUtils.h | 14 +-
libminifi/include/utils/net/AsioSocketUtils.h | 14 +-
libminifi/src/Configure.cpp | 4 +-
libminifi/src/Connection.cpp | 30 +--
libminifi/src/DiskSpaceWatchdog.cpp | 4 +-
libminifi/src/FlowController.cpp | 16 +-
libminifi/src/FlowFileRecord.cpp | 10 +-
libminifi/src/ForwardingNode.cpp | 2 +-
libminifi/src/RemoteProcessorGroupPort.cpp | 26 +--
libminifi/src/ResourceClaim.cpp | 4 +-
libminifi/src/RootProcessGroupWrapper.cpp | 6 +-
libminifi/src/SchedulingAgent.cpp | 10 +-
libminifi/src/ThreadedSchedulingAgent.cpp | 16 +-
libminifi/src/c2/C2Agent.cpp | 60 +++---
libminifi/src/c2/C2MetricsPublisher.cpp | 8 +-
libminifi/src/c2/ControllerSocketProtocol.cpp | 10 +-
libminifi/src/c2/HeartbeatLogger.cpp | 2 +-
libminifi/src/c2/protocols/RESTProtocol.cpp | 2 +-
.../controllers/LinuxPowerManagementService.cpp | 4 +-
.../src/controllers/NetworkPrioritizerService.cpp | 10 +-
libminifi/src/controllers/SSLContextService.cpp | 80 ++++----
.../src/controllers/keyvalue/AutoPersistor.cpp | 2 +-
.../controllers/keyvalue/KeyValueStateStorage.cpp | 2 +-
libminifi/src/core/ConfigurableComponent.cpp | 28 +--
libminifi/src/core/Connectable.cpp | 8 +-
libminifi/src/core/FlowConfiguration.cpp | 10 +-
libminifi/src/core/FlowFile.cpp | 2 +-
libminifi/src/core/ProcessGroup.cpp | 52 ++---
libminifi/src/core/ProcessSession.cpp | 122 +++++------
libminifi/src/core/ProcessSessionReadCallback.cpp | 8 +-
libminifi/src/core/Processor.cpp | 28 +--
libminifi/src/core/Repository.cpp | 2 +-
.../controller/StandardControllerServiceNode.cpp | 2 +-
libminifi/src/core/extension/DynamicLibrary.cpp | 12 +-
libminifi/src/core/extension/Extension.cpp | 18 +-
libminifi/src/core/extension/ExtensionManager.cpp | 6 +-
libminifi/src/core/extension/Module.cpp | 35 ++--
libminifi/src/core/flow/AdaptiveConfiguration.cpp | 4 +-
.../src/core/flow/StructuredConfiguration.cpp | 124 ++++++------
.../src/core/flow/StructuredConnectionParser.cpp | 38 ++--
libminifi/src/core/logging/Logger.cpp | 81 +-------
libminifi/src/core/logging/LoggerConfiguration.cpp | 9 +-
libminifi/src/core/logging/alert/AlertSink.cpp | 24 +--
.../core/logging/internal/CompressionManager.cpp | 2 +-
.../SiteToSiteProvenanceReportingTask.cpp | 4 +-
.../src/core/repository/FileSystemRepository.cpp | 12 +-
.../core/repository/VolatileContentRepository.cpp | 18 +-
.../src/core/repository/VolatileRepository.cpp | 8 +-
libminifi/src/core/state/LogMetricsPublisher.cpp | 10 +-
.../src/core/state/nodes/ResponseNodeLoader.cpp | 5 +-
libminifi/src/core/yaml/YamlConfiguration.cpp | 2 +-
libminifi/src/io/FileStream.cpp | 35 ++--
libminifi/src/io/ZlibStream.cpp | 39 ++--
libminifi/src/properties/Properties.cpp | 20 +-
libminifi/src/provenance/Provenance.cpp | 8 +-
libminifi/src/sitetosite/RawSocketProtocol.cpp | 67 +++----
libminifi/src/sitetosite/SiteToSiteClient.cpp | 80 ++++----
libminifi/src/utils/BaseHTTPClient.cpp | 12 +-
libminifi/src/utils/FlowFileQueue.cpp | 6 +-
libminifi/src/utils/Id.cpp | 24 +--
libminifi/src/utils/ListingStateManager.cpp | 4 +-
libminifi/src/utils/NetworkInterfaceInfo.cpp | 6 +-
libminifi/src/utils/crypto/EncryptionManager.cpp | 8 +-
libminifi/src/utils/crypto/ciphers/Aes256Ecb.cpp | 6 +-
libminifi/src/utils/file/FileReaderCallback.cpp | 6 +-
libminifi/src/utils/file/FileSystem.cpp | 10 +-
libminifi/src/utils/net/AsioSocketUtils.cpp | 10 +-
libminifi/src/utils/net/Ssl.cpp | 4 +-
libminifi/src/utils/net/TcpServer.cpp | 14 +-
libminifi/src/utils/net/UdpServer.cpp | 2 +-
libminifi/src/utils/tls/ExtendedKeyUsage.cpp | 2 +-
libminifi/test/ReadFromFlowFileTestProcessor.cpp | 6 +-
libminifi/test/TestBase.cpp | 25 ++-
libminifi/test/TestBase.h | 1 +
libminifi/test/WriteToFlowFileTestProcessor.cpp | 6 +-
libminifi/test/flow-tests/FlowControllerTests.cpp | 12 +-
.../integration/StateTransactionalityTests.cpp | 3 +-
libminifi/test/unit/IdTests.cpp | 6 +-
libminifi/test/unit/LogMetricsPublisherTests.cpp | 2 +-
libminifi/test/unit/LoggerTests.cpp | 60 ++++--
minifi_main/MainHelper.cpp | 16 +-
minifi_main/MiNiFiMain.cpp | 12 +-
minifi_main/MiNiFiWindowsService.cpp | 62 +++---
nanofi/src/cxx/Plan.cpp | 5 +-
nanofi/src/sitetosite/CRawSocketProtocol.c | 2 +-
258 files changed, 2046 insertions(+), 2224 deletions(-)
diff --git a/controller/MiNiFiController.cpp b/controller/MiNiFiController.cpp
index 30930f676..3975c41f1 100644
--- a/controller/MiNiFiController.cpp
+++ b/controller/MiNiFiController.cpp
@@ -108,7 +108,7 @@ int main(int argc, char **argv) {
try {
socket_data.ssl_context_service = getSSLContextService(configuration);
} catch(const minifi::Exception& ex) {
- logger->log_error(ex.what());
+ logger->log_error("{}", ex.what());
std::exit(1);
}
diff --git a/extensions/aws/processors/DeleteS3Object.cpp b/extensions/aws/processors/DeleteS3Object.cpp
index 0b03849f5..468c58118 100644
--- a/extensions/aws/processors/DeleteS3Object.cpp
+++ b/extensions/aws/processors/DeleteS3Object.cpp
@@ -42,10 +42,10 @@ std::optional<aws::s3::DeleteObjectRequestParameters> DeleteS3Object::buildDelet
logger_->log_error("No Object Key is set and default object key 'filename' attribute could not be found!");
return std::nullopt;
}
- logger_->log_debug("DeleteS3Object: Object Key [%s]", params.object_key);
+ logger_->log_debug("DeleteS3Object: Object Key [{}]", params.object_key);
context->getProperty(Version, params.version, flow_file);
- logger_->log_debug("DeleteS3Object: Version [%s]", params.version);
+ logger_->log_debug("DeleteS3Object: Version [{}]", params.version);
params.bucket = common_properties.bucket;
params.setClientConfig(common_properties.proxy, common_properties.endpoint_override_url);
@@ -73,10 +73,10 @@ void DeleteS3Object::onTrigger(const std::shared_ptr<core::ProcessContext> &cont
}
if (s3_wrapper_.deleteObject(*params)) {
- logger_->log_debug("Successfully deleted S3 object '%s' from bucket '%s'", params->object_key, common_properties->bucket);
+ logger_->log_debug("Successfully deleted S3 object '{}' from bucket '{}'", params->object_key, common_properties->bucket);
session->transfer(flow_file, Success);
} else {
- logger_->log_error("Failed to delete S3 object '%s' from bucket '%s'", params->object_key, common_properties->bucket);
+ logger_->log_error("Failed to delete S3 object '{}' from bucket '{}'", params->object_key, common_properties->bucket);
session->transfer(flow_file, Failure);
}
}
diff --git a/extensions/aws/processors/FetchS3Object.cpp b/extensions/aws/processors/FetchS3Object.cpp
index a2bc62687..b7d8a146a 100644
--- a/extensions/aws/processors/FetchS3Object.cpp
+++ b/extensions/aws/processors/FetchS3Object.cpp
@@ -38,7 +38,7 @@ void FetchS3Object::onSchedule(const std::shared_ptr<core::ProcessContext> &cont
S3Processor::onSchedule(context, sessionFactory);
context->getProperty(RequesterPays, requester_pays_);
- logger_->log_debug("FetchS3Object: RequesterPays [%s]", requester_pays_ ? "true" : "false");
+ logger_->log_debug("FetchS3Object: RequesterPays [{}]", requester_pays_);
}
std::optional<aws::s3::GetObjectRequestParameters> FetchS3Object::buildFetchS3RequestParams(
@@ -55,10 +55,10 @@ std::optional<aws::s3::GetObjectRequestParameters> FetchS3Object::buildFetchS3Re
logger_->log_error("No Object Key is set and default object key 'filename' attribute could not be found!");
return std::nullopt;
}
- logger_->log_debug("FetchS3Object: Object Key [%s]", get_object_params.object_key);
+ logger_->log_debug("FetchS3Object: Object Key [{}]", get_object_params.object_key);
context->getProperty(Version, get_object_params.version, flow_file);
- logger_->log_debug("FetchS3Object: Version [%s]", get_object_params.version);
+ logger_->log_debug("FetchS3Object: Version [{}]", get_object_params.version);
get_object_params.setClientConfig(common_properties.proxy, common_properties.endpoint_override_url);
return get_object_params;
}
@@ -96,7 +96,7 @@ void FetchS3Object::onTrigger(const std::shared_ptr<core::ProcessContext> &conte
}
};
- logger_->log_debug("Successfully fetched S3 object %s from bucket %s", get_object_params->object_key, get_object_params->bucket);
+ logger_->log_debug("Successfully fetched S3 object {} from bucket {}", get_object_params->object_key, get_object_params->bucket);
session->putAttribute(flow_file, "s3.bucket", get_object_params->bucket);
session->putAttribute(flow_file, core::SpecialFlowAttribute::PATH, result->path.generic_string());
session->putAttribute(flow_file, core::SpecialFlowAttribute::ABSOLUTE_PATH, result->absolute_path.generic_string());
@@ -109,7 +109,7 @@ void FetchS3Object::onTrigger(const std::shared_ptr<core::ProcessContext> &conte
putAttributeIfNotEmpty("s3.version", result->version);
session->transfer(flow_file, Success);
} else {
- logger_->log_error("Failed to fetch S3 object %s from bucket %s", get_object_params->object_key, get_object_params->bucket);
+ logger_->log_error("Failed to fetch S3 object {} from bucket {}", get_object_params->object_key, get_object_params->bucket);
session->transfer(flow_file, Failure);
}
}
diff --git a/extensions/aws/processors/ListS3.cpp b/extensions/aws/processors/ListS3.cpp
index e6e74b0b7..d32f9921c 100644
--- a/extensions/aws/processors/ListS3.cpp
+++ b/extensions/aws/processors/ListS3.cpp
@@ -52,29 +52,29 @@ void ListS3::onSchedule(const std::shared_ptr<core::ProcessContext> &context, co
list_request_params_->bucket = common_properties->bucket;
context->getProperty(Delimiter, list_request_params_->delimiter);
- logger_->log_debug("ListS3: Delimiter [%s]", list_request_params_->delimiter);
+ logger_->log_debug("ListS3: Delimiter [{}]", list_request_params_->delimiter);
context->getProperty(Prefix, list_request_params_->prefix);
- logger_->log_debug("ListS3: Prefix [%s]", list_request_params_->prefix);
+ logger_->log_debug("ListS3: Prefix [{}]", list_request_params_->prefix);
context->getProperty(UseVersions, list_request_params_->use_versions);
- logger_->log_debug("ListS3: UseVersions [%s]", list_request_params_->use_versions ? "true" : "false");
+ logger_->log_debug("ListS3: UseVersions [{}]", list_request_params_->use_versions);
if (auto minimum_object_age = context->getProperty<core::TimePeriodValue>(MinimumObjectAge)) {
list_request_params_->min_object_age = minimum_object_age->getMilliseconds().count();
} else {
throw Exception(PROCESS_SCHEDULE_EXCEPTION, "Minimum Object Age missing or invalid");
}
- logger_->log_debug("S3Processor: Minimum Object Age [%llud]", list_request_params_->min_object_age);
+ logger_->log_debug("S3Processor: Minimum Object Age [{}]", list_request_params_->min_object_age);
context->getProperty(WriteObjectTags, write_object_tags_);
- logger_->log_debug("ListS3: WriteObjectTags [%s]", write_object_tags_ ? "true" : "false");
+ logger_->log_debug("ListS3: WriteObjectTags [{}]", write_object_tags_);
context->getProperty(WriteUserMetadata, write_user_metadata_);
- logger_->log_debug("ListS3: WriteUserMetadata [%s]", write_user_metadata_ ? "true" : "false");
+ logger_->log_debug("ListS3: WriteUserMetadata [{}]", write_user_metadata_);
context->getProperty(RequesterPays, requester_pays_);
- logger_->log_debug("ListS3: RequesterPays [%s]", requester_pays_ ? "true" : "false");
+ logger_->log_debug("ListS3: RequesterPays [{}]", requester_pays_);
}
void ListS3::writeObjectTags(
@@ -95,7 +95,7 @@ void ListS3::writeObjectTags(
session.putAttribute(flow_file, "s3.tag." + tag.first, tag.second);
}
} else {
- logger_->log_warn("Failed to get object tags for object %s in bucket %s", object_attributes.filename, params.bucket);
+ logger_->log_warn("Failed to get object tags for object {} in bucket {}", object_attributes.filename, params.bucket);
}
}
@@ -118,7 +118,7 @@ void ListS3::writeUserMetadata(
session.putAttribute(flow_file, "s3.user.metadata." + metadata.first, metadata.second);
}
} else {
- logger_->log_warn("Failed to get object metadata for object %s in bucket %s", params.object_key, params.bucket);
+ logger_->log_warn("Failed to get object metadata for object {} in bucket {}", params.object_key, params.bucket);
}
}
@@ -147,7 +147,7 @@ void ListS3::onTrigger(const std::shared_ptr<core::ProcessContext> &context, con
auto aws_results = s3_wrapper_.listBucket(*list_request_params_);
if (!aws_results) {
- logger_->log_error("Failed to list S3 bucket %s", list_request_params_->bucket);
+ logger_->log_error("Failed to list S3 bucket {}", list_request_params_->bucket);
context->yield();
return;
}
@@ -166,11 +166,11 @@ void ListS3::onTrigger(const std::shared_ptr<core::ProcessContext> &context, con
latest_listing_state.updateState(object_attributes);
}
- logger_->log_debug("ListS3 transferred %zu flow files", files_transferred);
+ logger_->log_debug("ListS3 transferred {} flow files", files_transferred);
state_manager_->storeState(latest_listing_state);
if (files_transferred == 0) {
- logger_->log_debug("No new S3 objects were found in bucket %s to list", list_request_params_->bucket);
+ logger_->log_debug("No new S3 objects were found in bucket {} to list", list_request_params_->bucket);
context->yield();
return;
}
diff --git a/extensions/aws/processors/PutS3Object.cpp b/extensions/aws/processors/PutS3Object.cpp
index 9980fe5f1..3eef5e169 100644
--- a/extensions/aws/processors/PutS3Object.cpp
+++ b/extensions/aws/processors/PutS3Object.cpp
@@ -43,7 +43,7 @@ void PutS3Object::fillUserMetadata(const std::shared_ptr<core::ProcessContext> &
for (const auto &prop_key : dynamic_prop_keys) {
std::string prop_value;
if (context->getDynamicProperty(prop_key, prop_value) && !prop_value.empty()) {
- logger_->log_debug("PutS3Object: DynamicProperty: [%s] -> [%s]", prop_key, prop_value);
+ logger_->log_debug("PutS3Object: DynamicProperty: [{}] -> [{}]", prop_key, prop_value);
user_metadata_map_.emplace(prop_key, prop_value);
if (first_property) {
user_metadata_ = minifi::utils::StringUtils::join_pack(prop_key, "=", prop_value);
@@ -53,7 +53,7 @@ void PutS3Object::fillUserMetadata(const std::shared_ptr<core::ProcessContext> &
}
}
}
- logger_->log_debug("PutS3Object: User metadata [%s]", user_metadata_);
+ logger_->log_debug("PutS3Object: User metadata [{}]", user_metadata_);
}
void PutS3Object::onSchedule(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::ProcessSessionFactory> &sessionFactory) {
@@ -64,14 +64,14 @@ void PutS3Object::onSchedule(const std::shared_ptr<core::ProcessContext> &contex
|| !ranges::contains(STORAGE_CLASSES, storage_class_)) {
throw Exception(PROCESS_SCHEDULE_EXCEPTION, "Storage Class property missing or invalid");
}
- logger_->log_debug("PutS3Object: Storage Class [%s]", storage_class_);
+ logger_->log_debug("PutS3Object: Storage Class [{}]", storage_class_);
if (!context->getProperty(ServerSideEncryption, server_side_encryption_)
|| server_side_encryption_.empty()
|| !ranges::contains(SERVER_SIDE_ENCRYPTIONS, server_side_encryption_)) {
throw Exception(PROCESS_SCHEDULE_EXCEPTION, "Server Side Encryption property missing or invalid");
}
- logger_->log_debug("PutS3Object: Server Side Encryption [%s]", server_side_encryption_);
+ logger_->log_debug("PutS3Object: Server Side Encryption [{}]", server_side_encryption_);
if (auto use_path_style_access = context->getProperty<bool>(UsePathStyleAccess)) {
use_virtual_addressing_ = !*use_path_style_access;
@@ -80,18 +80,18 @@ void PutS3Object::onSchedule(const std::shared_ptr<core::ProcessContext> &contex
if (!context->getProperty(MultipartThreshold, multipart_threshold_) || multipart_threshold_ > getMaxUploadSize() || multipart_threshold_ < getMinPartSize()) {
throw Exception(PROCESS_SCHEDULE_EXCEPTION, "Multipart Threshold is not between the valid 5MB and 5GB range!");
}
- logger_->log_debug("PutS3Object: Multipart Threshold %" PRIu64, multipart_threshold_);
+ logger_->log_debug("PutS3Object: Multipart Threshold {}", multipart_threshold_);
if (!context->getProperty(MultipartPartSize, multipart_size_) || multipart_size_ > getMaxUploadSize() || multipart_size_ < getMinPartSize()) {
throw Exception(PROCESS_SCHEDULE_EXCEPTION, "Multipart Part Size is not between the valid 5MB and 5GB range!");
}
- logger_->log_debug("PutS3Object: Multipart Size %" PRIu64, multipart_size_);
+ logger_->log_debug("PutS3Object: Multipart Size {}", multipart_size_);
multipart_upload_ageoff_interval_ = minifi::utils::getRequiredPropertyOrThrow<core::TimePeriodValue>(*context, MultipartUploadAgeOffInterval.name).getMilliseconds();
- logger_->log_debug("PutS3Object: Multipart Upload Ageoff Interval %" PRId64 " ms", int64_t{multipart_upload_ageoff_interval_.count()});
+ logger_->log_debug("PutS3Object: Multipart Upload Ageoff Interval {}", multipart_upload_ageoff_interval_);
multipart_upload_max_age_threshold_ = minifi::utils::getRequiredPropertyOrThrow<core::TimePeriodValue>(*context, MultipartUploadMaxAgeThreshold.name).getMilliseconds();
- logger_->log_debug("PutS3Object: Multipart Upload Max Age Threshold %" PRId64 " ms", int64_t{multipart_upload_max_age_threshold_.count()});
+ logger_->log_debug("PutS3Object: Multipart Upload Max Age Threshold {}", multipart_upload_max_age_threshold_);
fillUserMetadata(context);
@@ -124,7 +124,7 @@ bool PutS3Object::setCannedAcl(
logger_->log_error("Canned ACL is invalid!");
return false;
}
- logger_->log_debug("PutS3Object: Canned ACL [%s]", put_s3_request_params.canned_acl);
+ logger_->log_debug("PutS3Object: Canned ACL [{}]", put_s3_request_params.canned_acl);
return true;
}
@@ -135,19 +135,19 @@ bool PutS3Object::setAccessControl(
std::string value;
if (context->getProperty(FullControlUserList, value, flow_file) && !value.empty()) {
put_s3_request_params.fullcontrol_user_list = parseAccessControlList(value);
- logger_->log_debug("PutS3Object: Full Control User List [%s]", value);
+ logger_->log_debug("PutS3Object: Full Control User List [{}]", value);
}
if (context->getProperty(ReadPermissionUserList, value, flow_file) && !value.empty()) {
put_s3_request_params.read_permission_user_list = parseAccessControlList(value);
- logger_->log_debug("PutS3Object: Read Permission User List [%s]", value);
+ logger_->log_debug("PutS3Object: Read Permission User List [{}]", value);
}
if (context->getProperty(ReadACLUserList, value, flow_file) && !value.empty()) {
put_s3_request_params.read_acl_user_list = parseAccessControlList(value);
- logger_->log_debug("PutS3Object: Read ACL User List [%s]", value);
+ logger_->log_debug("PutS3Object: Read ACL User List [{}]", value);
}
if (context->getProperty(WriteACLUserList, value, flow_file) && !value.empty()) {
put_s3_request_params.write_acl_user_list = parseAccessControlList(value);
- logger_->log_debug("PutS3Object: Write ACL User List [%s]", value);
+ logger_->log_debug("PutS3Object: Write ACL User List [{}]", value);
}
return setCannedAcl(context, flow_file, put_s3_request_params);
@@ -170,10 +170,10 @@ std::optional<aws::s3::PutObjectRequestParameters> PutS3Object::buildPutS3Reques
logger_->log_error("No Object Key is set and default object key 'filename' attribute could not be found!");
return std::nullopt;
}
- logger_->log_debug("PutS3Object: Object Key [%s]", params.object_key);
+ logger_->log_debug("PutS3Object: Object Key [{}]", params.object_key);
context->getProperty(ContentType, params.content_type, flow_file);
- logger_->log_debug("PutS3Object: Content Type [%s]", params.content_type);
+ logger_->log_debug("PutS3Object: Content Type [{}]", params.content_type);
if (!setAccessControl(context, flow_file, params)) {
return std::nullopt;
@@ -232,10 +232,10 @@ void PutS3Object::ageOffMultipartUploads(const CommonProperties &common_properti
return;
}
- logger_->log_info("Found %d aged off pending multipart upload jobs in bucket '%s'", aged_off_uploads_in_progress->size(), common_properties.bucket);
+ logger_->log_info("Found {} aged off pending multipart upload jobs in bucket '{}'", aged_off_uploads_in_progress->size(), common_properties.bucket);
size_t aborted = 0;
for (const auto& upload : *aged_off_uploads_in_progress) {
- logger_->log_info("Aborting multipart upload with key '%s' and upload id '%s' in bucket '%s' due to reaching maximum upload age threshold.",
+ logger_->log_info("Aborting multipart upload with key '{}' and upload id '{}' in bucket '{}' due to reaching maximum upload age threshold.",
upload.key, upload.upload_id, common_properties.bucket);
aws::s3::AbortMultipartUploadRequestParameters abort_params(common_properties.credentials, *client_config_);
abort_params.setClientConfig(common_properties.proxy, common_properties.endpoint_override_url);
@@ -244,13 +244,13 @@ void PutS3Object::ageOffMultipartUploads(const CommonProperties &common_properti
abort_params.upload_id = upload.upload_id;
abort_params.use_virtual_addressing = use_virtual_addressing_;
if (!s3_wrapper_.abortMultipartUpload(abort_params)) {
- logger_->log_error("Failed to abort multipart upload with key '%s' and upload id '%s' in bucket '%s'", abort_params.key, abort_params.upload_id, abort_params.bucket);
+ logger_->log_error("Failed to abort multipart upload with key '{}' and upload id '{}' in bucket '{}'", abort_params.key, abort_params.upload_id, abort_params.bucket);
continue;
}
++aborted;
}
if (aborted > 0) {
- logger_->log_info("Aborted %d pending multipart upload jobs in bucket '%s'", aborted, common_properties.bucket);
+ logger_->log_info("Aborted {} pending multipart upload jobs in bucket '{}'", aborted, common_properties.bucket);
}
s3_wrapper_.ageOffLocalS3MultipartUploadStates(multipart_upload_max_age_threshold_);
}
@@ -281,25 +281,25 @@ void PutS3Object::onTrigger(const std::shared_ptr<core::ProcessContext> &context
session->read(flow_file, [this, &flow_file, &put_s3_request_params, &result](const std::shared_ptr<io::InputStream>& stream) -> int64_t {
try {
if (flow_file->getSize() <= multipart_threshold_) {
- logger_->log_info("Uploading S3 Object '%s' in a single upload", put_s3_request_params->object_key);
+ logger_->log_info("Uploading S3 Object '{}' in a single upload", put_s3_request_params->object_key);
result = s3_wrapper_.putObject(*put_s3_request_params, stream, flow_file->getSize());
return gsl::narrow<int64_t>(flow_file->getSize());
} else {
- logger_->log_info("S3 Object '%s' passes the multipart threshold, uploading it in multiple parts", put_s3_request_params->object_key);
+ logger_->log_info("S3 Object '{}' passes the multipart threshold, uploading it in multiple parts", put_s3_request_params->object_key);
result = s3_wrapper_.putObjectMultipart(*put_s3_request_params, stream, flow_file->getSize(), multipart_size_);
return gsl::narrow<int64_t>(flow_file->getSize());
}
} catch(const aws::s3::StreamReadException& ex) {
- logger_->log_error("Error occurred while uploading to S3: %s", ex.what());
+ logger_->log_error("Error occurred while uploading to S3: {}", ex.what());
return -1;
}
});
if (!result.has_value()) {
- logger_->log_error("Failed to upload S3 object to bucket '%s'", put_s3_request_params->bucket);
+ logger_->log_error("Failed to upload S3 object to bucket '{}'", put_s3_request_params->bucket);
session->transfer(flow_file, Failure);
} else {
setAttributes(session, flow_file, *put_s3_request_params, *result);
- logger_->log_debug("Successfully uploaded S3 object '%s' to bucket '%s'", put_s3_request_params->object_key, put_s3_request_params->bucket);
+ logger_->log_debug("Successfully uploaded S3 object '{}' to bucket '{}'", put_s3_request_params->object_key, put_s3_request_params->bucket);
session->transfer(flow_file, Success);
}
}
diff --git a/extensions/aws/processors/S3Processor.cpp b/extensions/aws/processors/S3Processor.cpp
index ee2aa2e05..d0da40c4e 100644
--- a/extensions/aws/processors/S3Processor.cpp
+++ b/extensions/aws/processors/S3Processor.cpp
@@ -50,13 +50,13 @@ std::optional<Aws::Auth::AWSCredentials> S3Processor::getAWSCredentialsFromContr
std::shared_ptr<core::controller::ControllerService> service = context->getControllerService(service_name);
if (!service) {
- logger_->log_error("AWS credentials service with name: '%s' could not be found", service_name);
+ logger_->log_error("AWS credentials service with name: '{}' could not be found", service_name);
return std::nullopt;
}
auto aws_credentials_service = std::dynamic_pointer_cast<minifi::aws::controllers::AWSCredentialsService>(service);
if (!aws_credentials_service) {
- logger_->log_error("Controller service with name: '%s' is not an AWS credentials service", service_name);
+ logger_->log_error("Controller service with name: '{}' is not an AWS credentials service", service_name);
return std::nullopt;
}
@@ -117,10 +117,10 @@ void S3Processor::onSchedule(const std::shared_ptr<core::ProcessContext>& contex
if (!context->getProperty(Region, client_config_->region) || client_config_->region.empty() || !ranges::contains(region::REGIONS, client_config_->region)) {
throw Exception(PROCESS_SCHEDULE_EXCEPTION, "Region property missing or invalid");
}
- logger_->log_debug("S3Processor: Region [%s]", client_config_->region);
+ logger_->log_debug("S3Processor: Region [{}]", client_config_->region);
if (auto communications_timeout = context->getProperty<core::TimePeriodValue>(CommunicationsTimeout)) {
- logger_->log_debug("S3Processor: Communications Timeout %" PRId64 " ms", communications_timeout->getMilliseconds().count());
+ logger_->log_debug("S3Processor: Communications Timeout {}", communications_timeout->getMilliseconds());
client_config_->connectTimeoutMs = gsl::narrow<long>(communications_timeout->getMilliseconds().count()); // NOLINT(runtime/int)
} else {
throw Exception(PROCESS_SCHEDULE_EXCEPTION, "Communications Timeout missing or invalid");
@@ -137,10 +137,10 @@ std::optional<CommonProperties> S3Processor::getCommonELSupportedProperties(
const std::shared_ptr<core::FlowFile> &flow_file) {
CommonProperties properties;
if (!context->getProperty(Bucket, properties.bucket, flow_file) || properties.bucket.empty()) {
- logger_->log_error("Bucket '%s' is invalid or empty!", properties.bucket);
+ logger_->log_error("Bucket '{}' is invalid or empty!", properties.bucket);
return std::nullopt;
}
- logger_->log_debug("S3Processor: Bucket [%s]", properties.bucket);
+ logger_->log_debug("S3Processor: Bucket [{}]", properties.bucket);
auto credentials = getAWSCredentials(context, flow_file);
if (!credentials) {
@@ -157,7 +157,7 @@ std::optional<CommonProperties> S3Processor::getCommonELSupportedProperties(
context->getProperty(EndpointOverrideURL, properties.endpoint_override_url, flow_file);
if (!properties.endpoint_override_url.empty()) {
- logger_->log_debug("S3Processor: Endpoint Override URL [%s]", properties.endpoint_override_url);
+ logger_->log_debug("S3Processor: Endpoint Override URL [{}]", properties.endpoint_override_url);
}
return properties;
diff --git a/extensions/aws/s3/MultipartUploadStateStorage.cpp b/extensions/aws/s3/MultipartUploadStateStorage.cpp
index f8c71516b..2cd0a5918 100644
--- a/extensions/aws/s3/MultipartUploadStateStorage.cpp
+++ b/extensions/aws/s3/MultipartUploadStateStorage.cpp
@@ -49,7 +49,7 @@ std::optional<MultipartUploadState> MultipartUploadStateStorage::getState(const
std::string state_key = bucket + "/" + key;
if (!state_map.contains(state_key + ".upload_id")) {
- logger_->log_warn("Multipart upload state was not found for key '%s'", state_key);
+ logger_->log_warn("Multipart upload state was not found for key '{}'", state_key);
return std::nullopt;
}
@@ -87,7 +87,7 @@ void MultipartUploadStateStorage::removeState(const std::string& bucket, const s
}
std::string state_key = bucket + "/" + key;
if (!state_map.contains(state_key + ".upload_id")) {
- logger_->log_warn("Multipart upload state was not found for key '%s'", state_key);
+ logger_->log_warn("Multipart upload state was not found for key '{}'", state_key);
return;
}
@@ -114,7 +114,7 @@ void MultipartUploadStateStorage::removeAgedStates(std::chrono::milliseconds mul
}
int64_t stored_upload_time{};
if (!core::Property::StringToInt(value, stored_upload_time)) {
- logger_->log_error("Multipart upload cache key '%s' has invalid value '%s'", property_key, value);
+ logger_->log_error("Multipart upload cache key '{}' has invalid value '{}'", property_key, value);
continue;
}
auto upload_time = Aws::Utils::DateTime(stored_upload_time);
@@ -124,7 +124,7 @@ void MultipartUploadStateStorage::removeAgedStates(std::chrono::milliseconds mul
}
}
for (const auto& key : keys_to_remove) {
- logger_->log_info("Removing local aged off multipart upload state with key '%s'", key);
+ logger_->log_info("Removing local aged off multipart upload state with key '{}'", key);
removeKey(key, state_map);
}
state_manager_->set(state_map);
diff --git a/extensions/aws/s3/S3ClientRequestSender.cpp b/extensions/aws/s3/S3ClientRequestSender.cpp
index d9414147e..dd6c3025b 100644
--- a/extensions/aws/s3/S3ClientRequestSender.cpp
+++ b/extensions/aws/s3/S3ClientRequestSender.cpp
@@ -32,10 +32,10 @@ std::optional<Aws::S3::Model::PutObjectResult> S3ClientRequestSender::sendPutObj
auto outcome = s3_client.PutObject(request);
if (outcome.IsSuccess()) {
- logger_->log_debug("Added S3 object '%s' to bucket '%s'", request.GetKey(), request.GetBucket());
+ logger_->log_debug("Added S3 object '{}' to bucket '{}'", request.GetKey(), request.GetBucket());
return outcome.GetResultWithOwnership();
} else {
- logger_->log_error("PutS3Object failed with the following: '%s'", outcome.GetError().GetMessage());
+ logger_->log_error("PutS3Object failed with the following: '{}'", outcome.GetError().GetMessage());
return std::nullopt;
}
}
@@ -48,13 +48,13 @@ bool S3ClientRequestSender::sendDeleteObjectRequest(
Aws::S3::Model::DeleteObjectOutcome outcome = s3_client.DeleteObject(request);
if (outcome.IsSuccess()) {
- logger_->log_debug("Deleted S3 object '%s' from bucket '%s'", request.GetKey(), request.GetBucket());
+ logger_->log_debug("Deleted S3 object '{}' from bucket '{}'", request.GetKey(), request.GetBucket());
return true;
} else if (outcome.GetError().GetErrorType() == Aws::S3::S3Errors::NO_SUCH_KEY) {
- logger_->log_debug("S3 object '%s' was not found in bucket '%s'", request.GetKey(), request.GetBucket());
+ logger_->log_debug("S3 object '{}' was not found in bucket '{}'", request.GetKey(), request.GetBucket());
return true;
} else {
- logger_->log_error("DeleteS3Object failed with the following: '%s'", outcome.GetError().GetMessage());
+ logger_->log_error("DeleteS3Object failed with the following: '{}'", outcome.GetError().GetMessage());
return false;
}
}
@@ -67,10 +67,10 @@ std::optional<Aws::S3::Model::GetObjectResult> S3ClientRequestSender::sendGetObj
auto outcome = s3_client.GetObject(request);
if (outcome.IsSuccess()) {
- logger_->log_debug("Fetched S3 object '%s' from bucket '%s'", request.GetKey(), request.GetBucket());
+ logger_->log_debug("Fetched S3 object '{}' from bucket '{}'", request.GetKey(), request.GetBucket());
return outcome.GetResultWithOwnership();
} else {
- logger_->log_error("FetchS3Object failed with the following: '%s'", outcome.GetError().GetMessage());
+ logger_->log_error("FetchS3Object failed with the following: '{}'", outcome.GetError().GetMessage());
return std::nullopt;
}
}
@@ -83,10 +83,10 @@ std::optional<Aws::S3::Model::ListObjectsV2Result> S3ClientRequestSender::sendLi
auto outcome = s3_client.ListObjectsV2(request);
if (outcome.IsSuccess()) {
- logger_->log_debug("ListObjectsV2 successful of bucket '%s'", request.GetBucket());
+ logger_->log_debug("ListObjectsV2 successful of bucket '{}'", request.GetBucket());
return outcome.GetResultWithOwnership();
} else {
- logger_->log_error("ListObjectsV2 failed with the following: '%s'", outcome.GetError().GetMessage());
+ logger_->log_error("ListObjectsV2 failed with the following: '{}'", outcome.GetError().GetMessage());
return std::nullopt;
}
}
@@ -99,10 +99,10 @@ std::optional<Aws::S3::Model::ListObjectVersionsResult> S3ClientRequestSender::s
auto outcome = s3_client.ListObjectVersions(request);
if (outcome.IsSuccess()) {
- logger_->log_debug("ListObjectVersions successful of bucket '%s'", request.GetBucket());
+ logger_->log_debug("ListObjectVersions successful of bucket '{}'", request.GetBucket());
return outcome.GetResultWithOwnership();
} else {
- logger_->log_error("ListObjectVersions failed with the following: '%s'", outcome.GetError().GetMessage());
+ logger_->log_error("ListObjectVersions failed with the following: '{}'", outcome.GetError().GetMessage());
return std::nullopt;
}
}
@@ -115,10 +115,10 @@ std::optional<Aws::S3::Model::GetObjectTaggingResult> S3ClientRequestSender::sen
auto outcome = s3_client.GetObjectTagging(request);
if (outcome.IsSuccess()) {
- logger_->log_debug("Got tags for S3 object '%s' from bucket '%s'", request.GetKey(), request.GetBucket());
+ logger_->log_debug("Got tags for S3 object '{}' from bucket '{}'", request.GetKey(), request.GetBucket());
return outcome.GetResultWithOwnership();
} else {
- logger_->log_error("GetObjectTagging failed with the following: '%s'", outcome.GetError().GetMessage());
+ logger_->log_error("GetObjectTagging failed with the following: '{}'", outcome.GetError().GetMessage());
return std::nullopt;
}
}
@@ -131,10 +131,10 @@ std::optional<Aws::S3::Model::HeadObjectResult> S3ClientRequestSender::sendHeadO
auto outcome = s3_client.HeadObject(request);
if (outcome.IsSuccess()) {
- logger_->log_debug("HeadS3Object successful for key '%s' from bucket '%s'", request.GetKey(), request.GetBucket());
+ logger_->log_debug("HeadS3Object successful for key '{}' from bucket '{}'", request.GetKey(), request.GetBucket());
return outcome.GetResultWithOwnership();
} else {
- logger_->log_error("HeadS3Object failed with the following: '%s'", outcome.GetError().GetMessage());
+ logger_->log_error("HeadS3Object failed with the following: '{}'", outcome.GetError().GetMessage());
return std::nullopt;
}
}
@@ -148,10 +148,10 @@ std::optional<Aws::S3::Model::CreateMultipartUploadResult> S3ClientRequestSender
auto outcome = s3_client.CreateMultipartUpload(request);
if (outcome.IsSuccess()) {
- logger_->log_debug("CreateMultipartUpload successful for key '%s' and bucket '%s'", request.GetKey(), request.GetBucket());
+ logger_->log_debug("CreateMultipartUpload successful for key '{}' and bucket '{}'", request.GetKey(), request.GetBucket());
return outcome.GetResultWithOwnership();
} else {
- logger_->log_error("CreateMultipartUpload failed for key '%s' and bucket '%s' with the following: '%s'", request.GetKey(), request.GetBucket(), outcome.GetError().GetMessage());
+ logger_->log_error("CreateMultipartUpload failed for key '{}' and bucket '{}' with the following: '{}'", request.GetKey(), request.GetBucket(), outcome.GetError().GetMessage());
return std::nullopt;
}
}
@@ -165,10 +165,10 @@ std::optional<Aws::S3::Model::UploadPartResult> S3ClientRequestSender::sendUploa
auto outcome = s3_client.UploadPart(request);
if (outcome.IsSuccess()) {
- logger_->log_debug("UploadPart successful for key '%s' from bucket '%s' with part number %d", request.GetKey(), request.GetBucket(), request.GetPartNumber());
+ logger_->log_debug("UploadPart successful for key '{}' from bucket '{}' with part number {}", request.GetKey(), request.GetBucket(), request.GetPartNumber());
return outcome.GetResultWithOwnership();
} else {
- logger_->log_error("UploadPart failed for key '%s' from bucket '%s' with part number %d with the following: '%s'",
+ logger_->log_error("UploadPart failed for key '{}' from bucket '{}' with part number {} with the following: '{}'",
request.GetKey(), request.GetBucket(), request.GetPartNumber(), outcome.GetError().GetMessage());
return std::nullopt;
}
@@ -183,10 +183,10 @@ std::optional<Aws::S3::Model::CompleteMultipartUploadResult> S3ClientRequestSend
auto outcome = s3_client.CompleteMultipartUpload(request);
if (outcome.IsSuccess()) {
- logger_->log_debug("CompleteMultipartUpload successful for key '%s' from bucket '%s'", request.GetKey(), request.GetBucket());
+ logger_->log_debug("CompleteMultipartUpload successful for key '{}' from bucket '{}'", request.GetKey(), request.GetBucket());
return outcome.GetResultWithOwnership();
} else {
- logger_->log_error("CompleteMultipartUpload failed for key '%s' from bucket '%s' with the following: '%s'", request.GetKey(), request.GetBucket(), outcome.GetError().GetMessage());
+ logger_->log_error("CompleteMultipartUpload failed for key '{}' from bucket '{}' with the following: '{}'", request.GetKey(), request.GetBucket(), outcome.GetError().GetMessage());
return std::nullopt;
}
}
@@ -200,10 +200,10 @@ std::optional<Aws::S3::Model::ListMultipartUploadsResult> S3ClientRequestSender:
auto outcome = s3_client.ListMultipartUploads(request);
if (outcome.IsSuccess()) {
- logger_->log_debug("ListMultipartUploads successful for bucket '%s'", request.GetBucket());
+ logger_->log_debug("ListMultipartUploads successful for bucket '{}'", request.GetBucket());
return outcome.GetResultWithOwnership();
} else {
- logger_->log_error("ListMultipartUploads failed for bucket '%s' with the following: '%s'", request.GetBucket(), outcome.GetError().GetMessage());
+ logger_->log_error("ListMultipartUploads failed for bucket '{}' with the following: '{}'", request.GetBucket(), outcome.GetError().GetMessage());
return std::nullopt;
}
}
@@ -217,10 +217,10 @@ bool S3ClientRequestSender::sendAbortMultipartUploadRequest(
auto outcome = s3_client.AbortMultipartUpload(request);
if (outcome.IsSuccess()) {
- logger_->log_debug("AbortMultipartUpload successful for bucket '%s', key '%s', upload id '%s'", request.GetBucket(), request.GetKey(), request.GetUploadId());
+ logger_->log_debug("AbortMultipartUpload successful for bucket '{}', key '{}', upload id '{}'", request.GetBucket(), request.GetKey(), request.GetUploadId());
return true;
} else {
- logger_->log_error("AbortMultipartUpload failed for bucket '%s', key '%s', upload id '%s' with the following: '%s'",
+ logger_->log_error("AbortMultipartUpload failed for bucket '{}', key '{}', upload id '{}' with the following: '{}'",
request.GetBucket(), request.GetKey(), request.GetUploadId(), outcome.GetError().GetMessage());
return false;
}
diff --git a/extensions/aws/s3/S3Wrapper.cpp b/extensions/aws/s3/S3Wrapper.cpp
index 2e9e27ace..ad26fe361 100644
--- a/extensions/aws/s3/S3Wrapper.cpp
+++ b/extensions/aws/s3/S3Wrapper.cpp
@@ -112,7 +112,7 @@ std::optional<S3Wrapper::UploadPartsResult> S3Wrapper::uploadParts(const PutObje
result.part_etags = upload_state.uploaded_etags;
const auto flow_size = upload_state.full_size - upload_state.uploaded_size;
if (upload_state.part_size == 0) {
- logger_->log_error("Invalid upload part size 0 was set for S3 object with key '%s' in bucket '%s'", put_object_params.object_key, put_object_params.bucket);
+ logger_->log_error("Invalid upload part size 0 was set for S3 object with key '{}' in bucket '{}'", put_object_params.object_key, put_object_params.bucket);
return std::nullopt;
}
const size_t part_count = minifi::utils::intdiv_ceil(flow_size, upload_state.part_size);
@@ -138,7 +138,7 @@ std::optional<S3Wrapper::UploadPartsResult> S3Wrapper::uploadParts(const PutObje
auto upload_part_result = request_sender_->sendUploadPartRequest(upload_part_request, put_object_params.credentials, put_object_params.client_config, put_object_params.use_virtual_addressing);
if (!upload_part_result) {
- logger_->log_error("Failed to upload part %d of %d of S3 object with key '%s'", part_number, last_part, put_object_params.object_key);
+ logger_->log_error("Failed to upload part {} of {} of S3 object with key '{}'", part_number, last_part, put_object_params.object_key);
return std::nullopt;
}
result.part_etags.push_back(upload_part_result->GetETag());
@@ -146,7 +146,7 @@ std::optional<S3Wrapper::UploadPartsResult> S3Wrapper::uploadParts(const PutObje
upload_state.uploaded_parts += 1;
upload_state.uploaded_size += read_size;
multipart_upload_storage_->storeState(put_object_params.bucket, put_object_params.object_key, upload_state);
- logger_->log_info("Uploaded part %d of %d S3 object with key '%s'", part_number, last_part, put_object_params.object_key);
+ logger_->log_info("Uploaded part {} of {} S3 object with key '{}'", part_number, last_part, put_object_params.object_key);
}
multipart_upload_storage_->removeState(put_object_params.bucket, put_object_params.object_key);
@@ -191,7 +191,7 @@ std::optional<MultipartUploadState> S3Wrapper::getMultipartUploadState(const Put
return std::nullopt;
}
if (!multipartUploadExistsInS3(put_object_params)) {
- logger_->log_info("Local upload state for object '%s' in bucket '%s' not found in S3, removing it from local cache.", put_object_params.object_key, put_object_params.bucket);
+ logger_->log_info("Local upload state for object '{}' in bucket '{}' not found in S3, removing it from local cache.", put_object_params.object_key, put_object_params.bucket);
multipart_upload_storage_->removeState(put_object_params.bucket, put_object_params.object_key);
return std::nullopt;
}
@@ -202,12 +202,12 @@ std::optional<PutObjectResult> S3Wrapper::putObjectMultipart(const PutObjectRequ
uint64_t flow_size, uint64_t multipart_size) {
gsl_Expects(multipart_upload_storage_);
if (auto upload_state = getMultipartUploadState(put_object_params)) {
- logger_->log_info("Found previous multipart upload state for %s in bucket %s, continuing upload", put_object_params.object_key, put_object_params.bucket);
+ logger_->log_info("Found previous multipart upload state for {} in bucket {}, continuing upload", put_object_params.object_key, put_object_params.bucket);
return uploadParts(put_object_params, stream, std::move(*upload_state))
| minifi::utils::andThen([&, this](const auto& upload_parts_result) { return completeMultipartUpload(put_object_params, upload_parts_result); })
| minifi::utils::transform([this](const auto& complete_multipart_upload_result) { return createPutObjectResult(complete_multipart_upload_result); });
} else {
- logger_->log_debug("No previous multipart upload state was found for %s in bucket %s", put_object_params.object_key, put_object_params.bucket);
+ logger_->log_debug("No previous multipart upload state was found for {} in bucket {}", put_object_params.object_key, put_object_params.bucket);
auto request = createPutObjectRequest<Aws::S3::Model::CreateMultipartUploadRequest>(put_object_params);
return request_sender_->sendCreateMultipartUploadRequest(request, put_object_params.credentials, put_object_params.client_config, put_object_params.use_virtual_addressing)
| minifi::utils::andThen([&, this](const auto& create_multipart_result) { return uploadParts(put_object_params, stream,
@@ -259,7 +259,7 @@ std::optional<GetObjectResult> S3Wrapper::getObject(const GetObjectRequestParame
void S3Wrapper::addListResults(const Aws::Vector<Aws::S3::Model::ObjectVersion>& content, const uint64_t min_object_age, std::vector<ListedObjectAttributes>& listed_objects) {
for (const auto& version : content) {
if (last_bucket_list_timestamp_ - min_object_age < gsl::narrow<uint64_t>(version.GetLastModified().Millis())) {
- logger_->log_debug("Object version '%s' of key '%s' skipped due to minimum object age filter", version.GetVersionId(), version.GetKey());
+ logger_->log_debug("Object version '{}' of key '{}' skipped due to minimum object age filter", version.GetVersionId(), version.GetKey());
continue;
}
@@ -278,7 +278,7 @@ void S3Wrapper::addListResults(const Aws::Vector<Aws::S3::Model::ObjectVersion>&
void S3Wrapper::addListResults(const Aws::Vector<Aws::S3::Model::Object>& content, const uint64_t min_object_age, std::vector<ListedObjectAttributes>& listed_objects) {
for (const auto& object : content) {
if (last_bucket_list_timestamp_ - min_object_age < gsl::narrow<uint64_t>(object.GetLastModified().Millis())) {
- logger_->log_debug("Object with key '%s' skipped due to minimum object age filter", object.GetKey());
+ logger_->log_debug("Object with key '{}' skipped due to minimum object age filter", object.GetKey());
continue;
}
@@ -303,7 +303,7 @@ std::optional<std::vector<ListedObjectAttributes>> S3Wrapper::listVersions(const
return std::nullopt;
}
const auto& versions = aws_result->GetVersions();
- logger_->log_debug("AWS S3 List operation returned %zu versions. This result is%s truncated.", versions.size(), aws_result->GetIsTruncated() ? "" : " not");
+ logger_->log_debug("AWS S3 List operation returned {} versions. This result is{} truncated.", versions.size(), aws_result->GetIsTruncated() ? "" : " not");
addListResults(versions, params.min_object_age, attribute_list);
if (aws_result->GetIsTruncated()) {
request.WithKeyMarker(aws_result->GetNextKeyMarker())
@@ -324,7 +324,7 @@ std::optional<std::vector<ListedObjectAttributes>> S3Wrapper::listObjects(const
return std::nullopt;
}
const auto& objects = aws_result->GetContents();
- logger_->log_debug("AWS S3 List operation returned %zu objects. This result is%s truncated.", objects.size(), aws_result->GetIsTruncated() ? "" : "not");
+ logger_->log_debug("AWS S3 List operation returned {} objects. This result is{} truncated.", objects.size(), aws_result->GetIsTruncated() ? "" : " not");
addListResults(objects, params.min_object_age, attribute_list);
if (aws_result->GetIsTruncated()) {
request.SetContinuationToken(aws_result->GetNextContinuationToken());
@@ -416,7 +416,7 @@ void S3Wrapper::addListMultipartUploadResults(const Aws::Vector<Aws::S3::Model::
for (const auto& upload : uploads) {
// if age_off_limit is set only list the aged off uploads
if (age_off_limit && now - upload.GetInitiated() <= *age_off_limit) {
- logger_->log_debug("Multipart upload with key '%s' and upload id '%s' has not aged off yet", upload.GetKey(), upload.GetUploadId());
+ logger_->log_debug("Multipart upload with key '{}' and upload id '{}' has not aged off yet", upload.GetKey(), upload.GetUploadId());
continue;
}
@@ -435,7 +435,7 @@ std::optional<std::vector<MultipartUpload>> S3Wrapper::listMultipartUploads(cons
return std::nullopt;
}
const auto& uploads = aws_result->GetUploads();
- logger_->log_debug("AWS S3 List operation returned %zu multipart uploads. This result is%s truncated.", uploads.size(), aws_result->GetIsTruncated() ? "" : " not");
+ logger_->log_debug("AWS S3 List operation returned {} multipart uploads. This result is{} truncated.", uploads.size(), aws_result->GetIsTruncated() ? "" : " not");
addListMultipartUploadResults(uploads, params.age_off_limit, result);
if (aws_result->GetIsTruncated()) {
request.SetKeyMarker(aws_result->GetNextKeyMarker());
diff --git a/extensions/aws/s3/S3Wrapper.h b/extensions/aws/s3/S3Wrapper.h
index 4bce76217..5ff68275c 100644
--- a/extensions/aws/s3/S3Wrapper.h
+++ b/extensions/aws/s3/S3Wrapper.h
@@ -261,7 +261,7 @@ class S3Wrapper {
const auto it = ranges::find(CANNED_ACL_MAP, canned_acl, [](const auto& kv) { return kv.first; });
if (it == CANNED_ACL_MAP.end()) return;
- logger_->log_debug("Setting AWS canned ACL [%s]", canned_acl);
+ logger_->log_debug("Setting AWS canned ACL [{}]", canned_acl);
request.SetACL(it->second);
}
diff --git a/extensions/aws/utils/AWSSdkLogger.cpp b/extensions/aws/utils/AWSSdkLogger.cpp
index efba7a599..0738bbd25 100644
--- a/extensions/aws/utils/AWSSdkLogger.cpp
+++ b/extensions/aws/utils/AWSSdkLogger.cpp
@@ -21,50 +21,46 @@
#include "aws/core/utils/logging/LogLevel.h"
-namespace org {
-namespace apache {
-namespace nifi {
-namespace minifi {
-namespace aws {
-namespace utils {
+namespace org::apache::nifi::minifi::aws::utils {
+
+namespace {
+Aws::Utils::Logging::LogLevel mapToAwsLevels(core::logging::LOG_LEVEL level) {
+ switch (level) {
+ using core::logging::LOG_LEVEL;
+ using AwsLogLevel = Aws::Utils::Logging::LogLevel;
+ case LOG_LEVEL::trace: return AwsLogLevel::Trace;
+ case LOG_LEVEL::debug: return AwsLogLevel::Debug;
+ case LOG_LEVEL::info: return AwsLogLevel::Info;
+ case LOG_LEVEL::warn: return AwsLogLevel::Warn;
+ case LOG_LEVEL::err: return AwsLogLevel::Error;
+ case LOG_LEVEL::critical: return AwsLogLevel::Fatal;
+ case LOG_LEVEL::off: return AwsLogLevel::Off;
+ }
+ throw std::invalid_argument(fmt::format("Invalid LOG_LEVEL {}", magic_enum::enum_underlying(level)));
+}
+
+core::logging::LOG_LEVEL mapFromAwsLevels(Aws::Utils::Logging::LogLevel level) {
+ switch (level) {
+ using core::logging::LOG_LEVEL;
+ using AwsLogLevel = Aws::Utils::Logging::LogLevel;
+ case AwsLogLevel::Off: return LOG_LEVEL::off;
+ case AwsLogLevel::Fatal: return LOG_LEVEL::critical;
+ case AwsLogLevel::Error:return LOG_LEVEL::err;
+ case AwsLogLevel::Warn: return LOG_LEVEL::warn;
+ case AwsLogLevel::Info: return LOG_LEVEL::info;
+ case AwsLogLevel::Debug: return LOG_LEVEL::debug;
+ case AwsLogLevel::Trace: return LOG_LEVEL::trace;
+ }
+ throw std::invalid_argument(fmt::format("Invalid Aws::Utils::Logging::LogLevel {}", magic_enum::enum_underlying(level)));
+}
+} // namespace
Aws::Utils::Logging::LogLevel AWSSdkLogger::GetLogLevel() const {
- if (logger_->should_log(minifi::core::logging::LOG_LEVEL::trace))
- return Aws::Utils::Logging::LogLevel::Trace;
- if (logger_->should_log(minifi::core::logging::LOG_LEVEL::debug))
- return Aws::Utils::Logging::LogLevel::Debug;
- if (logger_->should_log(minifi::core::logging::LOG_LEVEL::info))
- return Aws::Utils::Logging::LogLevel::Info;
- if (logger_->should_log(minifi::core::logging::LOG_LEVEL::warn))
- return Aws::Utils::Logging::LogLevel::Warn;
- if (logger_->should_log(minifi::core::logging::LOG_LEVEL::err))
- return Aws::Utils::Logging::LogLevel::Error;
- if (logger_->should_log(minifi::core::logging::LOG_LEVEL::critical))
- return Aws::Utils::Logging::LogLevel::Fatal;
- return Aws::Utils::Logging::LogLevel::Off;
+ return mapToAwsLevels(logger_->level());
}
void AWSSdkLogger::Log(Aws::Utils::Logging::LogLevel log_level, const char* tag, const char* format_str, ...) { // NOLINT(cert-dcl50-cpp)
- switch (log_level) {
- case Aws::Utils::Logging::LogLevel::Trace:
- logger_->log_trace("[%s] %s", tag, format_str);
- break;
- case Aws::Utils::Logging::LogLevel::Debug:
- logger_->log_debug("[%s] %s", tag, format_str);
- break;
- case Aws::Utils::Logging::LogLevel::Info:
- logger_->log_info("[%s] %s", tag, format_str);
- break;
- case Aws::Utils::Logging::LogLevel::Warn:
- logger_->log_warn("[%s] %s", tag, format_str);
- break;
- case Aws::Utils::Logging::LogLevel::Error:
- case Aws::Utils::Logging::LogLevel::Fatal:
- logger_->log_error("[%s] %s", tag, format_str);
- break;
- default:
- break;
- }
+ logger_->log_with_level(mapFromAwsLevels(log_level), "[{}] {}", tag, format_str);
}
void AWSSdkLogger::LogStream(Aws::Utils::Logging::LogLevel log_level, const char* tag, const Aws::OStringStream &message_stream) {
@@ -74,9 +70,4 @@ void AWSSdkLogger::LogStream(Aws::Utils::Logging::LogLevel log_level, const char
void AWSSdkLogger::Flush() {
}
-} // namespace utils
-} // namespace aws
-} // namespace minifi
-} // namespace nifi
-} // namespace apache
-} // namespace org
+} // namespace org::apache::nifi::minifi::aws::utils
diff --git a/extensions/azure/processors/AzureBlobStorageProcessorBase.cpp b/extensions/azure/processors/AzureBlobStorageProcessorBase.cpp
index a3e4ee87c..39b39351a 100644
--- a/extensions/azure/processors/AzureBlobStorageProcessorBase.cpp
+++ b/extensions/azure/processors/AzureBlobStorageProcessorBase.cpp
@@ -32,7 +32,7 @@ void AzureBlobStorageProcessorBase::onSchedule(const std::shared_ptr<core::Proce
}
if (context->getProperty(AzureStorageCredentialsService, value) && !value.empty()) {
- logger_->log_info("Getting Azure Storage credentials from controller service with name: '%s'", value);
+ logger_->log_info("Getting Azure Storage credentials from controller service with name: '{}'", value);
return;
}
diff --git a/extensions/azure/processors/AzureDataLakeStorageProcessorBase.cpp b/extensions/azure/processors/AzureDataLakeStorageProcessorBase.cpp
index 45b2de92a..f19b52279 100644
--- a/extensions/azure/processors/AzureDataLakeStorageProcessorBase.cpp
+++ b/extensions/azure/processors/AzureDataLakeStorageProcessorBase.cpp
@@ -45,7 +45,7 @@ bool AzureDataLakeStorageProcessorBase::setCommonParameters(
params.credentials = credentials_;
if (!context.getProperty(FilesystemName, params.file_system_name, flow_file) || params.file_system_name.empty()) {
- logger_->log_error("Filesystem Name '%s' is invalid or empty!", params.file_system_name);
+ logger_->log_error("Filesystem Name '{}' is invalid or empty!", params.file_system_name);
return false;
}
diff --git a/extensions/azure/processors/AzureStorageProcessorBase.cpp b/extensions/azure/processors/AzureStorageProcessorBase.cpp
index d3dac7d19..599a7376d 100644
--- a/extensions/azure/processors/AzureStorageProcessorBase.cpp
+++ b/extensions/azure/processors/AzureStorageProcessorBase.cpp
@@ -37,13 +37,13 @@ std::tuple<AzureStorageProcessorBase::GetCredentialsFromControllerResult, std::o
std::shared_ptr<core::controller::ControllerService> service = context.getControllerService(service_name);
if (nullptr == service) {
- logger_->log_error("Azure Storage credentials service with name: '%s' could not be found", service_name);
+ logger_->log_error("Azure Storage credentials service with name: '{}' could not be found", service_name);
return std::make_tuple(GetCredentialsFromControllerResult::CONTROLLER_NAME_INVALID, std::nullopt);
}
auto azure_credentials_service = std::dynamic_pointer_cast<minifi::azure::controllers::AzureStorageCredentialsService>(service);
if (!azure_credentials_service) {
- logger_->log_error("Controller service with name: '%s' is not an Azure Storage credentials service", service_name);
+ logger_->log_error("Controller service with name: '{}' is not an Azure Storage credentials service", service_name);
return std::make_tuple(GetCredentialsFromControllerResult::CONTROLLER_NAME_INVALID, std::nullopt);
}
diff --git a/extensions/azure/processors/DeleteAzureBlobStorage.cpp b/extensions/azure/processors/DeleteAzureBlobStorage.cpp
index 392f9079f..3f6783679 100644
--- a/extensions/azure/processors/DeleteAzureBlobStorage.cpp
+++ b/extensions/azure/processors/DeleteAzureBlobStorage.cpp
@@ -63,10 +63,10 @@ void DeleteAzureBlobStorage::onTrigger(const std::shared_ptr<core::ProcessContex
auto result = azure_blob_storage_.deleteBlob(*params);
if (result) {
- logger_->log_debug("Successfully deleted blob '%s' from Azure Storage container '%s'", params->blob_name, params->container_name);
+ logger_->log_debug("Successfully deleted blob '{}' from Azure Storage container '{}'", params->blob_name, params->container_name);
session->transfer(flow_file, Success);
} else {
- logger_->log_error("Failed to delete blob '%s' from Azure Storage container '%s'", params->blob_name, params->container_name);
+ logger_->log_error("Failed to delete blob '{}' from Azure Storage container '{}'", params->blob_name, params->container_name);
session->transfer(flow_file, Failure);
}
}
diff --git a/extensions/azure/processors/DeleteAzureDataLakeStorage.cpp b/extensions/azure/processors/DeleteAzureDataLakeStorage.cpp
index 1d93c2e19..14e7e60fd 100644
--- a/extensions/azure/processors/DeleteAzureDataLakeStorage.cpp
+++ b/extensions/azure/processors/DeleteAzureDataLakeStorage.cpp
@@ -59,10 +59,10 @@ void DeleteAzureDataLakeStorage::onTrigger(const std::shared_ptr<core::ProcessCo
auto result = azure_data_lake_storage_.deleteFile(*params);
if (!result) {
- logger_->log_error("Failed to delete file '%s' to Azure Data Lake storage", params->filename);
+ logger_->log_error("Failed to delete file '{}' to Azure Data Lake storage", params->filename);
session->transfer(flow_file, Failure);
} else {
- logger_->log_debug("Successfully deleted file '%s' of filesystem '%s' on Azure Data Lake storage", params->filename, params->file_system_name);
+ logger_->log_debug("Successfully deleted file '{}' of filesystem '{}' on Azure Data Lake storage", params->filename, params->file_system_name);
session->transfer(flow_file, Success);
}
}
diff --git a/extensions/azure/processors/FetchAzureBlobStorage.cpp b/extensions/azure/processors/FetchAzureBlobStorage.cpp
index c7c1d3ef5..b55bb6924 100644
--- a/extensions/azure/processors/FetchAzureBlobStorage.cpp
+++ b/extensions/azure/processors/FetchAzureBlobStorage.cpp
@@ -42,12 +42,12 @@ std::optional<storage::FetchAzureBlobStorageParameters> FetchAzureBlobStorage::b
std::string value;
if (context.getProperty(RangeStart, value, flow_file)) {
params.range_start = std::stoull(value);
- logger_->log_debug("Range Start property set to %llu", *params.range_start);
+ logger_->log_debug("Range Start property set to {}", *params.range_start);
}
if (context.getProperty(RangeLength, value, flow_file)) {
params.range_length = std::stoull(value);
- logger_->log_debug("Range Length property set to %llu", *params.range_length);
+ logger_->log_debug("Range Length property set to {}", *params.range_length);
}
return params;
@@ -79,11 +79,11 @@ void FetchAzureBlobStorage::onTrigger(const std::shared_ptr<core::ProcessContext
});
if (result_size == std::nullopt) {
- logger_->log_error("Failed to fetch blob '%s' from Azure Blob storage", params->blob_name);
+ logger_->log_error("Failed to fetch blob '{}' from Azure Blob storage", params->blob_name);
session->transfer(flow_file, Failure);
session->remove(fetched_flow_file);
} else {
- logger_->log_debug("Successfully fetched blob '%s' from container '%s' on Azure Blob storage", params->blob_name, params->container_name);
+ logger_->log_debug("Successfully fetched blob '{}' from container '{}' on Azure Blob storage", params->blob_name, params->container_name);
session->transfer(fetched_flow_file, Success);
session->remove(flow_file);
}
diff --git a/extensions/azure/processors/FetchAzureDataLakeStorage.cpp b/extensions/azure/processors/FetchAzureDataLakeStorage.cpp
index b83c8c998..ccccf783f 100644
--- a/extensions/azure/processors/FetchAzureDataLakeStorage.cpp
+++ b/extensions/azure/processors/FetchAzureDataLakeStorage.cpp
@@ -41,17 +41,17 @@ std::optional<storage::FetchAzureDataLakeStorageParameters> FetchAzureDataLakeSt
std::string value;
if (context.getProperty(RangeStart, value, flow_file)) {
params.range_start = std::stoull(value);
- logger_->log_debug("Range Start property set to %llu", *params.range_start);
+ logger_->log_debug("Range Start property set to {}", *params.range_start);
}
if (context.getProperty(RangeLength, value, flow_file)) {
params.range_length = std::stoull(value);
- logger_->log_debug("Range Length property set to %llu", *params.range_length);
+ logger_->log_debug("Range Length property set to {}", *params.range_length);
}
if (context.getProperty(NumberOfRetries, value, flow_file)) {
params.number_of_retries = std::stoull(value);
- logger_->log_debug("Number Of Retries property set to %llu", *params.number_of_retries);
+ logger_->log_debug("Number Of Retries property set to {}", *params.number_of_retries);
}
return params;
@@ -84,11 +84,11 @@ void FetchAzureDataLakeStorage::onTrigger(const std::shared_ptr<core::ProcessCon
});
if (result == std::nullopt) {
- logger_->log_error("Failed to fetch file '%s' from Azure Data Lake storage", params->filename);
+ logger_->log_error("Failed to fetch file '{}' from Azure Data Lake storage", params->filename);
session->transfer(flow_file, Failure);
session->remove(fetched_flow_file);
} else {
- logger_->log_debug("Successfully fetched file '%s' from filesystem '%s' on Azure Data Lake storage", params->filename, params->file_system_name);
+ logger_->log_debug("Successfully fetched file '{}' from filesystem '{}' on Azure Data Lake storage", params->filename, params->file_system_name);
session->transfer(fetched_flow_file, Success);
session->remove(flow_file);
}
diff --git a/extensions/azure/processors/ListAzureBlobStorage.cpp b/extensions/azure/processors/ListAzureBlobStorage.cpp
index 4754fef6e..a767e43bf 100644
--- a/extensions/azure/processors/ListAzureBlobStorage.cpp
+++ b/extensions/azure/processors/ListAzureBlobStorage.cpp
@@ -103,10 +103,10 @@ void ListAzureBlobStorage::onTrigger(const std::shared_ptr<core::ProcessContext>
state_manager_->storeState(latest_listing_state);
- logger_->log_debug("ListAzureBlobStorage transferred %zu flow files", files_transferred);
+ logger_->log_debug("ListAzureBlobStorage transferred {} flow files", files_transferred);
if (files_transferred == 0) {
- logger_->log_debug("No new Azure Storage blobs were found in container '%s'", list_parameters_.container_name);
+ logger_->log_debug("No new Azure Storage blobs were found in container '{}'", list_parameters_.container_name);
context->yield();
return;
}
diff --git a/extensions/azure/processors/ListAzureDataLakeStorage.cpp b/extensions/azure/processors/ListAzureDataLakeStorage.cpp
index 223084702..3da79c1cd 100644
--- a/extensions/azure/processors/ListAzureDataLakeStorage.cpp
+++ b/extensions/azure/processors/ListAzureDataLakeStorage.cpp
@@ -122,10 +122,10 @@ void ListAzureDataLakeStorage::onTrigger(const std::shared_ptr<core::ProcessCont
state_manager_->storeState(latest_listing_state);
- logger_->log_debug("ListAzureDataLakeStorage transferred %zu flow files", files_transferred);
+ logger_->log_debug("ListAzureDataLakeStorage transferred {} flow files", files_transferred);
if (files_transferred == 0) {
- logger_->log_debug("No new Azure Data Lake Storage files were found in directory '%s' of filesystem '%s'", list_parameters_.directory_name, list_parameters_.file_system_name);
+ logger_->log_debug("No new Azure Data Lake Storage files were found in directory '{}' of filesystem '{}'", list_parameters_.directory_name, list_parameters_.file_system_name);
context->yield();
return;
}
diff --git a/extensions/azure/processors/PutAzureBlobStorage.cpp b/extensions/azure/processors/PutAzureBlobStorage.cpp
index 65eeafa8b..6c83ed8dd 100644
--- a/extensions/azure/processors/PutAzureBlobStorage.cpp
+++ b/extensions/azure/processors/PutAzureBlobStorage.cpp
@@ -75,7 +75,7 @@ void PutAzureBlobStorage::onTrigger(const std::shared_ptr<core::ProcessContext>
const std::optional<storage::UploadBlobResult> upload_result = callback.getResult();
if (!upload_result) {
- logger_->log_error("Failed to upload blob '%s' to Azure Storage container '%s'", params->blob_name, params->container_name);
+ logger_->log_error("Failed to upload blob '{}' to Azure Storage container '{}'", params->blob_name, params->container_name);
session->transfer(flow_file, Failure);
return;
}
@@ -86,7 +86,7 @@ void PutAzureBlobStorage::onTrigger(const std::shared_ptr<core::ProcessContext>
session->putAttribute(flow_file, "azure.etag", upload_result->etag);
session->putAttribute(flow_file, "azure.length", std::to_string(flow_file->getSize()));
session->putAttribute(flow_file, "azure.timestamp", upload_result->timestamp);
- logger_->log_debug("Successfully uploaded blob '%s' to Azure Storage container '%s'", params->blob_name, params->container_name);
+ logger_->log_debug("Successfully uploaded blob '{}' to Azure Storage container '{}'", params->blob_name, params->container_name);
session->transfer(flow_file, Success);
}
diff --git a/extensions/azure/processors/PutAzureDataLakeStorage.cpp b/extensions/azure/processors/PutAzureDataLakeStorage.cpp
index 3dedae1cd..27f844559 100644
--- a/extensions/azure/processors/PutAzureDataLakeStorage.cpp
+++ b/extensions/azure/processors/PutAzureDataLakeStorage.cpp
@@ -84,18 +84,18 @@ void PutAzureDataLakeStorage::onTrigger(const std::shared_ptr<core::ProcessConte
if (result.result_code == storage::UploadResultCode::FILE_ALREADY_EXISTS) {
gsl_Expects(conflict_resolution_strategy_ != azure::FileExistsResolutionStrategy::replace);
if (conflict_resolution_strategy_ == azure::FileExistsResolutionStrategy::fail) {
- logger_->log_error("Failed to upload file '%s/%s' to filesystem '%s' on Azure Data Lake storage because file already exists",
+ logger_->log_error("Failed to upload file '{}/{}' to filesystem '{}' on Azure Data Lake storage because file already exists",
params->directory_name, params->filename, params->file_system_name);
session->transfer(flow_file, Failure);
return;
} else if (conflict_resolution_strategy_ == azure::FileExistsResolutionStrategy::ignore) {
- logger_->log_debug("Upload of file '%s/%s' was ignored because it already exits in filesystem '%s' on Azure Data Lake Storage",
+ logger_->log_debug("Upload of file '{}/{}' was ignored because it already exits in filesystem '{}' on Azure Data Lake Storage",
params->directory_name, params->filename, params->file_system_name);
session->transfer(flow_file, Success);
return;
}
} else if (result.result_code == storage::UploadResultCode::FAILURE) {
- logger_->log_error("Failed to upload file '%s/%s' to filesystem '%s' on Azure Data Lake storage", params->directory_name, params->filename, params->file_system_name);
+ logger_->log_error("Failed to upload file '{}/{}' to filesystem '{}' on Azure Data Lake storage", params->directory_name, params->filename, params->file_system_name);
session->transfer(flow_file, Failure);
} else {
session->putAttribute(flow_file, "azure.filesystem", params->file_system_name);
@@ -103,7 +103,7 @@ void PutAzureDataLakeStorage::onTrigger(const std::shared_ptr<core::ProcessConte
session->putAttribute(flow_file, "azure.filename", params->filename);
session->putAttribute(flow_file, "azure.primaryUri", result.primary_uri);
session->putAttribute(flow_file, "azure.length", std::to_string(flow_file->getSize()));
- logger_->log_debug("Successfully uploaded file '%s/%s' to filesystem '%s' on Azure Data Lake storage", params->directory_name, params->filename, params->file_system_name);
+ logger_->log_debug("Successfully uploaded file '{}/{}' to filesystem '{}' on Azure Data Lake storage", params->directory_name, params->filename, params->file_system_name);
session->transfer(flow_file, Success);
}
}
diff --git a/extensions/azure/storage/AzureBlobStorage.cpp b/extensions/azure/storage/AzureBlobStorage.cpp
index a00f5481b..94521e9c7 100644
--- a/extensions/azure/storage/AzureBlobStorage.cpp
+++ b/extensions/azure/storage/AzureBlobStorage.cpp
@@ -35,17 +35,17 @@ AzureBlobStorage::AzureBlobStorage(std::unique_ptr<BlobStorageClient> blob_stora
std::optional<bool> AzureBlobStorage::createContainerIfNotExists(const PutAzureBlobStorageParameters& params) {
try {
- logger_->log_debug("Trying to create Azure blob container %s", params.container_name);
+ logger_->log_debug("Trying to create Azure blob container {}", params.container_name);
return blob_storage_client_->createContainerIfNotExists(params);
} catch (const std::exception& ex) {
- logger_->log_error("An exception occurred while creating container: %s", ex.what());
+ logger_->log_error("An exception occurred while creating container: {}", ex.what());
return std::nullopt;
}
}
std::optional<UploadBlobResult> AzureBlobStorage::uploadBlob(const PutAzureBlobStorageParameters& params, std::span<const std::byte> buffer) {
try {
- logger_->log_debug("Uploading Azure blob %s to container %s", params.blob_name, params.container_name);
+ logger_->log_debug("Uploading Azure blob {} to container {}", params.blob_name, params.container_name);
auto response = blob_storage_client_->uploadBlob(params, buffer);
UploadBlobResult result;
@@ -60,7 +60,7 @@ std::optional<UploadBlobResult> AzureBlobStorage::uploadBlob(const PutAzureBlobS
result.timestamp = response.LastModified.ToString(Azure::DateTime::DateFormat::Rfc1123);
return result;
} catch (const std::exception& ex) {
- logger_->log_error("An exception occurred while uploading blob: %s", ex.what());
+ logger_->log_error("An exception occurred while uploading blob: {}", ex.what());
return std::nullopt;
}
}
@@ -70,7 +70,7 @@ bool AzureBlobStorage::deleteBlob(const DeleteAzureBlobStorageParameters& params
blob_storage_client_->deleteBlob(params);
return true;
} catch (const std::exception& ex) {
- logger_->log_error("An exception occurred while deleting blob: %s", ex.what());
+ logger_->log_error("An exception occurred while deleting blob: {}", ex.what());
return false;
}
}
@@ -80,7 +80,7 @@ std::optional<uint64_t> AzureBlobStorage::fetchBlob(const FetchAzureBlobStorageP
auto fetch_res = blob_storage_client_->fetchBlob(params);
return internal::pipe(*fetch_res, stream);
} catch (const std::exception& ex) {
- logger_->log_error("An exception occurred while fetching blob '%s' of container '%s': %s", params.blob_name, params.container_name, ex.what());
+ logger_->log_error("An exception occurred while fetching blob '{}' of container '{}': {}", params.blob_name, params.container_name, ex.what());
return std::nullopt;
}
}
@@ -104,7 +104,7 @@ std::optional<ListContainerResult> AzureBlobStorage::listContainer(const ListAzu
}
return result;
} catch (const std::exception& ex) {
- logger_->log_error("An exception occurred while listing container: %s", ex.what());
+ logger_->log_error("An exception occurred while listing container: {}", ex.what());
return std::nullopt;
}
}
diff --git a/extensions/azure/storage/AzureDataLakeStorage.cpp b/extensions/azure/storage/AzureDataLakeStorage.cpp
index dde6f8255..f101e1756 100644
--- a/extensions/azure/storage/AzureDataLakeStorage.cpp
+++ b/extensions/azure/storage/AzureDataLakeStorage.cpp
@@ -61,11 +61,11 @@ AzureDataLakeStorage::AzureDataLakeStorage(std::unique_ptr<DataLakeStorageClient
UploadDataLakeStorageResult AzureDataLakeStorage::uploadFile(const PutAzureDataLakeStorageParameters& params, std::span<const std::byte> buffer) {
UploadDataLakeStorageResult result;
- logger_->log_debug("Uploading file '%s/%s' to Azure Data Lake Storage filesystem '%s'", params.directory_name, params.filename, params.file_system_name);
+ logger_->log_debug("Uploading file '{}/{}' to Azure Data Lake Storage filesystem '{}'", params.directory_name, params.filename, params.file_system_name);
try {
auto file_created = data_lake_storage_client_->createFile(params);
if (!file_created && !params.replace_file) {
- logger_->log_warn("File '%s/%s' already exists on Azure Data Lake Storage filesystem '%s'", params.directory_name, params.filename, params.file_system_name);
+ logger_->log_warn("File '{}/{}' already exists on Azure Data Lake Storage filesystem '{}'", params.directory_name, params.filename, params.file_system_name);
result.result_code = UploadResultCode::FILE_ALREADY_EXISTS;
return result;
}
@@ -77,7 +77,7 @@ UploadDataLakeStorageResult AzureDataLakeStorage::uploadFile(const PutAzureDataL
result.primary_uri = upload_url;
return result;
} catch(const std::exception& ex) {
- logger_->log_error("An exception occurred while uploading file to Azure Data Lake storage: %s", ex.what());
+ logger_->log_error("An exception occurred while uploading file to Azure Data Lake storage: {}", ex.what());
result.result_code = UploadResultCode::FAILURE;
return result;
}
@@ -87,7 +87,7 @@ bool AzureDataLakeStorage::deleteFile(const DeleteAzureDataLakeStorageParameters
try {
return data_lake_storage_client_->deleteFile(params);
} catch (const std::exception& ex) {
- logger_->log_error("An exception occurred while deleting '%s/%s' of filesystem '%s': %s", params.directory_name, params.filename, params.file_system_name, ex.what());
+ logger_->log_error("An exception occurred while deleting '{}/{}' of filesystem '{}': {}", params.directory_name, params.filename, params.file_system_name, ex.what());
return false;
}
}
@@ -97,7 +97,7 @@ std::optional<uint64_t> AzureDataLakeStorage::fetchFile(const FetchAzureDataLake
auto result = data_lake_storage_client_->fetchFile(params);
return internal::pipe(*result, stream);
} catch (const std::exception& ex) {
- logger_->log_error("An exception occurred while fetching '%s/%s' of filesystem '%s': %s", params.directory_name, params.filename, params.file_system_name, ex.what());
+ logger_->log_error("An exception occurred while fetching '{}/{}' of filesystem '{}': {}", params.directory_name, params.filename, params.file_system_name, ex.what());
return std::nullopt;
}
}
@@ -131,7 +131,7 @@ std::optional<ListDataLakeStorageResult> AzureDataLakeStorage::listDirectory(con
}
return result;
} catch (const std::exception& ex) {
- logger_->log_error("An exception occurred while listing directory '%s' of filesystem '%s': %s", params.directory_name, params.file_system_name, ex.what());
+ logger_->log_error("An exception occurred while listing directory '{}' of filesystem '{}': {}", params.directory_name, params.file_system_name, ex.what());
return std::nullopt;
}
}
diff --git a/extensions/azure/utils/AzureSdkLogger.cpp b/extensions/azure/utils/AzureSdkLogger.cpp
index fbbdbc24b..fe85b23ec 100644
--- a/extensions/azure/utils/AzureSdkLogger.cpp
+++ b/extensions/azure/utils/AzureSdkLogger.cpp
@@ -48,16 +48,16 @@ AzureSdkLogger::AzureSdkLogger() {
Azure::Core::Diagnostics::Logger::SetListener([&](Azure::Core::Diagnostics::Logger::Level level, const std::string& message) {
switch (level) {
case Azure::Core::Diagnostics::Logger::Level::Verbose:
- logger_->log_debug(message.c_str());
+ logger_->log_debug("{}", message);
break;
case Azure::Core::Diagnostics::Logger::Level::Informational:
- logger_->log_info(message.c_str());
+ logger_->log_info("{}", message);
break;
case Azure::Core::Diagnostics::Logger::Level::Warning:
- logger_->log_warn(message.c_str());
+ logger_->log_warn("{}", message);
break;
case Azure::Core::Diagnostics::Logger::Level::Error:
- logger_->log_error(message.c_str());
+ logger_->log_error("{}", message);
break;
default:
break;
diff --git a/extensions/bustache/ApplyTemplate.cpp b/extensions/bustache/ApplyTemplate.cpp
index 42995f504..d852eddcc 100644
--- a/extensions/bustache/ApplyTemplate.cpp
+++ b/extensions/bustache/ApplyTemplate.cpp
@@ -45,7 +45,7 @@ void ApplyTemplate::onTrigger(const std::shared_ptr<core::ProcessContext> &conte
std::string template_file;
context->getProperty(Template, template_file, flow_file);
session->write(flow_file, [&template_file, &flow_file, this](const auto& output_stream) {
- logger_->log_info("ApplyTemplate reading template file from %s", template_file);
+ logger_->log_info("ApplyTemplate reading template file from {}", template_file);
// TODO(szaszm): we might want to return to memory-mapped input files when the next todo is done. Until then, the agents stores the whole result in memory anyway, so no point in not doing the same
// with the template file itself
const auto template_file_contents = [&] {
diff --git a/extensions/civetweb/processors/ListenHTTP.cpp b/extensions/civetweb/processors/ListenHTTP.cpp
index 0644bcbc7..a3666ad32 100644
--- a/extensions/civetweb/processors/ListenHTTP.cpp
+++ b/extensions/civetweb/processors/ListenHTTP.cpp
@@ -43,14 +43,14 @@ void ListenHTTP::onSchedule(core::ProcessContext *context, core::ProcessSessionF
if (!context->getProperty(BasePath, basePath)) {
static_assert(BasePath.default_value);
- logger_->log_info("%s attribute is missing, so default value of %s will be used", std::string(BasePath.name), std::string(*BasePath.default_value));
+ logger_->log_info("{} attribute is missing, so default value of {} will be used", BasePath.name, *BasePath.default_value);
basePath = *BasePath.default_value;
}
basePath.insert(0, "/");
if (!context->getProperty(Port, listeningPort)) {
- logger_->log_error("%s attribute is missing or invalid", std::string(Port.name));
+ logger_->log_error("{} attribute is missing or invalid", Port.name);
return;
}
@@ -58,16 +58,16 @@ void ListenHTTP::onSchedule(core::ProcessContext *context, core::ProcessSessionF
std::string authDNPattern;
if (context->getProperty(AuthorizedDNPattern, authDNPattern) && !authDNPattern.empty()) {
- logger_->log_debug("ListenHTTP using %s: %s", std::string(AuthorizedDNPattern.name), authDNPattern);
+ logger_->log_debug("ListenHTTP using {}: {}", AuthorizedDNPattern.name, authDNPattern);
} else {
authDNPattern = ".*";
- logger_->log_debug("Authorized DN Pattern not set or invalid, using default '%s' pattern", authDNPattern);
+ logger_->log_debug("Authorized DN Pattern not set or invalid, using default '{}' pattern", authDNPattern);
}
std::string sslCertFile;
if (context->getProperty(SSLCertificate, sslCertFile) && !sslCertFile.empty()) {
- logger_->log_debug("ListenHTTP using %s: %s", std::string(SSLCertificate.name), sslCertFile);
+ logger_->log_debug("ListenHTTP using {}: {}", SSLCertificate.name, sslCertFile);
}
// Read further TLS/SSL options only if TLS/SSL usage is implied by virtue of certificate value being set
@@ -77,7 +77,7 @@ void ListenHTTP::onSchedule(core::ProcessContext *context, core::ProcessSessionF
if (!sslCertFile.empty()) {
if (context->getProperty(SSLCertificateAuthority, sslCertAuthorityFile) && !sslCertAuthorityFile.empty()) {
- logger_->log_debug("ListenHTTP using %s: %s", std::string(SSLCertificateAuthority.name), sslCertAuthorityFile);
+ logger_->log_debug("ListenHTTP using {}: {}", SSLCertificateAuthority.name, sslCertAuthorityFile);
}
if (context->getProperty(SSLVerifyPeer, sslVerifyPeer)) {
@@ -91,19 +91,19 @@ void ListenHTTP::onSchedule(core::ProcessContext *context, core::ProcessSessionF
}
if (context->getProperty(SSLMinimumVersion, sslMinVer)) {
- logger_->log_debug("ListenHTTP using %s: %s", std::string(SSLMinimumVersion.name), sslMinVer);
+ logger_->log_debug("ListenHTTP using {}: {}", SSLMinimumVersion.name, sslMinVer);
}
}
std::string headersAsAttributesPattern;
if (context->getProperty(HeadersAsAttributesRegex, headersAsAttributesPattern) && !headersAsAttributesPattern.empty()) {
- logger_->log_debug("ListenHTTP using %s: %s", std::string(HeadersAsAttributesRegex.name), headersAsAttributesPattern);
+ logger_->log_debug("ListenHTTP using {}: {}", HeadersAsAttributesRegex.name, headersAsAttributesPattern);
}
auto numThreads = getMaxConcurrentTasks();
- logger_->log_info("ListenHTTP starting HTTP server on port %s and path %s with %d threads", randomPort ? "random" : listeningPort, basePath, numThreads);
+ logger_->log_info("ListenHTTP starting HTTP server on port {} and path {} with {} threads", randomPort ? "random" : listeningPort, basePath, numThreads);
// Initialize web server
std::vector<std::string> options;
@@ -149,7 +149,7 @@ void ListenHTTP::onSchedule(core::ProcessContext *context, core::ProcessSessionF
server_ = std::make_unique<CivetServer>(options, &callbacks_, &logger_);
context->getProperty(BatchSize, batch_size_);
- logger_->log_debug("ListenHTTP using %s: %zu", std::string(BatchSize.name), batch_size_);
+ logger_->log_debug("ListenHTTP using {}: {}", BatchSize.name, batch_size_);
handler_ = std::make_unique<Handler>(basePath, context, std::move(authDNPattern),
headersAsAttributesPattern.empty() ? std::nullopt : std::make_optional<utils::Regex>(headersAsAttributesPattern));
@@ -165,7 +165,7 @@ void ListenHTTP::onSchedule(core::ProcessContext *context, core::ProcessSessionF
if (is_secure) {
listeningPort += "s";
}
- logger_->log_info("Listening on port %s", listeningPort);
+ logger_->log_info("Listening on port {}", listeningPort);
}
}
}
@@ -197,7 +197,7 @@ bool ListenHTTP::processIncomingFlowFile(core::ProcessSession &session) {
flow_file->getAttribute("filename", response.uri);
flow_file->getAttribute("mime.type", response.mime_type);
if (response.mime_type.empty()) {
- logger_->log_warn("Using default mime type of application/octet-stream for response body file: %s", response.uri);
+ logger_->log_warn("Using default mime type of application/octet-stream for response body file: {}", response.uri);
response.mime_type = "application/octet-stream";
}
response.body = session.readBuffer(flow_file).buffer;
@@ -228,7 +228,7 @@ bool ListenHTTP::processRequestBuffer(core::ProcessSession& session) {
session.transfer(flow_file, Success);
}
- logger_->log_debug("ListenHTTP transferred %zu flow files from HTTP request buffer", flow_file_count);
+ logger_->log_debug("ListenHTTP transferred {} flow files from HTTP request buffer", flow_file_count);
return flow_file_count > 0;
}
@@ -238,7 +238,7 @@ ListenHTTP::Handler::Handler(std::string base_uri, core::ProcessContext *context
headers_as_attrs_regex_(std::move(headers_as_attrs_regex)),
process_context_(context) {
context->getProperty(BufferSize, buffer_size_);
- logger_->log_debug("ListenHTTP using %s: %zu", std::string(BufferSize.name), buffer_size_);
+ logger_->log_debug("ListenHTTP using {}: {}", BufferSize.name, buffer_size_);
}
void ListenHTTP::Handler::sendHttp500(mg_connection* const conn) {
@@ -282,7 +282,7 @@ void ListenHTTP::Handler::enqueueRequest(mg_connection *conn, const mg_request_i
if (buffer_size_ == 0 || request_buffer_.size() < buffer_size_) {
request_buffer_.enqueue(std::make_pair(std::move(flow_file), std::move(content_buffer)));
} else {
- logger_->log_warn("ListenHTTP buffer is full, '%s' request for '%s' uri was dropped", req_info->request_method, req_info->request_uri);
+ logger_->log_warn("ListenHTTP buffer is full, '{}' request for '{}' uri was dropped", req_info->request_method, req_info->request_uri);
sendHttp503(conn);
return;
}
@@ -297,7 +297,7 @@ bool ListenHTTP::Handler::handlePost(CivetServer* /*server*/, struct mg_connecti
logger_->log_error("ListenHTTP handling POST resulted in a null request");
return false;
}
- logger_->log_debug("ListenHTTP handling POST request of length %lld", req_info->content_length);
+ logger_->log_debug("ListenHTTP handling POST request of length {}", req_info->content_length);
if (!authRequest(conn, req_info)) {
return true;
@@ -318,7 +318,7 @@ bool ListenHTTP::Handler::authRequest(mg_connection *conn, const mg_request_info
mg_printf(conn, "HTTP/1.1 403 Forbidden\r\n"
"Content-Type: text/html\r\n"
"Content-Length: 0\r\n\r\n");
- logger_->log_warn("ListenHTTP client DN not authorized: %s", req_info->client_cert->subject);
+ logger_->log_warn("ListenHTTP client DN not authorized: {}", req_info->client_cert->subject);
authorized = false;
}
}
@@ -331,7 +331,7 @@ bool ListenHTTP::Handler::handleGet(CivetServer* /*server*/, struct mg_connectio
logger_->log_error("ListenHTTP handling GET resulted in a null request");
return false;
}
- logger_->log_debug("ListenHTTP handling GET request of URI %s", req_info->request_uri);
+ logger_->log_debug("ListenHTTP handling GET request of URI {}", req_info->request_uri);
if (!authRequest(conn, req_info)) {
return true;
@@ -347,7 +347,7 @@ bool ListenHTTP::Handler::handleHead(CivetServer* /*server*/, struct mg_connecti
logger_->log_error("ListenHTTP handling HEAD resulted in a null request");
return false;
}
- logger_->log_debug("ListenHTTP handling HEAD request of URI %s", req_info->request_uri);
+ logger_->log_debug("ListenHTTP handling HEAD request of URI {}", req_info->request_uri);
if (!authRequest(conn, req_info)) {
return true;
@@ -377,11 +377,11 @@ void ListenHTTP::Handler::setResponseBody(const ResponseBody& response) {
std::lock_guard<std::mutex> guard(uri_map_mutex_);
if (response.body.empty()) {
- logger_->log_info("Unregistering response body for URI '%s'",
+ logger_->log_info("Unregistering response body for URI '{}'",
response.uri);
response_uri_map_.erase(response.uri);
} else {
- logger_->log_info("Registering response body for URI '%s' of length %lu",
+ logger_->log_info("Registering response body for URI '{}' of length {}",
response.uri,
response.body.size());
response_uri_map_[response.uri] = response;
@@ -408,7 +408,7 @@ void ListenHTTP::Handler::writeBody(mg_connection *conn, const mg_request_info *
}
if (!response.body.empty()) {
- logger_->log_debug("Writing response body of %lu bytes for URI: %s", response.body.size(), req_info->request_uri);
+ logger_->log_debug("Writing response body of {} bytes for URI: {}", response.body.size(), req_info->request_uri);
mg_printf(conn, "Content-type: ");
mg_printf(conn, "%s", response.mime_type.c_str());
mg_printf(conn, "\r\n");
@@ -419,11 +419,11 @@ void ListenHTTP::Handler::writeBody(mg_connection *conn, const mg_request_info *
mg_write(conn, reinterpret_cast<char*>(response.body.data()), response.body.size());
}
} else {
- logger_->log_debug("No response body available for URI: %s", req_info->request_uri);
+ logger_->log_debug("No response body available for URI: {}", req_info->request_uri);
mg_printf(conn, "Content-length: 0\r\n\r\n");
}
} else {
- logger_->log_debug("No response body available for URI: %s", req_info->request_uri);
+ logger_->log_debug("No response body available for URI: {}", req_info->request_uri);
mg_printf(conn, "Content-length: 0\r\n\r\n");
}
}
diff --git a/extensions/civetweb/processors/ListenHTTP.h b/extensions/civetweb/processors/ListenHTTP.h
index 28ab23c2c..555a146e1 100644
--- a/extensions/civetweb/processors/ListenHTTP.h
+++ b/extensions/civetweb/processors/ListenHTTP.h
@@ -201,7 +201,7 @@ class ListenHTTP : public core::Processor {
if (logger == nullptr) {
return 0;
}
- core::logging::LOG_ERROR((*logger)) << "CivetWeb error: " << message;
+ (*logger)->log_error("CivetWeb error: {}", message);
} catch (...) {
}
return 0;
@@ -219,7 +219,7 @@ class ListenHTTP : public core::Processor {
if (logger == nullptr) {
return 0;
}
- core::logging::LOG_DEBUG((*logger)) << "CivetWeb access: " << message;
+ (*logger)->log_debug("CivetWeb access: {}", message);
} catch (...) {
}
return 0;
diff --git a/extensions/civetweb/protocols/RESTReceiver.cpp b/extensions/civetweb/protocols/RESTReceiver.cpp
index 54c49d463..6c98a3592 100644
--- a/extensions/civetweb/protocols/RESTReceiver.cpp
+++ b/extensions/civetweb/protocols/RESTReceiver.cpp
@@ -65,7 +65,7 @@ int16_t RESTReceiver::heartbeat(const C2Payload &payload) {
std::string outputConfig = serializeJsonRootPayload(payload);
if (handler != nullptr) {
- logger_->log_trace("Setting %s", outputConfig);
+ logger_->log_trace("Setting {}", outputConfig);
handler->setResponse(outputConfig);
}
diff --git a/extensions/coap/COAPLoader.cpp b/extensions/coap/COAPLoader.cpp
index 306f19fd4..5fb21c2f0 100644
--- a/extensions/coap/COAPLoader.cpp
+++ b/extensions/coap/COAPLoader.cpp
@@ -28,7 +28,7 @@ static bool init(const std::shared_ptr<org::apache::nifi::minifi::Configure> & /
static WSADATA s_wsaData;
int iWinSockInitResult = WSAStartup(MAKEWORD(2, 2), &s_wsaData);
if (iWinSockInitResult != 0) {
- core::logging::LoggerFactory<COAPObjectFactoryInitializer>::getLogger()->log_error("WSAStartup failed with error %d", iWinSockInitResult);
+ core::logging::LoggerFactory<COAPObjectFactoryInitializer>::getLogger()->log_error("WSAStartup failed with error {}", iWinSockInitResult);
return false;
} else {
return true;
diff --git a/extensions/coap/protocols/CoapC2Protocol.cpp b/extensions/coap/protocols/CoapC2Protocol.cpp
index 21a0f6fcc..df68004f2 100644
--- a/extensions/coap/protocols/CoapC2Protocol.cpp
+++ b/extensions/coap/protocols/CoapC2Protocol.cpp
@@ -28,8 +28,8 @@ namespace org::apache::nifi::minifi::coap::c2 {
uint8_t CoapProtocol::REGISTRATION_MSG[8] = { 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72 };
-CoapProtocol::CoapProtocol(std::string name, const utils::Identifier &uuid)
- : RESTSender(std::move(name), uuid),
+CoapProtocol::CoapProtocol(std::string_view name, const utils::Identifier &uuid)
+ : RESTSender(name, uuid),
require_registration_(false) {
}
@@ -92,7 +92,7 @@ int CoapProtocol::writeHeartbeat(io::OutputStream *stream, const minifi::c2::C2P
stream->write(deviceIdent, false);
- logger_->log_trace("Writing heartbeat with device Ident %s and agent Ident %s", deviceIdent, agentIdent);
+ logger_->log_trace("Writing heartbeat with device Ident {} and agent Ident {}", deviceIdent, agentIdent);
if (agentIdent.empty()) {
return -1;
@@ -151,13 +151,13 @@ int CoapProtocol::writeHeartbeat(io::OutputStream *stream, const minifi::c2::C2P
stream->write(bucketId);
stream->write(flowId);
} catch (const minifi::c2::PayloadParseException &pe) {
- logger_->log_error("Parser exception occurred, but is ignorable, reason %s", pe.what());
+ logger_->log_error("Parser exception occurred, but is ignorable, reason {}", pe.what());
// okay to ignore
byte = false;
stream->write(byte);
}
} catch (const minifi::c2::PayloadParseException &e) {
- logger_->log_error("Parser exception occurred, reason %s", e.what());
+ logger_->log_error("Parser exception occurred, reason {}", e.what());
return -1;
}
return 0;
@@ -255,7 +255,7 @@ minifi::c2::C2Payload CoapProtocol::serialize(const minifi::c2::C2Payload &paylo
io::BufferStream responseStream(message_data);
responseStream.read(version);
responseStream.read(size);
- logger_->log_trace("Received ack. version %d. number of operations %d", version, size);
+ logger_->log_trace("Received ack. version {}. number of operations {}", version, size);
minifi::c2::C2Payload new_payload(payload.getOperation(), state::UpdateState::NESTED);
for (int i = 0; i < size; i++) {
uint8_t operationType;
@@ -266,7 +266,7 @@ minifi::c2::C2Payload CoapProtocol::serialize(const minifi::c2::C2Payload &paylo
REQUIRE_VALID(responseStream.read(id, false))
REQUIRE_VALID(responseStream.read(operand, false))
- logger_->log_trace("Received op %d, with id %s and operand %s", operationType, id, operand);
+ logger_->log_trace("Received op {}, with id {} and operand {}", operationType, id, operand);
auto newOp = getOperation(operationType);
minifi::c2::C2Payload nested_payload(newOp, state::UpdateState::READ_COMPLETE);
nested_payload.setIdentifier(id);
diff --git a/extensions/coap/protocols/CoapC2Protocol.h b/extensions/coap/protocols/CoapC2Protocol.h
index 2ae408866..5e0c03277 100644
--- a/extensions/coap/protocols/CoapC2Protocol.h
+++ b/extensions/coap/protocols/CoapC2Protocol.h
@@ -55,7 +55,7 @@ namespace org::apache::nifi::minifi::coap::c2 {
*/
class CoapProtocol : public minifi::c2::RESTSender {
public:
- explicit CoapProtocol(std::string name, const utils::Identifier &uuid = utils::Identifier());
+ explicit CoapProtocol(std::string_view name, const utils::Identifier &uuid = utils::Identifier());
~CoapProtocol() override;
diff --git a/extensions/elasticsearch/PostElasticsearch.cpp b/extensions/elasticsearch/PostElasticsearch.cpp
index 62202b974..a496d9fa6 100644
--- a/extensions/elasticsearch/PostElasticsearch.cpp
+++ b/extensions/elasticsearch/PostElasticsearch.cpp
@@ -202,7 +202,7 @@ void addAttributesFromResponse(std::string name, rapidjson::Value::ConstMemberIt
} else if (object->value.IsDouble()) {
flow_file.addAttribute(name, std::to_string(object->value.GetDouble()));
} else {
- core::logging::LoggerFactory<PostElasticsearch>::getLogger()->log_error("Unexpected %s in response json", object->value.GetType());
+ core::logging::LoggerFactory<PostElasticsearch>::getLogger()->log_error("Unexpected {} in response json", magic_enum::enum_underlying(object->value.GetType()));
}
}
@@ -234,7 +234,7 @@ std::string PostElasticsearch::collectPayload(core::ProcessContext& context,
break;
auto elastic_payload = ElasticPayload::parse(session, context, flow_file);
if (!elastic_payload) {
- logger_->log_error(elastic_payload.error().c_str());
+ logger_->log_error("{}", elastic_payload.error());
session.transfer(flow_file, PostElasticsearch::Failure);
continue;
}
@@ -257,7 +257,7 @@ void PostElasticsearch::onTrigger(const std::shared_ptr<core::ProcessContext>& c
auto result = submitRequest(client_, payload, flowfiles_with_payload.size());
if (!result) {
- logger_->log_error(result.error().c_str());
+ logger_->log_error("{}", result.error());
for (const auto& flow_file_in_payload: flowfiles_with_payload)
session->transfer(flow_file_in_payload, Failure);
return;
diff --git a/extensions/expression-language/ProcessContextExpr.cpp b/extensions/expression-language/ProcessContextExpr.cpp
index d511c9d66..9455e1b5c 100644
--- a/extensions/expression-language/ProcessContextExpr.cpp
+++ b/extensions/expression-language/ProcessContextExpr.cpp
@@ -31,14 +31,14 @@ bool ProcessContextExpr::getProperty(bool supports_expression_language, std::str
if (!ProcessContext::getProperty(name, expression_str)) {
return false;
}
- logger_->log_debug("Compiling expression for %s/%s: %s", getProcessorNode()->getName(), name, expression_str);
+ logger_->log_debug("Compiling expression for {}/{}: {}", getProcessorNode()->getName(), name, expression_str);
expressions_.emplace(name, expression::compile(expression_str));
expression_strs_.insert_or_assign(name, expression_str);
}
minifi::expression::Parameters p(shared_from_this(), flow_file);
value = expressions_[name](p).asString();
- logger_->log_debug(R"(expression "%s" of property "%s" evaluated to: %s)", expression_strs_[name], name, value);
+ logger_->log_debug(R"(expression "{}" of property "{}" evaluated to: {})", expression_strs_[name], name, value);
return true;
}
@@ -58,13 +58,13 @@ bool ProcessContextExpr::getDynamicProperty(const Property &property, std::strin
if (dynamic_property_expressions_.find(name) == dynamic_property_expressions_.end()) {
std::string expression_str;
ProcessContext::getDynamicProperty(name, expression_str);
- logger_->log_debug("Compiling expression for %s/%s: %s", getProcessorNode()->getName(), name, expression_str);
+ logger_->log_debug("Compiling expression for {}/{}: {}", getProcessorNode()->getName(), name, expression_str);
dynamic_property_expressions_.emplace(name, expression::compile(expression_str));
expression_strs_.insert_or_assign(name, expression_str);
}
minifi::expression::Parameters p(shared_from_this(), flow_file);
value = dynamic_property_expressions_[name](p).asString();
- logger_->log_debug(R"(expression "%s" of dynamic property "%s" evaluated to: %s)", expression_strs_[name], name, value);
+ logger_->log_debug(R"(expression "{}" of dynamic property "{}" evaluated to: {})", expression_strs_[name], name, value);
return true;
}
diff --git a/extensions/gcp/controllerservices/GCPCredentialsControllerService.cpp b/extensions/gcp/controllerservices/GCPCredentialsControllerService.cpp
index 52b30f03d..49a601ee9 100644
--- a/extensions/gcp/controllerservices/GCPCredentialsControllerService.cpp
+++ b/extensions/gcp/controllerservices/GCPCredentialsControllerService.cpp
@@ -33,7 +33,7 @@ void GCPCredentialsControllerService::initialize() {
std::shared_ptr<gcs::oauth2::Credentials> GCPCredentialsControllerService::createDefaultCredentials() const {
auto default_credentials = gcs::oauth2::CreateServiceAccountCredentialsFromDefaultPaths();
if (!default_credentials.ok()) {
- logger_->log_error(default_credentials.status().message().c_str());
+ logger_->log_error("{}", default_credentials.status().message());
return nullptr;
}
return *default_credentials;
@@ -42,13 +42,13 @@ std::shared_ptr<gcs::oauth2::Credentials> GCPCredentialsControllerService::creat
std::shared_ptr<gcs::oauth2::Credentials> GCPCredentialsControllerService::createCredentialsFromJsonPath() const {
std::string json_path;
if (!getProperty(JsonFilePath, json_path)) {
- logger_->log_error("Missing or invalid %s", std::string(JsonFilePath.name));
+ logger_->log_error("Missing or invalid {}", JsonFilePath.name);
return nullptr;
}
auto json_path_credentials = gcs::oauth2::CreateServiceAccountCredentialsFromJsonFilePath(json_path);
if (!json_path_credentials.ok()) {
- logger_->log_error(json_path_credentials.status().message().c_str());
+ logger_->log_error("{}", json_path_credentials.status().message());
return nullptr;
}
return *json_path_credentials;
@@ -57,13 +57,13 @@ std::shared_ptr<gcs::oauth2::Credentials> GCPCredentialsControllerService::creat
std::shared_ptr<gcs::oauth2::Credentials> GCPCredentialsControllerService::createCredentialsFromJsonContents() const {
std::string json_contents;
if (!getProperty(JsonContents, json_contents)) {
- logger_->log_error("Missing or invalid %s", std::string(JsonContents.name));
+ logger_->log_error("Missing or invalid {}", JsonContents.name);
return nullptr;
}
auto json_path_credentials = gcs::oauth2::CreateServiceAccountCredentialsFromJsonContents(json_contents);
if (!json_path_credentials.ok()) {
- logger_->log_error(json_path_credentials.status().message().c_str());
+ logger_->log_error("{}", json_path_credentials.status().message());
return nullptr;
}
return *json_path_credentials;
@@ -76,7 +76,7 @@ void GCPCredentialsControllerService::onEnable() {
credentials_location = magic_enum::enum_cast<CredentialsLocation>(value);
}
if (!credentials_location) {
- logger_->log_error("Invalid Credentials Location, defaulting to %s", std::string{magic_enum::enum_name(CredentialsLocation::USE_DEFAULT_CREDENTIALS)});
+ logger_->log_error("Invalid Credentials Location, defaulting to {}", magic_enum::enum_name(CredentialsLocation::USE_DEFAULT_CREDENTIALS));
credentials_location = CredentialsLocation::USE_DEFAULT_CREDENTIALS;
}
if (*credentials_location == CredentialsLocation::USE_DEFAULT_CREDENTIALS) {
@@ -96,4 +96,3 @@ void GCPCredentialsControllerService::onEnable() {
REGISTER_RESOURCE(GCPCredentialsControllerService, ControllerService);
} // namespace org::apache::nifi::minifi::extensions::gcp
-
diff --git a/extensions/gcp/processors/DeleteGCSObject.cpp b/extensions/gcp/processors/DeleteGCSObject.cpp
index fdbb0911a..d6ccd4026 100644
--- a/extensions/gcp/processors/DeleteGCSObject.cpp
+++ b/extensions/gcp/processors/DeleteGCSObject.cpp
@@ -61,7 +61,7 @@ void DeleteGCSObject::onTrigger(const std::shared_ptr<core::ProcessContext>& con
utils::internal::ValueParser(*gen_str).parse(gen).parseEnd();
generation = gcs::Generation(gen);
} catch (const utils::internal::ValueException&) {
- logger_->log_error("Invalid generation: %s", *gen_str);
+ logger_->log_error("Invalid generation: {}", *gen_str);
session->transfer(flow_file, Failure);
return;
}
@@ -73,7 +73,7 @@ void DeleteGCSObject::onTrigger(const std::shared_ptr<core::ProcessContext>& con
flow_file->setAttribute(GCS_STATUS_MESSAGE, status.message());
flow_file->setAttribute(GCS_ERROR_REASON, status.error_info().reason());
flow_file->setAttribute(GCS_ERROR_DOMAIN, status.error_info().domain());
- logger_->log_error("Failed to delete %s object from %s bucket on Google Cloud Storage %s %s", *object_name, *bucket, status.message(), status.error_info().reason());
+ logger_->log_error("Failed to delete {} object from {} bucket on Google Cloud Storage {} {}", *object_name, *bucket, status.message(), status.error_info().reason());
session->transfer(flow_file, Failure);
return;
}
diff --git a/extensions/gcp/processors/FetchGCSObject.cpp b/extensions/gcp/processors/FetchGCSObject.cpp
index 3ff3fff86..67e0ddb9d 100644
--- a/extensions/gcp/processors/FetchGCSObject.cpp
+++ b/extensions/gcp/processors/FetchGCSObject.cpp
@@ -131,7 +131,7 @@ void FetchGCSObject::onTrigger(const std::shared_ptr<core::ProcessContext>& cont
utils::internal::ValueParser(*gen_str).parse(gen).parseEnd();
callback.setGeneration(gcs::Generation(gen));
} catch (const utils::internal::ValueException&) {
- logger_->log_error("Invalid generation: %s", *gen_str);
+ logger_->log_error("Invalid generation: {}", *gen_str);
session->transfer(flow_file, Failure);
return;
}
@@ -142,7 +142,7 @@ void FetchGCSObject::onTrigger(const std::shared_ptr<core::ProcessContext>& cont
flow_file->setAttribute(GCS_STATUS_MESSAGE, callback.getStatus().message());
flow_file->setAttribute(GCS_ERROR_REASON, callback.getStatus().error_info().reason());
flow_file->setAttribute(GCS_ERROR_DOMAIN, callback.getStatus().error_info().domain());
- logger_->log_error("Failed to fetch from Google Cloud Storage %s %s", callback.getStatus().message(), callback.getStatus().error_info().reason());
+ logger_->log_error("Failed to fetch from Google Cloud Storage {} {}", callback.getStatus().message(), callback.getStatus().error_info().reason());
session->transfer(flow_file, Failure);
return;
}
diff --git a/extensions/gcp/processors/GCSProcessor.cpp b/extensions/gcp/processors/GCSProcessor.cpp
index 4f596584a..869bb9e1f 100644
--- a/extensions/gcp/processors/GCSProcessor.cpp
+++ b/extensions/gcp/processors/GCSProcessor.cpp
@@ -50,7 +50,7 @@ void GCSProcessor::onSchedule(const std::shared_ptr<core::ProcessContext>& conte
endpoint_url_ = context->getProperty(EndpointOverrideURL);
if (endpoint_url_)
- logger_->log_debug("Endpoint overwritten: %s", *endpoint_url_);
+ logger_->log_debug("Endpoint overwritten: {}", *endpoint_url_);
}
gcs::Client GCSProcessor::getClient() const {
diff --git a/extensions/gcp/processors/ListGCSBucket.cpp b/extensions/gcp/processors/ListGCSBucket.cpp
index 57c030038..0dab237ff 100644
--- a/extensions/gcp/processors/ListGCSBucket.cpp
+++ b/extensions/gcp/processors/ListGCSBucket.cpp
@@ -52,7 +52,7 @@ void ListGCSBucket::onTrigger(const std::shared_ptr<core::ProcessContext>& conte
setAttributesFromObjectMetadata(*flow_file, *object_in_bucket);
session->transfer(flow_file, Success);
} else {
- logger_->log_error("Invalid object in bucket %s", bucket_);
+ logger_->log_error("Invalid object in bucket {}", bucket_);
}
}
}
diff --git a/extensions/gcp/processors/PutGCSObject.cpp b/extensions/gcp/processors/PutGCSObject.cpp
index 9feae6830..de7844166 100644
--- a/extensions/gcp/processors/PutGCSObject.cpp
+++ b/extensions/gcp/processors/PutGCSObject.cpp
@@ -169,7 +169,7 @@ void PutGCSObject::onTrigger(const std::shared_ptr<core::ProcessContext>& contex
flow_file->setAttribute(GCS_STATUS_MESSAGE, result.status().message());
flow_file->setAttribute(GCS_ERROR_REASON, result.status().error_info().reason());
flow_file->setAttribute(GCS_ERROR_DOMAIN, result.status().error_info().domain());
- logger_->log_error("Failed to upload to Google Cloud Storage %s %s", result.status().message(), result.status().error_info().reason());
+ logger_->log_error("Failed to upload to Google Cloud Storage {} {}", result.status().message(), result.status().error_info().reason());
session->transfer(flow_file, Failure);
} else {
setAttributesFromObjectMetadata(*flow_file, *result);
diff --git a/extensions/gps/GetGPS.cpp b/extensions/gps/GetGPS.cpp
index 358cbe723..729181908 100644
--- a/extensions/gps/GetGPS.cpp
+++ b/extensions/gps/GetGPS.cpp
@@ -90,7 +90,7 @@ void GetGPS::onTrigger(const std::shared_ptr<core::ProcessContext>& /*context*/,
continue;
}
- logger_->log_debug("Longitude: %lf\nLatitude: %lf\nAltitude: %lf\nAccuracy: %lf\n\n", gpsdata->fix.latitude, gpsdata->fix.longitude, gpsdata->fix.altitude,
+ logger_->log_debug("Longitude: {}\nLatitude: {}\nAltitude: {}\nAccuracy: {}\n\n", gpsdata->fix.latitude, gpsdata->fix.longitude, gpsdata->fix.altitude,
(gpsdata->fix.epx > gpsdata->fix.epy) ? gpsdata->fix.epx : gpsdata->fix.epy);
auto flowFile = session->create();
@@ -125,7 +125,7 @@ void GetGPS::onTrigger(const std::shared_ptr<core::ProcessContext>& /*context*/,
}
}
} catch (std::exception &exception) {
- logger_->log_error("GetGPS Caught Exception %s", exception.what());
+ logger_->log_error("GetGPS Caught Exception {}", exception.what());
throw;
}
}
diff --git a/extensions/http-curl/client/HTTPCallback.h b/extensions/http-curl/client/HTTPCallback.h
index 55751e468..13752d100 100644
--- a/extensions/http-curl/client/HTTPCallback.h
+++ b/extensions/http-curl/client/HTTPCallback.h
@@ -60,7 +60,7 @@ class HttpStreamingCallback final : public utils::HTTPUploadByteArrayInputCallba
}
void seek(size_t pos) override {
- logger_->log_trace("seek(pos: %zu) called", pos);
+ logger_->log_trace("seek(pos: {}) called", pos);
std::unique_lock<std::mutex> lock(mutex_);
seekInner(lock, pos);
}
@@ -89,7 +89,7 @@ class HttpStreamingCallback final : public utils::HTTPUploadByteArrayInputCallba
}
std::byte* getBuffer(size_t pos) override {
- logger_->log_trace("getBuffer(pos: %zu) called", pos);
+ logger_->log_trace("getBuffer(pos: {}) called", pos);
std::unique_lock<std::mutex> lock(mutex_);
@@ -105,7 +105,7 @@ class HttpStreamingCallback final : public utils::HTTPUploadByteArrayInputCallba
}
size_t getRemaining(size_t pos) override {
- logger_->log_trace("getRemaining(pos: %zu) called", pos);
+ logger_->log_trace("getRemaining(pos: {}) called", pos);
std::unique_lock<std::mutex> lock(mutex_);
seekInner(lock, pos);
@@ -142,8 +142,8 @@ class HttpStreamingCallback final : public utils::HTTPUploadByteArrayInputCallba
current_buffer_start_ = total_bytes_loaded_;
current_pos_ = current_buffer_start_;
total_bytes_loaded_ += current_vec_.size();
- logger_->log_trace("loadNextBuffer() loaded new buffer, ptr_: %p, size: %zu, current_buffer_start_: %zu, current_pos_: %zu, total_bytes_loaded_: %zu",
- ptr_,
+ logger_->log_trace("loadNextBuffer() loaded new buffer, ptr_: {}, size: {}, current_buffer_start_: {}, current_pos_: {}, total_bytes_loaded_: {}",
+ static_cast<void*>(ptr_),
current_vec_.size(),
current_buffer_start_,
current_pos_,
@@ -159,7 +159,7 @@ class HttpStreamingCallback final : public utils::HTTPUploadByteArrayInputCallba
int64_t processInner(std::vector<std::byte>&& vec) {
size_t size = vec.size();
- logger_->log_trace("processInner() called, vec.data(): %p, vec.size(): %zu", vec.data(), size);
+ logger_->log_trace("processInner() called, vec.data(): {}, vec.size(): {}", static_cast<void*>(vec.data()), size);
if (size == 0U) {
return 0U;
@@ -178,10 +178,10 @@ class HttpStreamingCallback final : public utils::HTTPUploadByteArrayInputCallba
* @param pos position to seek to
*/
void seekInner(std::unique_lock<std::mutex>& lock, size_t pos) {
- logger_->log_trace("seekInner() called, current_pos_: %zu, pos: %zu", current_pos_, pos);
+ logger_->log_trace("seekInner() called, current_pos_: {}, pos: {}", current_pos_, pos);
if (pos < current_pos_) {
const std::string errstr = "Seeking backwards is not supported, tried to seek from " + std::to_string(current_pos_) + " to " + std::to_string(pos);
- logger_->log_error("%s", errstr);
+ logger_->log_error("{}", errstr);
throw std::logic_error(errstr);
}
while ((pos - current_buffer_start_) >= current_vec_.size()) {
diff --git a/extensions/http-curl/client/HTTPClient.cpp b/extensions/http-curl/client/HTTPClient.cpp
index 3d986f6c2..d62c30765 100644
--- a/extensions/http-curl/client/HTTPClient.cpp
+++ b/extensions/http-curl/client/HTTPClient.cpp
@@ -72,7 +72,7 @@ HTTPClient::~HTTPClient() {
// out of good hygiene.
forceClose();
content_.close();
- logger_->log_trace("Closing HTTPClient for %s", url_);
+ logger_->log_trace("Closing HTTPClient for {}", url_);
}
void HTTPClient::forceClose() {
@@ -91,7 +91,7 @@ int HTTPClient::debug_callback(CURL *handle, curl_infotype type, char *data, siz
return 0;
}
if (type == CURLINFO_TEXT) {
- core::logging::LOG_DEBUG(*logger) << "CURL(" << reinterpret_cast<void*>(handle) << "): " << std::string(data, size);
+ (*logger)->log_debug("CURL({}): {:.{}}", handle, data, size);
}
return 0;
}
@@ -132,7 +132,7 @@ void HTTPClient::setPeerVerification(bool peer_verification) {
}
void HTTPClient::setHostVerification(bool host_verification) {
- logger_->log_debug("%s host verification", host_verification ? "Enabling" : "Disabling");
+ logger_->log_debug("{} host verification", host_verification ? "Enabling" : "Disabling");
curl_easy_setopt(http_session_.get(), CURLOPT_SSL_VERIFYHOST, host_verification);
}
@@ -250,7 +250,7 @@ void HTTPClient::setKeepAliveProbe(std::optional<KeepAliveProbeData> probe_data)
void HTTPClient::setConnectionTimeout(std::chrono::milliseconds timeout) {
if (timeout < 0ms) {
- logger_->log_error("Invalid HTTP connection timeout %" PRId64 " ms", timeout.count());
+ logger_->log_error("Invalid HTTP connection timeout {}", timeout);
return;
}
connect_timeout_ = timeout;
@@ -258,7 +258,7 @@ void HTTPClient::setConnectionTimeout(std::chrono::milliseconds timeout) {
void HTTPClient::setReadTimeout(std::chrono::milliseconds timeout) {
if (timeout < 0ms) {
- logger_->log_error("Invalid HTTP read timeout %" PRId64 " ms", timeout.count());
+ logger_->log_error("Invalid HTTP read timeout {}", timeout);
return;
}
read_timeout_ = timeout;
@@ -271,7 +271,7 @@ void HTTPClient::setReadCallback(std::unique_ptr<utils::HTTPReadCallback> callba
}
void HTTPClient::setUploadCallback(std::unique_ptr<utils::HTTPUploadCallback> callback) {
- logger_->log_debug("Setting callback for %s", url_);
+ logger_->log_debug("Setting callback for {}", url_);
write_callback_ = std::move(callback);
if (method_ == utils::HttpRequestMethod::PUT) {
curl_easy_setopt(http_session_.get(), CURLOPT_INFILESIZE_LARGE, (curl_off_t) write_callback_->size());
@@ -373,7 +373,7 @@ bool HTTPClient::submit() {
}
curl_easy_setopt(http_session_.get(), CURLOPT_URL, url_.c_str());
- logger_->log_debug("Submitting to %s", url_);
+ logger_->log_debug("Submitting to {}", url_);
if (read_callback_ == nullptr) {
curl_easy_setopt(http_session_.get(), CURLOPT_WRITEFUNCTION, &utils::HTTPRequestResponse::receiveWrite);
curl_easy_setopt(http_session_.get(), CURLOPT_WRITEDATA, static_cast<void*>(&content_));
@@ -394,15 +394,15 @@ bool HTTPClient::submit() {
response_data_.response_code = http_code;
curl_easy_getinfo(http_session_.get(), CURLINFO_CONTENT_TYPE, &response_data_.response_content_type);
if (res_ == CURLE_OPERATION_TIMEDOUT) {
- logger_->log_error("HTTP operation timed out, with absolute timeout %" PRId64 "ms\n", getAbsoluteTimeout().count());
+ logger_->log_error("HTTP operation timed out, with absolute timeout {}\n", getAbsoluteTimeout());
}
if (res_ != CURLE_OK) {
- logger_->log_info("%d", request_headers_.size());
- logger_->log_error("curl_easy_perform() failed %s on %s, error code %d\n", curl_easy_strerror(res_), url_, res_);
+ logger_->log_info("{}", request_headers_.size());
+ logger_->log_error("curl_easy_perform() failed {} on {}, error code {}\n", curl_easy_strerror(res_), url_, magic_enum::enum_underlying(res_));
return false;
}
- logger_->log_debug("Finished with %s", url_);
+ logger_->log_debug("Finished with {}", url_);
return true;
}
@@ -471,9 +471,7 @@ int HTTPClient::onProgress(void *clientp, curl_off_t /*dltotal*/, curl_off_t dln
// did not transfer data
if (elapsed > client.read_timeout_) {
// timeout
- client.logger_->log_error("HTTP operation has been idle for %" PRId64 " ms, limit (%" PRId64 "ms) reached, terminating connection\n",
- int64_t{std::chrono::duration_cast<std::chrono::milliseconds>(elapsed).count()},
- int64_t{client.read_timeout_.count()});
+ client.logger_->log_error("HTTP operation has been idle for {}, limit ({}) reached, terminating connection\n", elapsed, client.read_timeout_);
return 1;
}
return 0;
@@ -490,7 +488,7 @@ void HTTPClient::configure_secure_connection() {
static const auto default_ca_file = utils::getDefaultCAFile();
if (default_ca_file)
- logger_->log_debug("Using CA certificate file \"%s\"", std::string(*default_ca_file));
+ logger_->log_debug("Using CA certificate file \"{}\"", *default_ca_file);
else
logger_->log_error("Could not find valid CA certificate file");
diff --git a/extensions/http-curl/client/HTTPStream.h b/extensions/http-curl/client/HTTPStream.h
index ed910cdf8..9e90eb0c6 100644
--- a/extensions/http-curl/client/HTTPStream.h
+++ b/extensions/http-curl/client/HTTPStream.h
@@ -62,7 +62,7 @@ class HttpStream : public io::BaseStream {
if (http_client_future_.valid()) {
http_client_future_.get();
} else {
- logger_->log_warn("Future status already cleared for %s, continuing", http_client_->getURL());
+ logger_->log_warn("Future status already cleared for {}, continuing", http_client_->getURL());
}
started_ = false;
diff --git a/extensions/http-curl/processors/InvokeHTTP.cpp b/extensions/http-curl/processors/InvokeHTTP.cpp
index 3cf28c588..2cc2b2c18 100644
--- a/extensions/http-curl/processors/InvokeHTTP.cpp
+++ b/extensions/http-curl/processors/InvokeHTTP.cpp
@@ -100,7 +100,7 @@ void InvokeHTTP::setupMembersFromProperties(const core::ProcessContext& context)
attributes_to_send_ = context.getProperty(AttributesToSend)
| utils::filter([](const std::string& s) { return !s.empty(); }) // avoid compiling an empty string to regex
| utils::transform([](const std::string& regex_str) { return utils::Regex{regex_str}; })
- | utils::orElse([this] { logger_->log_debug("%s is missing, so the default value will be used", std::string{AttributesToSend.name}); });
+ | utils::orElse([this] { logger_->log_debug("{} is missing, so the default value will be used", AttributesToSend.name); });
always_output_response_ = (context.getProperty(AlwaysOutputResponse) | utils::andThen(&utils::StringUtils::toBool)).value_or(false);
penalize_no_retry_ = (context.getProperty(PenalizeOnNoRetry) | utils::andThen(&utils::StringUtils::toBool)).value_or(false);
@@ -109,7 +109,7 @@ void InvokeHTTP::setupMembersFromProperties(const core::ProcessContext& context)
put_response_body_in_attribute_ = context.getProperty(PutResponseBodyInAttribute);
if (put_response_body_in_attribute_ && put_response_body_in_attribute_->empty()) {
- logger_->log_warn("%s is set to an empty string", std::string{PutResponseBodyInAttribute.name});
+ logger_->log_warn("{} is set to an empty string", PutResponseBodyInAttribute.name);
put_response_body_in_attribute_.reset();
}
@@ -129,9 +129,9 @@ std::unique_ptr<minifi::extensions::curl::HTTPClient> InvokeHTTP::createHTTPClie
if (auto service = context.getControllerService(*ssl_context_name)) {
ssl_context_service = std::dynamic_pointer_cast<minifi::controllers::SSLContextService>(service);
if (!ssl_context_service)
- logger_->log_error("Controller service '%s' is not an SSLContextService", *ssl_context_name);
+ logger_->log_error("Controller service '{}' is not an SSLContextService", *ssl_context_name);
} else {
- logger_->log_error("Couldn't find controller service with name '%s'", *ssl_context_name);
+ logger_->log_error("Couldn't find controller service with name '{}'", *ssl_context_name);
}
}
@@ -209,10 +209,10 @@ void InvokeHTTP::onTrigger(const std::shared_ptr<core::ProcessContext>& context,
if (flow_file == nullptr) {
if (!shouldEmitFlowFile()) {
- logger_->log_debug("InvokeHTTP -- create flow file with %s", std::string(magic_enum::enum_name(method_)));
+ logger_->log_debug("InvokeHTTP -- create flow file with {}", magic_enum::enum_name(method_));
flow_file = session->create();
} else {
- logger_->log_debug("Exiting because method is %s and there is no flowfile available to execute it, yielding", std::string(magic_enum::enum_name(method_)));
+ logger_->log_debug("Exiting because method is {} and there is no flowfile available to execute it, yielding", magic_enum::enum_name(method_));
yield();
return;
}
@@ -227,7 +227,7 @@ void InvokeHTTP::onTrigger(const std::shared_ptr<core::ProcessContext>& context,
void InvokeHTTP::onTriggerWithClient(const std::shared_ptr<core::ProcessContext>& context, const std::shared_ptr<core::ProcessSession>& session,
const std::shared_ptr<core::FlowFile>& flow_file, minifi::extensions::curl::HTTPClient& client) {
- logger_->log_debug("onTrigger InvokeHTTP with %s to %s", std::string(magic_enum::enum_name(method_)), client.getURL());
+ logger_->log_debug("onTrigger InvokeHTTP with {} to {}", magic_enum::enum_name(method_), client.getURL());
const auto remove_callback_from_client_at_exit = gsl::finally([&client] {
client.setUploadCallback({});
@@ -246,7 +246,7 @@ void InvokeHTTP::onTriggerWithClient(const std::shared_ptr<core::ProcessContext>
callback_obj = std::make_unique<utils::HTTPUploadByteArrayInputCallback>();
}
client.setUploadCallback(std::move(callback_obj));
- logger_->log_trace("InvokeHTTP -- Setting callback, size is %d", flow_file->getSize());
+ logger_->log_trace("InvokeHTTP -- Setting callback, size is {}", flow_file->getSize());
if (!send_message_body_) {
client.setRequestHeader("Content-Length", "0");
@@ -290,7 +290,7 @@ void InvokeHTTP::onTriggerWithClient(const std::shared_ptr<core::ProcessContext>
bool is_success = ((http_code / 100) == 2);
- logger_->log_debug("isSuccess: %d, response code %" PRId64, is_success, http_code);
+ logger_->log_debug("isSuccess: {}, response code {}", is_success, http_code);
std::shared_ptr<core::FlowFile> response_flow = nullptr;
if (is_success) {
diff --git a/extensions/http-curl/protocols/RESTSender.cpp b/extensions/http-curl/protocols/RESTSender.cpp
index db65ab0e7..e4b835e1f 100644
--- a/extensions/http-curl/protocols/RESTSender.cpp
+++ b/extensions/http-curl/protocols/RESTSender.cpp
@@ -59,18 +59,18 @@ void RESTSender::initialize(core::controller::ControllerServiceProvider* control
}
if (auto req_encoding_str = configure->get(Configuration::nifi_c2_rest_request_encoding)) {
if (auto req_encoding = magic_enum::enum_cast<RequestEncoding>(*req_encoding_str, magic_enum::case_insensitive)) {
- logger_->log_debug("Using request encoding '%s'", std::string{magic_enum::enum_name(*req_encoding)});
+ logger_->log_debug("Using request encoding '{}'", magic_enum::enum_name(*req_encoding));
req_encoding_ = *req_encoding;
} else {
- logger_->log_error("Invalid request encoding '%s'", req_encoding_str.value());
+ logger_->log_error("Invalid request encoding '{}'", req_encoding_str.value());
req_encoding_ = RequestEncoding::none;
}
} else {
- logger_->log_debug("Request encoding is not specified, using default '%s'", std::string{magic_enum::enum_name(RequestEncoding::none)});
+ logger_->log_debug("Request encoding is not specified, using default '{}'", magic_enum::enum_name(RequestEncoding::none));
req_encoding_ = RequestEncoding::none;
}
}
- logger_->log_debug("Submitting to %s", rest_uri_);
+ logger_->log_debug("Submitting to {}", rest_uri_);
}
C2Payload RESTSender::consumePayload(const std::string &url, const C2Payload &payload, Direction direction, bool /*async*/) {
@@ -183,12 +183,12 @@ C2Payload RESTSender::sendPayload(const std::string& url, const Direction direct
const bool clientError = 400 <= respCode && respCode < 500;
const bool serverError = 500 <= respCode && respCode < 600;
if (clientError || serverError) {
- logger_->log_error("Error response code '" "%" PRId64 "' from '%s'", respCode, url);
+ logger_->log_error("Error response code '{}' from '{}'", respCode, url);
} else {
- logger_->log_debug("Response code '" "%" PRId64 "' from '%s'", respCode, url);
+ logger_->log_debug("Response code '{}' from '{}'", respCode, url);
}
const auto response_body_bytes = gsl::make_span(client.getResponseBody()).as_span<const std::byte>();
- logger_->log_trace("Received response: \"%s\"", [&] {return utils::StringUtils::escapeUnprintableBytes(response_body_bytes);});
+ logger_->log_trace("Received response: \"{}\"", [&] { return utils::StringUtils::escapeUnprintableBytes(response_body_bytes); });
if (isOkay && !clientError && !serverError) {
if (accepted_formats) {
C2Payload response_payload(payload.getOperation(), state::UpdateState::READ_COMPLETE, true);
diff --git a/extensions/http-curl/sitetosite/HTTPProtocol.cpp b/extensions/http-curl/sitetosite/HTTPProtocol.cpp
index 0f938c0ef..e4d94daf5 100644
--- a/extensions/http-curl/sitetosite/HTTPProtocol.cpp
+++ b/extensions/http-curl/sitetosite/HTTPProtocol.cpp
@@ -57,7 +57,7 @@ std::shared_ptr<sitetosite::Transaction> HttpSiteToSiteClient::createTransaction
client->submit();
auto http_stream = dynamic_cast<HttpStream*>(peer_->getStream());
if (peer_->getStream() != nullptr)
- logger_->log_debug("Closing %s", http_stream->getClientRef()->getURL());
+ logger_->log_debug("Closing {}", http_stream->getClientRef()->getURL());
if (client->getResponseCode() == 201) {
// parse the headers
auto intent_name = client->getHeaderValue("x-location-uri-intent");
@@ -85,16 +85,16 @@ std::shared_ptr<sitetosite::Transaction> HttpSiteToSiteClient::createTransaction
transaction_client->setRequestHeader(PROTOCOL_VERSION_HEADER, "1");
peer_->setStream(std::unique_ptr<io::BaseStream>(new HttpStream(transaction_client)));
- logger_->log_debug("Created transaction id -%s-", transaction->getUUID().to_string());
+ logger_->log_debug("Created transaction id -{}-", transaction->getUUID().to_string());
known_transactions_[transaction->getUUID()] = transaction;
return transaction;
}
} else {
- logger_->log_debug("Could not create transaction, intent is %s", intent_name);
+ logger_->log_debug("Could not create transaction, intent is {}", intent_name);
}
} else {
peer_->setStream(nullptr);
- logger_->log_debug("Could not create transaction, received %d", client->getResponseCode());
+ logger_->log_debug("Could not create transaction, received {}", client->getResponseCode());
}
return nullptr;
}
@@ -111,7 +111,7 @@ int HttpSiteToSiteClient::readResponse(const std::shared_ptr<sitetosite::Transac
code = sitetosite::CONFIRM_TRANSACTION;
message = std::string(client->getResponseBody().data(), client->getResponseBody().size());
} else {
- logger_->log_debug("Received response code %d", client->getResponseCode());
+ logger_->log_debug("Received response code {}", client->getResponseCode());
code = sitetosite::UNRECOGNIZED_RESPONSE_CODE;
}
return 1;
@@ -123,7 +123,7 @@ int HttpSiteToSiteClient::readResponse(const std::shared_ptr<sitetosite::Transac
if (current_code == sitetosite::CONFIRM_TRANSACTION && transaction->getState() == sitetosite::DATA_EXCHANGED) {
auto stream = dynamic_cast<HttpStream*>(peer_->getStream());
if (!stream->isFinished()) {
- logger_->log_debug("confirm read for %s, but not finished ", transaction->getUUIDStr());
+ logger_->log_debug("confirm read for {}, but not finished ", transaction->getUUIDStr());
if (stream->waitForDataAvailable()) {
code = sitetosite::CONTINUE_TRANSACTION;
return 1;
@@ -134,15 +134,15 @@ int HttpSiteToSiteClient::readResponse(const std::shared_ptr<sitetosite::Transac
} else {
auto stream = dynamic_cast<HttpStream*>(peer_->getStream());
if (stream->isFinished()) {
- logger_->log_debug("Finished %s ", transaction->getUUIDStr());
+ logger_->log_debug("Finished {} ", transaction->getUUIDStr());
code = sitetosite::FINISH_TRANSACTION;
current_code = sitetosite::FINISH_TRANSACTION;
} else {
if (stream->waitForDataAvailable()) {
- logger_->log_debug("data is available, so continuing transaction %s ", transaction->getUUIDStr());
+ logger_->log_debug("data is available, so continuing transaction {} ", transaction->getUUIDStr());
code = sitetosite::CONTINUE_TRANSACTION;
} else {
- logger_->log_debug("No data available for transaction %s ", transaction->getUUIDStr());
+ logger_->log_debug("No data available for transaction {} ", transaction->getUUIDStr());
code = sitetosite::FINISH_TRANSACTION;
current_code = sitetosite::FINISH_TRANSACTION;
}
@@ -240,7 +240,7 @@ void HttpSiteToSiteClient::closeTransaction(const utils::Identifier &transaction
}
std::string append_str;
- logger_->log_trace("Site to Site closing transaction %s", transaction->getUUIDStr());
+ logger_->log_trace("Site to Site closing transaction {}", transaction->getUUIDStr());
bool data_received = transaction->getDirection() == sitetosite::RECEIVE && (current_code == sitetosite::CONFIRM_TRANSACTION || current_code == sitetosite::TRANSACTION_FINISHED);
@@ -256,8 +256,8 @@ void HttpSiteToSiteClient::closeTransaction(const utils::Identifier &transaction
code = sitetosite::CANCEL_TRANSACTION;
} else {
std::string directon = transaction->getDirection() == sitetosite::RECEIVE ? "Receive" : "Send";
- logger_->log_error("Transaction %s to be closed is in unexpected state. Direction: %s, tranfers: %d, bytes: %llu, state: %d",
- transactionID.to_string(), directon, transaction->total_transfers_, transaction->_bytes, transaction->getState());
+ logger_->log_error("Transaction {} to be closed is in unexpected state. Direction: {}, tranfers: {}, bytes: {}, state: {}",
+ transactionID.to_string(), directon, transaction->total_transfers_, transaction->_bytes, magic_enum::enum_underlying(transaction->getState()));
}
std::stringstream uri;
@@ -279,12 +279,12 @@ void HttpSiteToSiteClient::closeTransaction(const utils::Identifier &transaction
client->submit();
- logger_->log_debug("Received %d response code from delete", client->getResponseCode());
+ logger_->log_debug("Received {} response code from delete", client->getResponseCode());
if (client->getResponseCode() == 400) {
std::string error(client->getResponseBody().data(), client->getResponseBody().size());
- core::logging::LOG_WARN(logger_) << "400 received: " << error;
+ logger_->log_warn("400 received: {}", error);
std::stringstream message;
message << "Received " << client->getResponseCode() << " from " << uri.str();
throw Exception(SITE2SITE_EXCEPTION, message.str());
diff --git a/extensions/http-curl/sitetosite/HTTPProtocol.h b/extensions/http-curl/sitetosite/HTTPProtocol.h
index 4cd008564..d92aaf34a 100644
--- a/extensions/http-curl/sitetosite/HTTPProtocol.h
+++ b/extensions/http-curl/sitetosite/HTTPProtocol.h
@@ -136,11 +136,11 @@ class HttpSiteToSiteClient : public sitetosite::SiteToSiteClient {
}
}
if (!this->peer_->getInterface().empty()) {
- logger_->log_info("HTTP Site2Site bind local network interface %s", this->peer_->getInterface());
+ logger_->log_info("HTTP Site2Site bind local network interface {}", this->peer_->getInterface());
http_client_->setInterface(this->peer_->getInterface());
}
if (!this->peer_->getHTTPProxy().host.empty()) {
- logger_->log_info("HTTP Site2Site setup http proxy host %s", this->peer_->getHTTPProxy().host);
+ logger_->log_info("HTTP Site2Site setup http proxy host {}", this->peer_->getHTTPProxy().host);
http_client_->setHTTPProxy(this->peer_->getHTTPProxy());
}
http_client_->setReadTimeout(idle_timeout_);
diff --git a/extensions/http-curl/sitetosite/PeersEntity.h b/extensions/http-curl/sitetosite/PeersEntity.h
index 34135da3c..7abf07fb6 100644
--- a/extensions/http-curl/sitetosite/PeersEntity.h
+++ b/extensions/http-curl/sitetosite/PeersEntity.h
@@ -27,13 +27,10 @@
#include "sitetosite/Peer.h"
#include "utils/StringUtils.h"
+#include "utils/Enum.h"
#include "Exception.h"
-namespace org {
-namespace apache {
-namespace nifi {
-namespace minifi {
-namespace sitetosite {
+namespace org::apache::nifi::minifi::sitetosite {
/**
* Represents a peer. Contains the parser for the Peer JSON.
@@ -78,12 +75,12 @@ class PeersEntity {
secure = false;
} else {
const auto err = utils::StringUtils::join_pack("could not parse secure string ", secureStr);
- logger->log_error("%s", err);
+ logger->log_error("{}", err);
throw std::logic_error{err};
}
} else {
- logger->log_warn("Invalid value type for secure, assuming false (rapidjson type id %i)",
- peer["secure"].GetType());
+ logger->log_warn("Invalid value type for secure, assuming false (rapidjson type id {})",
+ magic_enum::enum_underlying(peer["secure"].GetType()));
}
}
@@ -100,15 +97,15 @@ class PeersEntity {
sitetosite::PeerStatus status(std::make_shared<sitetosite::Peer>(id, hostname, port, secure), flowFileCount, true);
peer_statuses.push_back(std::move(status));
} else {
- logger->log_debug("hostname empty or port is zero. hostname: %s, port: %d", hostname, port);
+ logger->log_debug("hostname empty or port is zero. hostname: {}, port: {}", hostname, port);
}
}
} else {
- logger->log_debug("Peers is either not a member or is empty. String to analyze: %s", entity);
+ logger->log_debug("Peers is either not a member or is empty. String to analyze: {}", entity);
}
return true;
} catch (Exception &exception) {
- logger->log_debug("Caught Exception %s", exception.what());
+ logger->log_debug("Caught Exception {}", exception.what());
return false;
} catch (...) {
logger->log_debug("General exception occurred");
@@ -117,8 +114,4 @@ class PeersEntity {
}
};
-} /* namespace sitetosite */
-} /* namespace minifi */
-} /* namespace nifi */
-} /* namespace apache */
-} /* namespace org */
+} // namespace org::apache::nifi::minifi::sitetosite
diff --git a/extensions/http-curl/tests/C2PropertiesUpdateTests.cpp b/extensions/http-curl/tests/C2PropertiesUpdateTests.cpp
index 9f0ca8e11..59e4c1504 100644
--- a/extensions/http-curl/tests/C2PropertiesUpdateTests.cpp
+++ b/extensions/http-curl/tests/C2PropertiesUpdateTests.cpp
@@ -141,7 +141,7 @@ int main() {
// this sets the ostream logger
auto log_test_controller = LogTestController::getInstance(logger_properties);
- logger_properties->setHome(home_dir.string());
+ logger_properties->setHome(home_dir);
logger_properties->loadConfigureFile("conf/minifi-log.properties");
core::logging::LoggerConfiguration::getConfiguration().initialize(logger_properties);
diff --git a/extensions/http-curl/tests/C2UpdateAssetTest.cpp b/extensions/http-curl/tests/C2UpdateAssetTest.cpp
index ac545d180..5c0226ba2 100644
--- a/extensions/http-curl/tests/C2UpdateAssetTest.cpp
+++ b/extensions/http-curl/tests/C2UpdateAssetTest.cpp
@@ -215,12 +215,12 @@ int main() {
for (auto& op : operations) {
if (auto res = ack_handler.getState(op.id)) {
if (res->state != op.state) {
- controller.getLogger()->log_error("Operation '%s' in expected to return '%s', got '%s'", op.id, op.state, res->state);
+ controller.getLogger()->log_error("Operation '{}' in expected to return '{}', got '{}'", op.id, op.state, res->state);
assert(false);
}
if (op.details) {
if (res->details.find(op.details.value()) == std::string::npos) {
- controller.getLogger()->log_error("In operation '%s' failed to find '%s' in ack details '%s'", op.id, op.details.value(), res->details);
+ controller.getLogger()->log_error("In operation '{}' failed to find '{}' in ack details '{}'", op.id, op.details.value(), res->details);
assert(false);
}
}
@@ -249,12 +249,12 @@ int main() {
size_t file_count = utils::file::list_dir_all(asset_dir.string(), controller.getLogger()).size();
if (file_count != expected_files.size()) {
- controller.getLogger()->log_error("Expected %zu files, got %zu", expected_files.size(), file_count);
+ controller.getLogger()->log_error("Expected {} files, got {}", expected_files.size(), file_count);
assert(false);
}
for (auto& [path, content] : expected_files) {
if (utils::file::get_content(path) != content) {
- controller.getLogger()->log_error("File content mismatch at '%s'", path);
+ controller.getLogger()->log_error("File content mismatch at '{}'", path);
assert(false);
}
}
diff --git a/extensions/http-curl/tests/SiteToSiteRestTest.cpp b/extensions/http-curl/tests/SiteToSiteRestTest.cpp
index e0def91b4..b24880b8f 100644
--- a/extensions/http-curl/tests/SiteToSiteRestTest.cpp
+++ b/extensions/http-curl/tests/SiteToSiteRestTest.cpp
@@ -89,9 +89,9 @@ class SiteToSiteTestHarness : public HTTPIntegrationBase {
void runAssertions() override {
using org::apache::nifi::minifi::utils::verifyLogLinePresenceInPollTime;
if (isSecure) {
- assert(verifyLogLinePresenceInPollTime(std::chrono::milliseconds(wait_time_), "process group remote site2site port 10001, is secure 1"));
+ assert(verifyLogLinePresenceInPollTime(std::chrono::milliseconds(wait_time_), "process group remote site2site port 10001, is secure true"));
} else {
- assert(verifyLogLinePresenceInPollTime(std::chrono::milliseconds(wait_time_), "process group remote site2site port 10001, is secure 0"));
+ assert(verifyLogLinePresenceInPollTime(std::chrono::milliseconds(wait_time_), "process group remote site2site port 10001, is secure false"));
}
assert(verifyLogLinePresenceInPollTime(std::chrono::milliseconds(wait_time_), "ProcessGroup::refreshRemoteSite2SiteInfo -- curl_easy_perform() failed "));
}
diff --git a/extensions/http-curl/tests/VerifyInvokeHTTPGetTest.cpp b/extensions/http-curl/tests/VerifyInvokeHTTPGetTest.cpp
index c509877d2..31cf122e7 100644
--- a/extensions/http-curl/tests/VerifyInvokeHTTPGetTest.cpp
+++ b/extensions/http-curl/tests/VerifyInvokeHTTPGetTest.cpp
@@ -35,7 +35,7 @@ class VerifyRetryHTTPGet : public VerifyInvokeHTTP {
void runAssertions() override {
assert(org::apache::nifi::minifi::utils::verifyLogLinePresenceInPollTime(
std::chrono::seconds(10),
- "isSuccess: 0, response code 501"));
+ "isSuccess: false, response code 501"));
assert(org::apache::nifi::minifi::utils::verifyLogLinePresenceInPollTime(
std::chrono::seconds(10),
"from InvokeHTTP to relationship retry"));
diff --git a/extensions/http-curl/tests/VerifyInvokeHTTPPostTest.cpp b/extensions/http-curl/tests/VerifyInvokeHTTPPostTest.cpp
index bd65b19a0..8a72eab83 100644
--- a/extensions/http-curl/tests/VerifyInvokeHTTPPostTest.cpp
+++ b/extensions/http-curl/tests/VerifyInvokeHTTPPostTest.cpp
@@ -71,7 +71,7 @@ class VerifyNoRetryInvokeHTTP : public VerifyInvokeHTTP {
using org::apache::nifi::minifi::utils::verifyLogLinePresenceInPollTime;
assert(verifyLogLinePresenceInPollTime(std::chrono::seconds(6),
"key:invokehttp.status.message value:HTTP/1.1 404 Not Found",
- "isSuccess: 0, response code 404"));
+ "isSuccess: false, response code 404"));
}
};
@@ -81,7 +81,7 @@ class VerifyRetryInvokeHTTP : public VerifyInvokeHTTP {
using org::apache::nifi::minifi::utils::verifyLogLinePresenceInPollTime;
assert(verifyLogLinePresenceInPollTime(std::chrono::seconds(6),
"key:invokehttp.status.message value:HTTP/1.1 501 Not Implemented",
- "isSuccess: 0, response code 501"));
+ "isSuccess: false, response code 501"));
}
};
diff --git a/extensions/jni/ExecuteJavaProcessor.cpp b/extensions/jni/ExecuteJavaProcessor.cpp
index 069267f23..35cf5861c 100644
--- a/extensions/jni/ExecuteJavaProcessor.cpp
+++ b/extensions/jni/ExecuteJavaProcessor.cpp
@@ -198,11 +198,11 @@ void ExecuteJavaProcessor::onTrigger(const std::shared_ptr<core::ProcessContext>
} catch (const JavaException &je) {
// clear the java exception so we don't continually wrap it
env->ExceptionClear();
- logger_->log_error(" Java Exception occurred during onTrigger, reason: %s", je.what());
+ logger_->log_error(" Java Exception occurred during onTrigger, reason: {}", je.what());
} catch (const std::exception &e) {
// clear the java exception so we don't continually wrap it
env->ExceptionClear();
- logger_->log_error(" Exception occurred during onTrigger, reason: %s", e.what());
+ logger_->log_error(" Exception occurred during onTrigger, reason: {}", e.what());
}
}
diff --git a/extensions/jni/JVMCreator.h b/extensions/jni/JVMCreator.h
index 6524bd439..4660b2bd5 100644
--- a/extensions/jni/JVMCreator.h
+++ b/extensions/jni/JVMCreator.h
@@ -53,7 +53,7 @@ class JVMCreator : public minifi::core::CoreComponent {
}
for (const auto &path : pathOrFiles) {
- logger_->log_debug("Adding path %s", path);
+ logger_->log_debug("Adding path {}", path);
minifi::utils::file::FileUtils::addFilesMatchingExtension(logger_, path, ".jar", classpaths_);
}
}
diff --git a/extensions/jni/jvm/JniLogger.cpp b/extensions/jni/jvm/JniLogger.cpp
index ae3985d9d..4da8edad0 100644
--- a/extensions/jni/jvm/JniLogger.cpp
+++ b/extensions/jni/jvm/JniLogger.cpp
@@ -67,32 +67,32 @@ JNIEXPORT void JNICALL Java_org_apache_nifi_processor_JniLogger_warn(JNIEnv *env
minifi::jni::JniLogger *logger_ref = minifi::jni::JVMLoader::getPtr<minifi::jni::JniLogger>(env, obj);
if (!logger_ref)
return;
- logger_ref->logger_reference_->log_warn(JniStringToUTF(env, msg).c_str());
+ logger_ref->logger_reference_->log_warn("{}", JniStringToUTF(env, msg));
}
JNIEXPORT void JNICALL Java_org_apache_nifi_processor_JniLogger_error(JNIEnv *env, jobject obj, jstring msg) {
minifi::jni::JniLogger *logger_ref = minifi::jni::JVMLoader::getPtr<minifi::jni::JniLogger>(env, obj);
if (!logger_ref)
return;
- logger_ref->logger_reference_->log_error(JniStringToUTF(env, msg).c_str());
+ logger_ref->logger_reference_->log_error("{}", JniStringToUTF(env, msg));
}
JNIEXPORT void JNICALL Java_org_apache_nifi_processor_JniLogger_info(JNIEnv *env, jobject obj, jstring msg) {
minifi::jni::JniLogger *logger_ref = minifi::jni::JVMLoader::getPtr<minifi::jni::JniLogger>(env, obj);
if (!logger_ref)
return;
- logger_ref->logger_reference_->log_info(JniStringToUTF(env, msg).c_str());
+ logger_ref->logger_reference_->log_info("{}", JniStringToUTF(env, msg));
}
JNIEXPORT void JNICALL Java_org_apache_nifi_processor_JniLogger_debug(JNIEnv *env, jobject obj, jstring msg) {
minifi::jni::JniLogger *logger_ref = minifi::jni::JVMLoader::getPtr<minifi::jni::JniLogger>(env, obj);
if (!logger_ref)
return;
- logger_ref->logger_reference_->log_debug(JniStringToUTF(env, msg).c_str());
+ logger_ref->logger_reference_->log_debug("{}", JniStringToUTF(env, msg));
}
JNIEXPORT void JNICALL Java_org_apache_nifi_processor_JniLogger_trace(JNIEnv *env, jobject obj, jstring msg) {
minifi::jni::JniLogger *logger_ref = minifi::jni::JVMLoader::getPtr<minifi::jni::JniLogger>(env, obj);
if (!logger_ref)
return;
- logger_ref->logger_reference_->log_trace(JniStringToUTF(env, msg).c_str());
+ logger_ref->logger_reference_->log_trace("{}", JniStringToUTF(env, msg));
}
#ifdef __cplusplus
diff --git a/extensions/jni/nifi-framework-jni/src/main/java/org/apache/nifi/processor/JniClassLoader.java b/extensions/jni/nifi-framework-jni/src/main/java/org/apache/nifi/processor/JniClassLoader.java
index abe81f27a..7738968e3 100644
--- a/extensions/jni/nifi-framework-jni/src/main/java/org/apache/nifi/processor/JniClassLoader.java
+++ b/extensions/jni/nifi-framework-jni/src/main/java/org/apache/nifi/processor/JniClassLoader.java
@@ -388,7 +388,7 @@ public class JniClassLoader {
initializer = ConfigurableComponentInitializerFactory.createComponentInitializer(manager,configurableComponent.getClass());
initializer.initialize(configurableComponent);
} catch (final InitializationException e) {
- logger.warn(String.format("Unable to initialize component %s due to %s", configurableComponent.getClass().getName(), e.getMessage()));
+ logger.warn(String.format("Unable to initialize component {} due to {}", configurableComponent.getClass().getName(), e.getMessage()));
}
}
diff --git a/extensions/kubernetes/controllerservice/KubernetesControllerService.cpp b/extensions/kubernetes/controllerservice/KubernetesControllerService.cpp
index 8b6a7dbd9..ac2ef0f61 100644
--- a/extensions/kubernetes/controllerservice/KubernetesControllerService.cpp
+++ b/extensions/kubernetes/controllerservice/KubernetesControllerService.cpp
@@ -55,7 +55,7 @@ void KubernetesControllerService::onEnable() {
try {
api_client_ = std::make_unique<kubernetes::ApiClient>();
} catch (const std::runtime_error& ex) {
- logger_->log_error("Could not create the API client in the Kubernetes Controller Service: %s", ex.what());
+ logger_->log_error("Could not create the API client in the Kubernetes Controller Service: {}", ex.what());
}
std::string namespace_filter;
@@ -94,7 +94,7 @@ v1_pod_list_unique_ptr getPods(gsl::not_null<apiClient_t*> api_client, core::log
nullptr, // resourceVersionMatch
0, // timeoutSeconds
0)}; // watch
- logger.log_info("The return code of the Kubernetes API listPodForAllNamespaces call: %ld", api_client->response_code);
+ logger.log_info("The return code of the Kubernetes API listPodForAllNamespaces call: {}", api_client->response_code);
return pod_list;
}
@@ -138,7 +138,7 @@ std::optional<std::vector<KubernetesControllerService::AttributeMap>> Kubernetes
}
}
- logger_->log_info("Found %zu containers (after regex filtering) in %ld Kubernetes pods (unfiltered)", container_attribute_maps.size(), pod_list->items->count);
+ logger_->log_info("Found {} containers (after regex filtering) in {} Kubernetes pods (unfiltered)", container_attribute_maps.size(), pod_list->items->count);
return container_attribute_maps;
}
diff --git a/extensions/kubernetes/processors/CollectKubernetesPodMetrics.cpp b/extensions/kubernetes/processors/CollectKubernetesPodMetrics.cpp
index 35bddc37d..179688304 100644
--- a/extensions/kubernetes/processors/CollectKubernetesPodMetrics.cpp
+++ b/extensions/kubernetes/processors/CollectKubernetesPodMetrics.cpp
@@ -59,7 +59,7 @@ void CollectKubernetesPodMetrics::onTrigger(const std::shared_ptr<core::ProcessC
const auto metrics = kubernetes::metrics::podMetricsList(*api_client);
if (!metrics) {
- logger_->log_error("Could not get metrics from the Kubernetes API: %s", metrics.error());
+ logger_->log_error("Could not get metrics from the Kubernetes API: {}", metrics.error());
return;
}
@@ -67,11 +67,11 @@ void CollectKubernetesPodMetrics::onTrigger(const std::shared_ptr<core::ProcessC
return kubernetes_controller_service_->matchesRegexFilters(container_info);
});
if (!metrics_filtered) {
- logger_->log_error("Error parsing or filtering the metrics received from the Kubernetes API: %s", metrics_filtered.error());
+ logger_->log_error("Error parsing or filtering the metrics received from the Kubernetes API: {}", metrics_filtered.error());
return;
}
- logger_->log_debug("Metrics received from the Kubernetes API: %s", metrics_filtered.value());
+ logger_->log_debug("Metrics received from the Kubernetes API: {}", metrics_filtered.value());
const auto flow_file = session->create();
session->writeBuffer(flow_file, metrics_filtered.value());
diff --git a/extensions/libarchive/ArchiveStreamProvider.cpp b/extensions/libarchive/ArchiveStreamProvider.cpp
index 67fcb4dd6..d9ebf3eee 100644
--- a/extensions/libarchive/ArchiveStreamProvider.cpp
+++ b/extensions/libarchive/ArchiveStreamProvider.cpp
@@ -36,7 +36,7 @@ class ArchiveStreamProviderImpl : public ArchiveStreamProvider {
auto format = magic_enum::enum_cast<CompressionFormat>(compress_format);
if (!format) {
if (logger) {
- logger->log_error("Unrecognized compression format '%s'", compress_format);
+ logger->log_error("Unrecognized compression format '{}'", compress_format);
}
return nullptr;
}
diff --git a/extensions/libarchive/BinFiles.cpp b/extensions/libarchive/BinFiles.cpp
index 1b0f61e1d..5d1c7e55f 100644
--- a/extensions/libarchive/BinFiles.cpp
+++ b/extensions/libarchive/BinFiles.cpp
@@ -52,31 +52,31 @@ void BinFiles::onSchedule(core::ProcessContext *context, core::ProcessSessionFac
uint64_t val64;
if (context->getProperty(MinSize, val64)) {
this->binManager_.setMinSize(val64);
- logger_->log_debug("BinFiles: MinSize [%" PRId64 "]", val64);
+ logger_->log_debug("BinFiles: MinSize [{}]", val64);
}
if (context->getProperty(MaxSize, val64)) {
this->binManager_.setMaxSize(val64);
- logger_->log_debug("BinFiles: MaxSize [%" PRId64 "]", val64);
+ logger_->log_debug("BinFiles: MaxSize [{}]", val64);
}
if (context->getProperty(MinEntries, val32)) {
this->binManager_.setMinEntries(val32);
- logger_->log_debug("BinFiles: MinEntries [%" PRIu32 "]", val32);
+ logger_->log_debug("BinFiles: MinEntries [{}]", val32);
}
if (context->getProperty(MaxEntries, val32)) {
this->binManager_.setMaxEntries(val32);
- logger_->log_debug("BinFiles: MaxEntries [%" PRIu32 "]", val32);
+ logger_->log_debug("BinFiles: MaxEntries [{}]", val32);
}
if (context->getProperty(MaxBinCount, maxBinCount_)) {
- logger_->log_debug("BinFiles: MaxBinCount [%" PRIu32 "]", maxBinCount_);
+ logger_->log_debug("BinFiles: MaxBinCount [{}]", maxBinCount_);
}
if (auto max_bin_age = context->getProperty<core::TimePeriodValue>(MaxBinAge)) {
// We need to trigger the processor even when there are no incoming flow files so that it can flush the bins.
setTriggerWhenEmpty(true);
this->binManager_.setBinAge(max_bin_age->getMilliseconds());
- logger_->log_debug("BinFiles: MaxBinAge [%" PRId64 "] ms", int64_t{max_bin_age->getMilliseconds().count()});
+ logger_->log_debug("BinFiles: MaxBinAge [{}]", max_bin_age->getMilliseconds());
}
if (context->getProperty(BatchSize, batchSize_)) {
- logger_->log_debug("BinFiles: BatchSize [%" PRIu32 "]", batchSize_);
+ logger_->log_debug("BinFiles: BatchSize [{}]", batchSize_);
}
}
@@ -104,7 +104,7 @@ void BinManager::gatherReadyBins() {
readyBin_.push_back(std::move(bin));
queue->pop_front();
binCount_--;
- logger_->log_debug("BinManager move bin %s to ready bins for group %s", readyBin_.back()->getUUIDStr(), readyBin_.back()->getGroupId());
+ logger_->log_debug("BinManager move bin {} to ready bins for group {}", readyBin_.back()->getUUIDStr(), readyBin_.back()->getGroupId());
} else {
break;
}
@@ -117,7 +117,7 @@ void BinManager::gatherReadyBins() {
// erase from the map if the queue is empty for the group
groupBinMap_.erase(group);
}
- logger_->log_debug("BinManager groupBinMap size %d", groupBinMap_.size());
+ logger_->log_debug("BinManager groupBinMap size {}", groupBinMap_.size());
}
void BinManager::removeOldestBin() {
@@ -139,12 +139,12 @@ void BinManager::removeOldestBin() {
readyBin_.push_back(std::move(remove));
(*oldqueue)->pop_front();
binCount_--;
- logger_->log_debug("BinManager move bin %s to ready bins for group %s", readyBin_.back()->getUUIDStr(), readyBin_.back()->getGroupId());
+ logger_->log_debug("BinManager move bin {} to ready bins for group {}", readyBin_.back()->getUUIDStr(), readyBin_.back()->getGroupId());
if ((*oldqueue)->empty()) {
groupBinMap_.erase(group);
}
}
- logger_->log_debug("BinManager groupBinMap size %d", groupBinMap_.size());
+ logger_->log_debug("BinManager groupBinMap size {}", groupBinMap_.size());
}
void BinManager::getReadyBin(std::deque<std::unique_ptr<Bin>> &retBins) {
@@ -169,7 +169,7 @@ bool BinManager::offer(const std::string &group, const std::shared_ptr<core::Flo
if (!bin->offer(flow))
return false;
readyBin_.push_back(std::move(bin));
- logger_->log_debug("BinManager move bin %s to ready bins for group %s", readyBin_.back()->getUUIDStr(), group);
+ logger_->log_debug("BinManager move bin {} to ready bins for group {}", readyBin_.back()->getUUIDStr(), group);
return true;
}
auto search = groupBinMap_.find(group);
@@ -183,7 +183,7 @@ bool BinManager::offer(const std::string &group, const std::shared_ptr<core::Flo
if (!bin->offer(flow))
return false;
queue->push_back(std::move(bin));
- logger_->log_debug("BinManager add bin %s to group %s", queue->back()->getUUIDStr(), group);
+ logger_->log_debug("BinManager add bin {} to group {}", queue->back()->getUUIDStr(), group);
binCount_++;
}
} else {
@@ -192,7 +192,7 @@ bool BinManager::offer(const std::string &group, const std::shared_ptr<core::Flo
return false;
queue->push_back(std::move(bin));
binCount_++;
- logger_->log_debug("BinManager add bin %s to group %s", queue->back()->getUUIDStr(), group);
+ logger_->log_debug("BinManager add bin {} to group {}", queue->back()->getUUIDStr(), group);
}
} else {
auto queue = std::make_unique<std::deque<std::unique_ptr<Bin>>>();
@@ -200,7 +200,7 @@ bool BinManager::offer(const std::string &group, const std::shared_ptr<core::Flo
if (!bin->offer(flow))
return false;
queue->push_back(std::move(bin));
- logger_->log_debug("BinManager add bin %s to group %s", queue->back()->getUUIDStr(), group);
+ logger_->log_debug("BinManager add bin {} to group {}", queue->back()->getUUIDStr(), group);
groupBinMap_.insert(std::make_pair(group, std::move(queue)));
binCount_++;
}
@@ -251,12 +251,12 @@ void BinFiles::processReadyBins(std::deque<std::unique_ptr<Bin>> ready_bins, cor
try {
addFlowsToSession(session, bin);
- logger_->log_debug("BinFiles start to process bin %s for group %s", bin->getUUIDStr(), bin->getGroupId());
+ logger_->log_debug("BinFiles start to process bin {} for group {}", bin->getUUIDStr(), bin->getGroupId());
if (!processBin(session, bin))
transferFlowsToFail(session, bin);
session.commit();
} catch(const std::exception& ex) {
- logger_->log_error("Caught Exception type: '%s' while merging ready bin: '%s'", typeid(ex).name(), ex.what());
+ logger_->log_error("Caught Exception type: '{}' while merging ready bin: '{}'", typeid(ex).name(), ex.what());
binManager_.addReadyBin(std::move(bin));
session.rollback();
}
@@ -268,7 +268,7 @@ std::deque<std::unique_ptr<Bin>> BinFiles::gatherReadyBins(core::ProcessContext
if (gsl::narrow<uint32_t>(binManager_.getBinCount()) > maxBinCount_) {
// bin count reach max allowed
context.yield();
- logger_->log_debug("BinFiles reach max bin count %d", binManager_.getBinCount());
+ logger_->log_debug("BinFiles reach max bin count {}", binManager_.getBinCount());
binManager_.removeOldestBin();
}
diff --git a/extensions/libarchive/BinFiles.h b/extensions/libarchive/BinFiles.h
index db549f680..24bb601a2 100644
--- a/extensions/libarchive/BinFiles.h
+++ b/extensions/libarchive/BinFiles.h
@@ -52,10 +52,10 @@ class Bin {
queued_data_size_ = 0;
creation_dated_ = std::chrono::system_clock::now();
uuid_ = utils::IdGenerator::getIdGenerator()->generate();
- logger_->log_debug("Bin %s for group %s created", getUUIDStr(), groupId_);
+ logger_->log_debug("Bin {} for group {} created", getUUIDStr(), groupId_);
}
virtual ~Bin() {
- logger_->log_debug("Bin %s for group %s destroyed", getUUIDStr(), groupId_);
+ logger_->log_debug("Bin {} for group {} destroyed", getUUIDStr(), groupId_);
}
[[nodiscard]] bool isFull() const {
return queued_data_size_ >= maxSize_ || queue_.size() >= maxEntries_;
@@ -91,7 +91,7 @@ class Bin {
queue_.push_back(flow);
queued_data_size_ += flow->getSize();
- logger_->log_debug("Bin %s for group %s offer size %zu byte %" PRIu64 " min_entry %zu max_entry %zu", getUUIDStr(), groupId_, queue_.size(), queued_data_size_, minEntries_, maxEntries_);
+ logger_->log_debug("Bin {} for group {} offer size {} byte {} min_entry {} max_entry {}", getUUIDStr(), groupId_, queue_.size(), queued_data_size_, minEntries_, maxEntries_);
return true;
}
@@ -295,4 +295,3 @@ class BinFiles : public core::Processor {
};
} // namespace org::apache::nifi::minifi::processors
-
diff --git a/extensions/libarchive/CompressContent.cpp b/extensions/libarchive/CompressContent.cpp
index 966fa7de2..6bcab1fd9 100644
--- a/extensions/libarchive/CompressContent.cpp
+++ b/extensions/libarchive/CompressContent.cpp
@@ -61,8 +61,8 @@ void CompressContent::onSchedule(core::ProcessContext *context, core::ProcessSes
context->getProperty(EncapsulateInTar, encapsulateInTar_);
context->getProperty(BatchSize, batchSize_);
- logger_->log_info("Compress Content: Mode [%s] Format [%s] Level [%d] UpdateFileName [%d] EncapsulateInTar [%d]",
- std::string{magic_enum::enum_name(compressMode_)}, std::string{magic_enum::enum_name(compressFormat_)}, compressLevel_, updateFileName_, encapsulateInTar_);
+ logger_->log_info("Compress Content: Mode [{}] Format [{}] Level [{}] UpdateFileName [{}] EncapsulateInTar [{}]",
+ magic_enum::enum_name(compressMode_), magic_enum::enum_name(compressFormat_), compressLevel_, updateFileName_, encapsulateInTar_);
}
void CompressContent::onTrigger(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::ProcessSession> &session) {
@@ -89,7 +89,7 @@ void CompressContent::processFlowFile(const std::shared_ptr<core::FlowFile>& flo
std::string attr;
flowFile->getAttribute(core::SpecialFlowAttribute::MIME_TYPE, attr);
if (attr.empty()) {
- logger_->log_error("No %s attribute existed for the flow, route to failure", std::string(core::SpecialFlowAttribute::MIME_TYPE));
+ logger_->log_error("No {} attribute existed for the flow, route to failure", core::SpecialFlowAttribute::MIME_TYPE);
session->transfer(flowFile, Failure);
return;
}
@@ -97,7 +97,7 @@ void CompressContent::processFlowFile(const std::shared_ptr<core::FlowFile>& flo
if (search != compressionFormatMimeTypeMap_.end()) {
compressFormat = search->second;
} else {
- logger_->log_info("Mime type of %s is not indicated a support format, route to success", attr);
+ logger_->log_info("Mime type of {} is not indicated a support format, route to success", attr);
session->transfer(flowFile, Success);
return;
}
@@ -113,12 +113,12 @@ void CompressContent::processFlowFile(const std::shared_ptr<core::FlowFile>& flo
return;
}
if (compressFormat == io::CompressionFormat::BZIP2 && archive_bzlib_version() == nullptr) {
- logger_->log_error("%s compression format is requested, but the agent was compiled without BZip2 support", std::string{magic_enum::enum_name(compressFormat)});
+ logger_->log_error("{} compression format is requested, but the agent was compiled without BZip2 support", magic_enum::enum_name(compressFormat));
session->transfer(flowFile, Failure);
return;
}
if ((compressFormat == io::CompressionFormat::LZMA || compressFormat == io::CompressionFormat::XZ_LZMA2) && archive_liblzma_version() == nullptr) {
- logger_->log_error("%s compression format is requested, but the agent was compiled without LZMA support ", std::string{magic_enum::enum_name(compressFormat)});
+ logger_->log_error("{} compression format is requested, but the agent was compiled without LZMA support ", magic_enum::enum_name(compressFormat));
session->transfer(flowFile, Failure);
return;
}
@@ -170,7 +170,7 @@ void CompressContent::processFlowFile(const std::shared_ptr<core::FlowFile>& flo
}
if (!success) {
- logger_->log_error("Compress Content processing fail for the flow with UUID %s", flowFile->getUUIDStr());
+ logger_->log_error("Compress Content processing fail for the flow with UUID {}", flowFile->getUUIDStr());
session->transfer(flowFile, Failure);
session->remove(result);
} else {
@@ -197,7 +197,7 @@ void CompressContent::processFlowFile(const std::shared_ptr<core::FlowFile>& flo
}
}
}
- logger_->log_debug("Compress Content processing success for the flow with UUID %s name %s", result->getUUIDStr(), fileName);
+ logger_->log_debug("Compress Content processing success for the flow with UUID {} name {}", result->getUUIDStr(), fileName);
session->transfer(result, Success);
}
}
diff --git a/extensions/libarchive/FocusArchiveEntry.cpp b/extensions/libarchive/FocusArchiveEntry.cpp
index b625827da..7e782c53e 100644
--- a/extensions/libarchive/FocusArchiveEntry.cpp
+++ b/extensions/libarchive/FocusArchiveEntry.cpp
@@ -66,10 +66,10 @@ void FocusArchiveEntry::onTrigger(core::ProcessContext *context, core::ProcessSe
for (auto &entryMetadata : archiveMetadata.entryMetadata) {
if (entryMetadata.entryType == AE_IFREG) {
- logger_->log_info("FocusArchiveEntry importing %s from %s", entryMetadata.entryName, entryMetadata.tmpFileName.string());
+ logger_->log_info("FocusArchiveEntry importing {} from {}", entryMetadata.entryName, entryMetadata.tmpFileName);
session->import(entryMetadata.tmpFileName.string(), flowFile, false, 0);
utils::Identifier stashKeyUuid = id_generator_->generate();
- logger_->log_debug("FocusArchiveEntry generated stash key %s for entry %s", stashKeyUuid.to_string(), entryMetadata.entryName);
+ logger_->log_debug("FocusArchiveEntry generated stash key {} for entry {}", stashKeyUuid.to_string(), entryMetadata.entryName);
entryMetadata.stashKey = stashKeyUuid.to_string();
if (entryMetadata.entryName == archiveMetadata.focusedEntry) {
@@ -85,7 +85,7 @@ void FocusArchiveEntry::onTrigger(core::ProcessContext *context, core::ProcessSe
if (!targetEntryStashKey.empty()) {
session->restore(targetEntryStashKey, flowFile);
} else {
- logger_->log_warn("FocusArchiveEntry failed to locate target entry: %s",
+ logger_->log_warn("FocusArchiveEntry failed to locate target entry: {}",
archiveMetadata.focusedEntry.c_str());
}
@@ -100,7 +100,7 @@ void FocusArchiveEntry::onTrigger(core::ProcessContext *context, core::ProcessSe
try {
archiveStack.loadJsonString(existingLensStack);
} catch (Exception &exception) {
- logger_->log_debug(exception.what());
+ logger_->log_debug("{}", exception.what());
context->yield();
return;
}
@@ -163,7 +163,7 @@ int64_t FocusArchiveEntry::ReadCallback::operator()(const std::shared_ptr<io::In
// Read each item in the archive
if (archive_read_open(inputArchive, &data, ok_cb, read_cb, ok_cb)) {
- logger_->log_error("FocusArchiveEntry can't open due to archive error: %s", archive_error_string(inputArchive));
+ logger_->log_error("FocusArchiveEntry can't open due to archive error: {}", archive_error_string(inputArchive));
return nlen;
}
@@ -175,12 +175,12 @@ int64_t FocusArchiveEntry::ReadCallback::operator()(const std::shared_ptr<io::In
}
if (res < ARCHIVE_OK) {
- logger_->log_error("FocusArchiveEntry can't read header due to archive error: %s", archive_error_string(inputArchive));
+ logger_->log_error("FocusArchiveEntry can't read header due to archive error: {}", archive_error_string(inputArchive));
return nlen;
}
if (res < ARCHIVE_WARN) {
- logger_->log_warn("FocusArchiveEntry got archive warning while reading header: %s", archive_error_string(inputArchive));
+ logger_->log_warn("FocusArchiveEntry got archive warning while reading header: {}", archive_error_string(inputArchive));
return nlen;
}
@@ -201,15 +201,15 @@ int64_t FocusArchiveEntry::ReadCallback::operator()(const std::shared_ptr<io::In
metadata.entryMTime = archive_entry_mtime(entry);
metadata.entryMTimeNsec = archive_entry_mtime_nsec(entry);
- logger_->log_info("FocusArchiveEntry entry type of %s is: %d", entryName, metadata.entryType);
- logger_->log_info("FocusArchiveEntry entry perm of %s is: %d", entryName, metadata.entryPerm);
+ logger_->log_info("FocusArchiveEntry entry type of {} is: {}", entryName, metadata.entryType);
+ logger_->log_info("FocusArchiveEntry entry perm of {} is: {}", entryName, metadata.entryPerm);
// Write content to tmp file
if (entryType == AE_IFREG) {
auto tmpFileName = file_man_->unique_file(true);
metadata.tmpFileName = tmpFileName;
metadata.entryType = entryType;
- logger_->log_info("FocusArchiveEntry extracting %s to: %s", entryName, tmpFileName.string());
+ logger_->log_info("FocusArchiveEntry extracting {} to: {}", entryName, tmpFileName);
auto fd = fopen(tmpFileName.string().c_str(), "w");
diff --git a/extensions/libarchive/ManipulateArchive.cpp b/extensions/libarchive/ManipulateArchive.cpp
index 1a59b09a4..73e34404c 100644
--- a/extensions/libarchive/ManipulateArchive.cpp
+++ b/extensions/libarchive/ManipulateArchive.cpp
@@ -60,7 +60,7 @@ void ManipulateArchive::onSchedule(core::ProcessContext *context, core::ProcessS
// Operation must be one of copy, move, touch or remove
if (!op_create && (operation_ != OPERATION_REMOVE)) {
- logger_->log_error("Invalid operation %s for ManipulateArchive.", operation_);
+ logger_->log_error("Invalid operation {} for ManipulateArchive.", operation_);
invalid = true;
}
@@ -71,13 +71,13 @@ void ManipulateArchive::onSchedule(core::ProcessContext *context, core::ProcessS
// All operations which create new entries require a set destination
if (op_create == destination_.empty()) {
- logger_->log_error("ManipulateArchive requires a destination for %s.", operation_);
+ logger_->log_error("ManipulateArchive requires a destination for {}.", operation_);
invalid = true;
}
// The only operation that doesn't require an existing target is touch
if ((operation_ == OPERATION_TOUCH) != targetEntry_.empty()) {
- logger_->log_error("ManipulateArchive requires a target for %s.", operation_);
+ logger_->log_error("ManipulateArchive requires a target for {}.", operation_);
invalid = true;
}
@@ -109,19 +109,19 @@ void ManipulateArchive::onTrigger(core::ProcessContext* /*context*/, core::Proce
auto target_position = archiveMetadata.find(targetEntry_);
if (target_position == entries_end && operation_ != OPERATION_TOUCH) {
- logger_->log_warn("ManipulateArchive could not find entry %s to %s!",
+ logger_->log_warn("ManipulateArchive could not find entry {} to {}!",
targetEntry_, operation_);
session->transfer(flowFile, Failure);
return;
} else {
- logger_->log_info("ManipulateArchive found %s for %s.",
+ logger_->log_info("ManipulateArchive found {} for {}.",
targetEntry_, operation_);
}
if (!destination_.empty()) {
auto dest_position = archiveMetadata.find(destination_);
if (dest_position != entries_end) {
- logger_->log_warn("ManipulateArchive cannot perform %s to existing destination_ %s!",
+ logger_->log_warn("ManipulateArchive cannot perform {} to existing destination_ {}!",
operation_, destination_);
session->transfer(flowFile, Failure);
return;
@@ -136,13 +136,13 @@ void ManipulateArchive::onTrigger(core::ProcessContext* /*context*/, core::Proce
position = archiveMetadata.find(positionEntry);
if (position == entries_end)
- logger_->log_warn("ManipulateArchive could not find entry %s to "
- "perform %s %s; appending to end of archive...",
+ logger_->log_warn("ManipulateArchive could not find entry {} to "
+ "perform {} {}; appending to end of archive...",
positionEntry, operation_,
after_.empty() ? "before" : "after");
else
- logger_->log_info("ManipulateArchive found entry %s to %s %s.",
+ logger_->log_info("ManipulateArchive found entry {} to {} {}.",
positionEntry, operation_,
after_.empty() ? "before" : "after");
diff --git a/extensions/libarchive/MergeContent.cpp b/extensions/libarchive/MergeContent.cpp
index 556b584ee..4f9d3ca78 100644
--- a/extensions/libarchive/MergeContent.cpp
+++ b/extensions/libarchive/MergeContent.cpp
@@ -67,18 +67,18 @@ void MergeContent::onSchedule(core::ProcessContext *context, core::ProcessSessio
if (mergeStrategy_ == merge_content_options::MERGE_STRATEGY_DEFRAGMENT) {
binManager_.setFileCount(FRAGMENT_COUNT_ATTRIBUTE);
}
- logger_->log_debug("Merge Content: Strategy [%s] Format [%s] Correlation Attribute [%s] Delimiter [%s]", mergeStrategy_, mergeFormat_, correlationAttributeName_, delimiterStrategy_);
- logger_->log_debug("Merge Content: Footer [%s] Header [%s] Demarcator [%s] KeepPath [%d]", footer_, header_, demarcator_, keepPath_);
+ logger_->log_debug("Merge Content: Strategy [{}] Format [{}] Correlation Attribute [{}] Delimiter [{}]", mergeStrategy_, mergeFormat_, correlationAttributeName_, delimiterStrategy_);
+ logger_->log_debug("Merge Content: Footer [{}] Header [{}] Demarcator [{}] KeepPath [{}]", footer_, header_, demarcator_, keepPath_);
if (mergeFormat_ != merge_content_options::MERGE_FORMAT_CONCAT_VALUE) {
if (!header_.empty()) {
- logger_->log_warn("Header property only works with the Binary Concatenation format, value [%s] is ignored", header_);
+ logger_->log_warn("Header property only works with the Binary Concatenation format, value [{}] is ignored", header_);
}
if (!footer_.empty()) {
- logger_->log_warn("Footer property only works with the Binary Concatenation format, value [%s] is ignored", footer_);
+ logger_->log_warn("Footer property only works with the Binary Concatenation format, value [{}] is ignored", footer_);
}
if (!demarcator_.empty()) {
- logger_->log_warn("Demarcator property only works with the Binary Concatenation format, value [%s] is ignored", demarcator_);
+ logger_->log_warn("Demarcator property only works with the Binary Concatenation format, value [{}] is ignored", demarcator_);
}
}
@@ -103,7 +103,7 @@ void MergeContent::onSchedule(core::ProcessContext *context, core::ProcessSessio
void MergeContent::validatePropertyOptions() {
if (mergeStrategy_ != merge_content_options::MERGE_STRATEGY_DEFRAGMENT &&
mergeStrategy_ != merge_content_options::MERGE_STRATEGY_BIN_PACK) {
- logger_->log_error("Merge strategy not supported %s", mergeStrategy_);
+ logger_->log_error("Merge strategy not supported {}", mergeStrategy_);
throw minifi::Exception(ExceptionType::PROCESSOR_EXCEPTION, "Invalid merge strategy: " + attributeStrategy_);
}
@@ -111,19 +111,19 @@ void MergeContent::validatePropertyOptions() {
mergeFormat_ != merge_content_options::MERGE_FORMAT_TAR_VALUE &&
mergeFormat_ != merge_content_options::MERGE_FORMAT_ZIP_VALUE &&
mergeFormat_ != merge_content_options::MERGE_FORMAT_FLOWFILE_STREAM_V3_VALUE) {
- logger_->log_error("Merge format not supported %s", mergeFormat_);
+ logger_->log_error("Merge format not supported {}", mergeFormat_);
throw minifi::Exception(ExceptionType::PROCESSOR_EXCEPTION, "Invalid merge format: " + mergeFormat_);
}
if (delimiterStrategy_ != merge_content_options::DELIMITER_STRATEGY_FILENAME &&
delimiterStrategy_ != merge_content_options::DELIMITER_STRATEGY_TEXT) {
- logger_->log_error("Delimiter strategy not supported %s", delimiterStrategy_);
+ logger_->log_error("Delimiter strategy not supported {}", delimiterStrategy_);
throw minifi::Exception(ExceptionType::PROCESSOR_EXCEPTION, "Invalid delimiter strategy: " + delimiterStrategy_);
}
if (attributeStrategy_ != merge_content_options::ATTRIBUTE_STRATEGY_KEEP_COMMON &&
attributeStrategy_ != merge_content_options::ATTRIBUTE_STRATEGY_KEEP_ALL_UNIQUE) {
- logger_->log_error("Attribute strategy not supported %s", attributeStrategy_);
+ logger_->log_error("Attribute strategy not supported {}", attributeStrategy_);
throw minifi::Exception(ExceptionType::PROCESSOR_EXCEPTION, "Invalid attribute strategy: " + attributeStrategy_);
}
}
@@ -224,7 +224,7 @@ bool MergeContent::processBin(core::ProcessSession &session, std::unique_ptr<Bin
} else if (attributeStrategy_ == merge_content_options::ATTRIBUTE_STRATEGY_KEEP_ALL_UNIQUE) {
KeepAllUniqueAttributesMerger(bin->getFlowFile()).mergeAttributes(session, merge_flow);
} else {
- logger_->log_error("Attribute strategy not supported %s", attributeStrategy_);
+ logger_->log_error("Attribute strategy not supported {}", attributeStrategy_);
return false;
}
@@ -250,7 +250,7 @@ bool MergeContent::processBin(core::ProcessSession &session, std::unique_ptr<Bin
mergeBin = std::make_unique<ZipMerge>();
mimeType = "application/zip";
} else {
- logger_->log_error("Merge format not supported %s", mergeFormat_);
+ logger_->log_error("Merge format not supported {}", mergeFormat_);
return false;
}
@@ -258,10 +258,10 @@ bool MergeContent::processBin(core::ProcessSession &session, std::unique_ptr<Bin
mergeBin->merge(session, bin->getFlowFile(), *serializer, merge_flow);
session.putAttribute(merge_flow, core::SpecialFlowAttribute::MIME_TYPE, mimeType);
} catch (const std::exception& ex) {
- logger_->log_error("Merge Content merge catch exception, type: %s, what: %s", typeid(ex).name(), ex.what());
+ logger_->log_error("Merge Content merge catch exception, type: {}, what: {}", typeid(ex).name(), ex.what());
return false;
} catch (...) {
- logger_->log_error("Merge Content merge catch exception, type: %s", getCurrentExceptionTypeName());
+ logger_->log_error("Merge Content merge catch exception, type: {}", getCurrentExceptionTypeName());
return false;
}
session.putAttribute(merge_flow, BinFiles::FRAGMENT_COUNT_ATTRIBUTE, std::to_string(bin->getSize()));
@@ -272,7 +272,7 @@ bool MergeContent::processBin(core::ProcessSession &session, std::unique_ptr<Bin
for (const auto& flow : flows) {
session.transfer(flow, Original);
}
- logger_->log_info("Merge FlowFile record UUID %s, payload length %d", merge_flow->getUUIDStr(), merge_flow->getSize());
+ logger_->log_info("Merge FlowFile record UUID {}, payload length {}", merge_flow->getUUIDStr(), merge_flow->getSize());
return true;
}
diff --git a/extensions/libarchive/MergeContent.h b/extensions/libarchive/MergeContent.h
index e009df72f..1f5cde78d 100644
--- a/extensions/libarchive/MergeContent.h
+++ b/extensions/libarchive/MergeContent.h
@@ -220,7 +220,7 @@ class ArchiveMerge {
if (flow->getAttribute(BinFiles::TAR_PERMISSIONS_ATTRIBUTE, perm)) {
try {
permInt = std::stoi(perm);
- logger_->log_debug("Merge Tar File %s permission %s", fileName, perm);
+ logger_->log_debug("Merge Tar File {} permission {}", fileName, perm);
archive_entry_set_perm(entry, (mode_t) permInt);
} catch (...) {
}
diff --git a/extensions/libarchive/ReadArchiveStream.cpp b/extensions/libarchive/ReadArchiveStream.cpp
index afd3ac01d..6268875f0 100644
--- a/extensions/libarchive/ReadArchiveStream.cpp
+++ b/extensions/libarchive/ReadArchiveStream.cpp
@@ -31,17 +31,17 @@ ReadArchiveStreamImpl::archive_ptr ReadArchiveStreamImpl::createReadArchive() {
result = archive_read_support_format_all(arch.get());
if (result != ARCHIVE_OK) {
- logger_->log_error("Archive read support format all error %s", archive_error_string(arch.get()));
+ logger_->log_error("Archive read support format all error {}", archive_error_string(arch.get()));
return nullptr;
}
result = archive_read_support_filter_all(arch.get());
if (result != ARCHIVE_OK) {
- logger_->log_error("Archive read support filter all error %s", archive_error_string(arch.get()));
+ logger_->log_error("Archive read support filter all error {}", archive_error_string(arch.get()));
return nullptr;
}
result = archive_read_open2(arch.get(), &reader_, nullptr, archive_read, nullptr, nullptr);
if (result != ARCHIVE_OK) {
- logger_->log_error("Archive read open error %s", archive_error_string(arch.get()));
+ logger_->log_error("Archive read open error {}", archive_error_string(arch.get()));
return nullptr;
}
return arch;
@@ -56,12 +56,12 @@ std::optional<EntryInfo> ReadArchiveStreamImpl::nextEntry() {
int result = archive_read_next_header(arch_.get(), &entry);
if (result != ARCHIVE_OK) {
if (result != ARCHIVE_EOF) {
- logger_->log_error("Archive read next header error %s", archive_error_string(arch_.get()));
+ logger_->log_error("Archive read next header error {}", archive_error_string(arch_.get()));
}
return std::nullopt;
}
entry_size_ = gsl::narrow<size_t>(archive_entry_size(entry));
- logger_->log_debug("Archive entry size %zu", entry_size_.value());
+ logger_->log_debug("Archive entry size {}", entry_size_.value());
return EntryInfo{archive_entry_pathname(entry), entry_size_.value()};
}
@@ -76,7 +76,7 @@ size_t ReadArchiveStreamImpl::read(const std::span<std::byte> out_buffer) {
const la_ssize_t result = archive_read_data(arch_.get(), out_buffer.data(), out_buffer.size());
if (result < 0) {
- logger_->log_error("Archive read data error %s", archive_error_string(arch_.get()));
+ logger_->log_error("Archive read data error {}", archive_error_string(arch_.get()));
entry_size_.reset();
arch_.reset();
return STREAM_ERROR;
diff --git a/extensions/libarchive/UnfocusArchiveEntry.cpp b/extensions/libarchive/UnfocusArchiveEntry.cpp
index 261ef4e85..46903bca3 100644
--- a/extensions/libarchive/UnfocusArchiveEntry.cpp
+++ b/extensions/libarchive/UnfocusArchiveEntry.cpp
@@ -63,7 +63,7 @@ void UnfocusArchiveEntry::onTrigger(core::ProcessContext *context, core::Process
try {
archiveStack.loadJsonString(existingLensStack);
} catch (Exception &exception) {
- logger_->log_debug(exception.what());
+ logger_->log_debug("{}", exception.what());
context->yield();
return;
}
@@ -90,7 +90,7 @@ void UnfocusArchiveEntry::onTrigger(core::ProcessContext *context, core::Process
}
if (entry.entryName == lensArchiveMetadata.focusedEntry) {
- logger_->log_debug("UnfocusArchiveEntry exporting focused entry to %s", entry.tmpFileName.string());
+ logger_->log_debug("UnfocusArchiveEntry exporting focused entry to {}", entry.tmpFileName);
session->exportContent(entry.tmpFileName.string(), flowFile, false);
}
}
@@ -105,7 +105,7 @@ void UnfocusArchiveEntry::onTrigger(core::ProcessContext *context, core::Process
continue;
}
- logger_->log_debug("UnfocusArchiveEntry exporting entry %s to %s", entry.stashKey, entry.tmpFileName.string());
+ logger_->log_debug("UnfocusArchiveEntry exporting entry {} to {}", entry.stashKey, entry.tmpFileName);
session->restore(entry.stashKey, flowFile);
// TODO(calebj) implement copy export/don't worry about multiple claims/optimal efficiency for *now*
session->exportContent(entry.tmpFileName.string(), flowFile, false);
@@ -165,12 +165,12 @@ int64_t UnfocusArchiveEntry::WriteCallback::operator()(const std::shared_ptr<io:
for (const auto &entryMetadata : _archiveMetadata->entryMetadata) {
entry = archive_entry_new();
- logger_->log_info("UnfocusArchiveEntry writing entry %s", entryMetadata.entryName);
+ logger_->log_info("UnfocusArchiveEntry writing entry {}", entryMetadata.entryName);
if (entryMetadata.entryType == AE_IFREG && entryMetadata.entrySize > 0) {
size_t stat_ok = stat(entryMetadata.tmpFileName.string().c_str(), &st);
if (stat_ok != 0) {
- logger_->log_error("Error statting %s: %s", entryMetadata.tmpFileName.string(), std::system_category().default_error_condition(errno).message());
+ logger_->log_error("Error statting {}: {}", entryMetadata.tmpFileName, std::system_category().default_error_condition(errno).message());
}
archive_entry_copy_stat(entry, &st);
}
@@ -183,15 +183,15 @@ int64_t UnfocusArchiveEntry::WriteCallback::operator()(const std::shared_ptr<io:
archive_entry_set_gid(entry, entryMetadata.entryGID);
archive_entry_set_mtime(entry, entryMetadata.entryMTime, gsl::narrow<long>(entryMetadata.entryMTimeNsec)); // NOLINT long comes from libarchive API
- logger_->log_info("Writing %s with type %d, perms %d, size %d, uid %d, gid %d, mtime %d,%d", entryMetadata.entryName, entryMetadata.entryType, entryMetadata.entryPerm,
+ logger_->log_info("Writing {} with type {}, perms {}, size {}, uid {}, gid {}, mtime {},{}", entryMetadata.entryName, entryMetadata.entryType, entryMetadata.entryPerm,
entryMetadata.entrySize, entryMetadata.entryUID, entryMetadata.entryGID, entryMetadata.entryMTime, entryMetadata.entryMTimeNsec);
archive_write_header(outputArchive, entry);
// If entry is regular file, copy entry contents
if (entryMetadata.entryType == AE_IFREG && entryMetadata.entrySize > 0) {
- logger_->log_info("UnfocusArchiveEntry writing %d bytes of "
- "data from tmp file %s to archive entry %s",
+ logger_->log_info("UnfocusArchiveEntry writing {} bytes of "
+ "data from tmp file {} to archive entry {}",
st.st_size, entryMetadata.tmpFileName.string(), entryMetadata.entryName);
std::ifstream ifs(entryMetadata.tmpFileName, std::ifstream::in | std::ios::binary);
diff --git a/extensions/libarchive/WriteArchiveStream.cpp b/extensions/libarchive/WriteArchiveStream.cpp
index 98b9122d1..c2a6853d8 100644
--- a/extensions/libarchive/WriteArchiveStream.cpp
+++ b/extensions/libarchive/WriteArchiveStream.cpp
@@ -34,37 +34,37 @@ WriteArchiveStreamImpl::archive_ptr WriteArchiveStreamImpl::createWriteArchive()
result = archive_write_set_format_ustar(arch.get());
if (result != ARCHIVE_OK) {
- logger_->log_error("Archive write set format ustar error %s", archive_error_string(arch.get()));
+ logger_->log_error("Archive write set format ustar error {}", archive_error_string(arch.get()));
return nullptr;
}
if (compress_format_ == CompressionFormat::GZIP) {
result = archive_write_add_filter_gzip(arch.get());
if (result != ARCHIVE_OK) {
- logger_->log_error("Archive write add filter gzip error %s", archive_error_string(arch.get()));
+ logger_->log_error("Archive write add filter gzip error {}", archive_error_string(arch.get()));
return nullptr;
}
std::string option = "gzip:compression-level=" + std::to_string(compress_level_);
result = archive_write_set_options(arch.get(), option.c_str());
if (result != ARCHIVE_OK) {
- logger_->log_error("Archive write set options error %s", archive_error_string(arch.get()));
+ logger_->log_error("Archive write set options error {}", archive_error_string(arch.get()));
return nullptr;
}
} else if (compress_format_ == CompressionFormat::BZIP2) {
result = archive_write_add_filter_bzip2(arch.get());
if (result != ARCHIVE_OK) {
- logger_->log_error("Archive write add filter bzip2 error %s", archive_error_string(arch.get()));
+ logger_->log_error("Archive write add filter bzip2 error {}", archive_error_string(arch.get()));
return nullptr;
}
} else if (compress_format_ == CompressionFormat::LZMA) {
result = archive_write_add_filter_lzma(arch.get());
if (result != ARCHIVE_OK) {
- logger_->log_error("Archive write add filter lzma error %s", archive_error_string(arch.get()));
+ logger_->log_error("Archive write add filter lzma error {}", archive_error_string(arch.get()));
return nullptr;
}
} else if (compress_format_ == CompressionFormat::XZ_LZMA2) {
result = archive_write_add_filter_xz(arch.get());
if (result != ARCHIVE_OK) {
- logger_->log_error("Archive write add filter xz error %s", archive_error_string(arch.get()));
+ logger_->log_error("Archive write add filter xz error {}", archive_error_string(arch.get()));
return nullptr;
}
} else {
@@ -73,12 +73,12 @@ WriteArchiveStreamImpl::archive_ptr WriteArchiveStreamImpl::createWriteArchive()
}
result = archive_write_set_bytes_per_block(arch.get(), 0);
if (result != ARCHIVE_OK) {
- logger_->log_error("Archive write set bytes per block error %s", archive_error_string(arch.get()));
+ logger_->log_error("Archive write set bytes per block error {}", archive_error_string(arch.get()));
return nullptr;
}
result = archive_write_open(arch.get(), sink_.get(), nullptr, archive_write, nullptr);
if (result != ARCHIVE_OK) {
- logger_->log_error("Archive write open error %s", archive_error_string(arch.get()));
+ logger_->log_error("Archive write open error {}", archive_error_string(arch.get()));
return nullptr;
}
return arch;
@@ -99,7 +99,7 @@ bool WriteArchiveStreamImpl::newEntry(const EntryInfo& info) {
int result = archive_write_header(arch_.get(), arch_entry_.get());
if (result != ARCHIVE_OK) {
- logger_->log_error("Archive write header error %s", archive_error_string(arch_.get()));
+ logger_->log_error("Archive write header error {}", archive_error_string(arch_.get()));
return false;
}
return true;
@@ -117,7 +117,7 @@ size_t WriteArchiveStreamImpl::write(const uint8_t* data, size_t len) {
int result = gsl::narrow<int>(archive_write_data(arch_.get(), data, len));
if (result < 0) {
- logger_->log_error("Archive write data error %s", archive_error_string(arch_.get()));
+ logger_->log_error("Archive write data error {}", archive_error_string(arch_.get()));
arch_entry_.reset();
arch_.reset();
return STREAM_ERROR;
@@ -134,7 +134,7 @@ bool WriteArchiveStreamImpl::finish() {
// closing the archive is needed to complete the archive
bool success = archive_write_close(arch_.get()) == ARCHIVE_OK;
if (!success) {
- logger_->log_error("Archive write close error %s", archive_error_string(arch_.get()));
+ logger_->log_error("Archive write close error {}", archive_error_string(arch_.get()));
}
arch_.reset();
return success;
@@ -145,5 +145,3 @@ WriteArchiveStreamImpl::~WriteArchiveStreamImpl() {
}
} // namespace org::apache::nifi::minifi::io
-
-
diff --git a/extensions/librdkafka/ConsumeKafka.cpp b/extensions/librdkafka/ConsumeKafka.cpp
index a2823488f..785b8bf7c 100644
--- a/extensions/librdkafka/ConsumeKafka.cpp
+++ b/extensions/librdkafka/ConsumeKafka.cpp
@@ -104,11 +104,11 @@ void rebalance_cb(rd_kafka_t* rk, rd_kafka_resp_err_t trigger, rd_kafka_topic_pa
break;
default:
- logger->log_debug("failed: %s", rd_kafka_err2str(trigger));
+ logger->log_debug("failed: {}", rd_kafka_err2str(trigger));
assign_error = rd_kafka_assign(rk, nullptr);
break;
}
- logger->log_debug("assign failure: %s", rd_kafka_err2str(assign_error));
+ logger->log_debug("assign failure: {}", rd_kafka_err2str(assign_error));
}
} // namespace
@@ -133,7 +133,7 @@ void ConsumeKafka::create_topic_partition_list() {
// This might happen until the cross-overship between processors and connections are settled
rd_kafka_resp_err_t subscribe_response = rd_kafka_subscribe(consumer_.get(), kf_topic_partition_list_.get());
if (RD_KAFKA_RESP_ERR_NO_ERROR != subscribe_response) {
- logger_->log_error("rd_kafka_subscribe error %d: %s", subscribe_response, rd_kafka_err2str(subscribe_response));
+ logger_->log_error("rd_kafka_subscribe error {}: {}", magic_enum::enum_underlying(subscribe_response), rd_kafka_err2str(subscribe_response));
}
}
@@ -144,11 +144,11 @@ void ConsumeKafka::extend_config_from_dynamic_properties(const core::ProcessCont
if (dynamic_prop_keys.empty()) {
return;
}
- logger_->log_info("Loading %d extra kafka configuration fields from ConsumeKafka dynamic properties:", dynamic_prop_keys.size());
+ logger_->log_info("Loading {} extra kafka configuration fields from ConsumeKafka dynamic properties:", dynamic_prop_keys.size());
for (const std::string& key : dynamic_prop_keys) {
std::string value;
gsl_Expects(context.getDynamicProperty(key, value));
- logger_->log_info("%s: %s", key.c_str(), value.c_str());
+ logger_->log_info("{}: {}", key.c_str(), value.c_str());
setKafkaConfigurationField(*conf_, key, value);
}
}
@@ -211,7 +211,7 @@ void ConsumeKafka::configure_new_connection(core::ProcessContext& context) {
rd_kafka_resp_err_t poll_set_consumer_response = rd_kafka_poll_set_consumer(consumer_.get());
if (RD_KAFKA_RESP_ERR_NO_ERROR != poll_set_consumer_response) {
- logger_->log_error("rd_kafka_poll_set_consumer error %d: %s", poll_set_consumer_response, rd_kafka_err2str(poll_set_consumer_response));
+ logger_->log_error("rd_kafka_poll_set_consumer error {}: {}", magic_enum::enum_underlying(poll_set_consumer_response), rd_kafka_err2str(poll_set_consumer_response));
}
}
@@ -228,14 +228,14 @@ std::vector<std::unique_ptr<rd_kafka_message_t, utils::rd_kafka_message_deleter>
const auto start = std::chrono::steady_clock::now();
auto elapsed = std::chrono::steady_clock::now() - start;
while (messages.size() < max_poll_records_ && elapsed < max_poll_time_milliseconds_) {
- logger_->log_debug("Polling for new messages for %d milliseconds...", max_poll_time_milliseconds_.count());
+ logger_->log_debug("Polling for new messages for {}...", max_poll_time_milliseconds_);
const auto timeout_ms = gsl::narrow<int>(std::chrono::duration_cast<std::chrono::milliseconds>(max_poll_time_milliseconds_ - elapsed).count());
std::unique_ptr<rd_kafka_message_t, utils::rd_kafka_message_deleter> message{rd_kafka_consumer_poll(consumer_.get(), timeout_ms)};
if (!message) {
break;
}
if (RD_KAFKA_RESP_ERR_NO_ERROR != message->err) {
- logger_->log_error("Received message with error %d: %s", message->err, rd_kafka_err2str(message->err));
+ logger_->log_error("Received message with error {}: {}", magic_enum::enum_underlying(message->err), rd_kafka_err2str(message->err));
break;
}
utils::print_kafka_message(*message, *logger_);
@@ -287,7 +287,7 @@ std::vector<std::string> ConsumeKafka::get_matching_headers(const rd_kafka_messa
return {};
}
if (RD_KAFKA_RESP_ERR_NO_ERROR != get_header_response) {
- logger_->log_error("Failed to fetch message headers: %d: %s", rd_kafka_last_error(), rd_kafka_err2str(rd_kafka_last_error()));
+ logger_->log_error("Failed to fetch message headers: {}: {}", magic_enum::enum_underlying(rd_kafka_last_error()), rd_kafka_err2str(rd_kafka_last_error()));
}
std::vector<std::string> matching_headers;
for (std::size_t header_idx = 0;; ++header_idx) {
@@ -297,9 +297,9 @@ std::vector<std::string> ConsumeKafka::get_matching_headers(const rd_kafka_messa
break;
}
if (size < 200) {
- logger_->log_debug("%.*s", static_cast<int>(size), value);
+ logger_->log_debug("{:.{}}", value, size);
} else {
- logger_->log_debug("%.*s...", 200, value);
+ logger_->log_debug("{:.{}}...", value, 200);
}
matching_headers.emplace_back(value, size);
}
diff --git a/extensions/librdkafka/KafkaConnection.cpp b/extensions/librdkafka/KafkaConnection.cpp
index 30b0142bf..eb0423757 100644
--- a/extensions/librdkafka/KafkaConnection.cpp
+++ b/extensions/librdkafka/KafkaConnection.cpp
@@ -42,7 +42,7 @@ void KafkaConnection::remove() {
}
void KafkaConnection::removeConnection() {
- logger_->log_trace("KafkaConnection::removeConnection START: Client = %s -- Broker = %s", key_.client_id_, key_.brokers_);
+ logger_->log_trace("KafkaConnection::removeConnection START: Client = {} -- Broker = {}", key_.client_id_, key_.brokers_);
stopPoll();
if (kafka_connection_) {
rd_kafka_flush(kafka_connection_, 10 * 1000); /* wait for max 10 seconds */
@@ -53,7 +53,7 @@ void KafkaConnection::removeConnection() {
kafka_connection_ = nullptr;
}
initialized_ = false;
- logger_->log_trace("KafkaConnection::removeConnection FINISH: Client = %s -- Broker = %s", key_.client_id_, key_.brokers_);
+ logger_->log_trace("KafkaConnection::removeConnection FINISH: Client = {} -- Broker = {}", key_.client_id_, key_.brokers_);
}
bool KafkaConnection::initialized() const {
@@ -111,18 +111,20 @@ void KafkaConnection::logCallback(const rd_kafka_t* rk, int level, const char* /
case 0: // LOG_EMERG
case 1: // LOG_ALERT
case 2: // LOG_CRIT
+ logger->log_critical("{}", buf);
+ break;
case 3: // LOG_ERR
- core::logging::LOG_ERROR(logger) << buf;
+ logger->log_error("{}", buf);
break;
case 4: // LOG_WARNING
- core::logging::LOG_WARN(logger) << buf;
+ logger->log_warn("{}", buf);
break;
case 5: // LOG_NOTICE
case 6: // LOG_INFO
- core::logging::LOG_INFO(logger) << buf;
+ logger->log_info("{}", buf);
break;
case 7: // LOG_DEBUG
- core::logging::LOG_DEBUG(logger) << buf;
+ logger->log_debug("{}", buf);
break;
default:
gsl_FailFast();
diff --git a/extensions/librdkafka/KafkaProcessorBase.cpp b/extensions/librdkafka/KafkaProcessorBase.cpp
index d7529888e..c25a479f1 100644
--- a/extensions/librdkafka/KafkaProcessorBase.cpp
+++ b/extensions/librdkafka/KafkaProcessorBase.cpp
@@ -29,20 +29,20 @@ std::optional<utils::net::SslData> KafkaProcessorBase::getSslData(core::ProcessC
void KafkaProcessorBase::setKafkaAuthenticationParameters(core::ProcessContext& context, gsl::not_null<rd_kafka_conf_t*> config) {
security_protocol_ = utils::parseEnumProperty<kafka::SecurityProtocolOption>(context, SecurityProtocol);
utils::setKafkaConfigurationField(*config, "security.protocol", std::string{magic_enum::enum_name(security_protocol_)});
- logger_->log_debug("Kafka security.protocol [%s]", std::string{magic_enum::enum_name(security_protocol_)});
+ logger_->log_debug("Kafka security.protocol [{}]", magic_enum::enum_name(security_protocol_));
if (security_protocol_ == kafka::SecurityProtocolOption::ssl || security_protocol_ == kafka::SecurityProtocolOption::sasl_ssl) {
auto ssl_data = getSslData(context);
if (ssl_data) {
if (ssl_data->ca_loc.empty() && ssl_data->cert_loc.empty() && ssl_data->key_loc.empty() && ssl_data->key_pw.empty()) {
- logger_->log_warn("Security protocol is set to %s, but no valid security parameters are set in the properties or in the SSL Context Service.",
- std::string{magic_enum::enum_name(security_protocol_)});
+ logger_->log_warn("Security protocol is set to {}, but no valid security parameters are set in the properties or in the SSL Context Service.",
+ magic_enum::enum_name(security_protocol_));
} else {
utils::setKafkaConfigurationField(*config, "ssl.ca.location", ssl_data->ca_loc.string());
- logger_->log_debug("Kafka ssl.ca.location [%s]", ssl_data->ca_loc.string());
+ logger_->log_debug("Kafka ssl.ca.location [{}]", ssl_data->ca_loc);
utils::setKafkaConfigurationField(*config, "ssl.certificate.location", ssl_data->cert_loc.string());
- logger_->log_debug("Kafka ssl.certificate.location [%s]", ssl_data->cert_loc.string());
+ logger_->log_debug("Kafka ssl.certificate.location [{}]", ssl_data->cert_loc);
utils::setKafkaConfigurationField(*config, "ssl.key.location", ssl_data->key_loc.string());
- logger_->log_debug("Kafka ssl.key.location [%s]", ssl_data->key_loc.string());
+ logger_->log_debug("Kafka ssl.key.location [{}]", ssl_data->key_loc);
utils::setKafkaConfigurationField(*config, "ssl.key.password", ssl_data->key_pw);
logger_->log_debug("Kafka ssl.key.password was set");
}
@@ -51,16 +51,16 @@ void KafkaProcessorBase::setKafkaAuthenticationParameters(core::ProcessContext&
auto sasl_mechanism = utils::parseEnumProperty<kafka::SASLMechanismOption>(context, SASLMechanism);
utils::setKafkaConfigurationField(*config, "sasl.mechanism", std::string{magic_enum::enum_name(sasl_mechanism)});
- logger_->log_debug("Kafka sasl.mechanism [%s]", std::string{magic_enum::enum_name(sasl_mechanism)});
+ logger_->log_debug("Kafka sasl.mechanism [{}]", magic_enum::enum_name(sasl_mechanism));
auto setKafkaConfigIfNotEmpty = [this, &context, config](const core::PropertyReference& property, const std::string& kafka_config_name, bool log_value = true) {
std::string value;
if (context.getProperty(property, value) && !value.empty()) {
utils::setKafkaConfigurationField(*config, kafka_config_name, value);
if (log_value) {
- logger_->log_debug("Kafka %s [%s]", kafka_config_name, value);
+ logger_->log_debug("Kafka {} [{}]", kafka_config_name, value);
} else {
- logger_->log_debug("Kafka %s was set", kafka_config_name);
+ logger_->log_debug("Kafka {} was set", kafka_config_name);
}
}
};
diff --git a/extensions/librdkafka/PublishKafka.cpp b/extensions/librdkafka/PublishKafka.cpp
index d5dd5b758..ae6a6130d 100644
--- a/extensions/librdkafka/PublishKafka.cpp
+++ b/extensions/librdkafka/PublishKafka.cpp
@@ -113,7 +113,7 @@ class PublishKafka::Messages {
std::unique_lock<std::mutex> lock(mutex_);
cv_.wait(lock, [this, &lock] {
if (logger_->should_log(core::logging::LOG_LEVEL::trace)) {
- logger_->log_trace("%s", logStatus(lock));
+ logger_->log_trace("{}", logStatus(lock));
}
return interrupted_ || std::all_of(std::begin(this->flow_files_), std::end(this->flow_files_), [](const FlowFileResult& flow_file) {
return flow_file.flow_file_error || std::all_of(std::begin(flow_file.messages), std::end(flow_file.messages), [](const MessageResult& message) {
@@ -130,7 +130,7 @@ class PublishKafka::Messages {
try {
return fun(flow_files_.at(index));
} catch(const std::exception& ex) {
- logger_->log_warn("Messages::modifyResult exception: %s", ex.what());
+ logger_->log_warn("Messages::modifyResult exception: {}", ex.what());
throw;
}
}
@@ -206,9 +206,9 @@ class ReadCallback {
message.err_code = rkmessage->err;
message.status = message.err_code == 0 ? MessageStatus::Success : MessageStatus::Error;
if (message.err_code != RD_KAFKA_RESP_ERR_NO_ERROR) {
- logger->log_warn("delivery callback, flow file #%zu/segment #%zu: %s", flow_file_index_copy, segment_num, rd_kafka_err2str(message.err_code));
+ logger->log_warn("delivery callback, flow file #{}/segment #{}: {}", flow_file_index_copy, segment_num, rd_kafka_err2str(message.err_code));
} else {
- logger->log_debug("delivery callback, flow file #%zu/segment #%zu: success", flow_file_index_copy, segment_num);
+ logger->log_debug("delivery callback, flow file #{}/segment #{}: success", flow_file_index_copy, segment_num);
}
});
};
@@ -228,7 +228,7 @@ class ReadCallback {
// in case of failure, rd_kafka_producev doesn't take ownership of the headers, so we need to delete them
rd_kafka_headers_destroy(hdrs_copy);
}
- logger_->log_trace("produce enqueued flow file #%zu/segment #%zu: %s", flow_file_index_, segment_num, rd_kafka_err2str(err));
+ logger_->log_trace("produce enqueued flow file #{}/segment #{}: {}", flow_file_index_, segment_num, rd_kafka_err2str(err));
return err;
}
@@ -365,21 +365,21 @@ void PublishKafka::onSchedule(const std::shared_ptr<core::ProcessContext> &conte
// Batch Size
context->getProperty(BatchSize, batch_size_);
- logger_->log_debug("PublishKafka: Batch Size [%lu]", batch_size_);
+ logger_->log_debug("PublishKafka: Batch Size [{}]", batch_size_);
// Target Batch Payload Size
context->getProperty(TargetBatchPayloadSize, target_batch_payload_size_);
- logger_->log_debug("PublishKafka: Target Batch Payload Size [%llu]", target_batch_payload_size_);
+ logger_->log_debug("PublishKafka: Target Batch Payload Size [{}]", target_batch_payload_size_);
// Max Flow Segment Size
context->getProperty(MaxFlowSegSize, max_flow_seg_size_);
- logger_->log_debug("PublishKafka: Max Flow Segment Size [%llu]", max_flow_seg_size_);
+ logger_->log_debug("PublishKafka: Max Flow Segment Size [{}]", max_flow_seg_size_);
// Attributes to Send as Headers
std::string value;
if (context->getProperty(AttributeNameRegex, value) && !value.empty()) {
attributeNameRegex_ = utils::Regex(value);
- logger_->log_debug("PublishKafka: AttributeNameRegex [%s]", value);
+ logger_->log_debug("PublishKafka: AttributeNameRegex [{}]", value);
}
key_.brokers_ = brokers;
@@ -390,7 +390,7 @@ void PublishKafka::onSchedule(const std::shared_ptr<core::ProcessContext> &conte
std::string message_key_field;
if (context->getProperty(MessageKeyField, message_key_field) && !message_key_field.empty()) {
- logger_->log_error("The %s property is set. This property is DEPRECATED and has no effect; please use Kafka Key instead.", std::string{MessageKeyField.name});
+ logger_->log_error("The {} property is set. This property is DEPRECATED and has no effect; please use Kafka Key instead.", MessageKeyField.name);
}
logger_->log_debug("Successfully configured PublishKafka");
@@ -434,7 +434,7 @@ bool PublishKafka::configureNewConnection(const std::shared_ptr<core::ProcessCon
throw Exception(PROCESS_SCHEDULE_EXCEPTION, "There are no brokers");
}
result = rd_kafka_conf_set(conf_.get(), "bootstrap.servers", key->brokers_.c_str(), errstr.data(), errstr.size());
- logger_->log_debug("PublishKafka: bootstrap.servers [%s]", key->brokers_);
+ logger_->log_debug("PublishKafka: bootstrap.servers [{}]", key->brokers_);
if (result != RD_KAFKA_CONF_OK) {
auto error_msg = utils::StringUtils::join_pack(PREFIX_ERROR_MSG, errstr.data());
throw Exception(PROCESS_SCHEDULE_EXCEPTION, error_msg);
@@ -444,7 +444,7 @@ bool PublishKafka::configureNewConnection(const std::shared_ptr<core::ProcessCon
throw Exception(PROCESS_SCHEDULE_EXCEPTION, "Client id is empty");
}
result = rd_kafka_conf_set(conf_.get(), "client.id", key->client_id_.c_str(), errstr.data(), errstr.size());
- logger_->log_debug("PublishKafka: client.id [%s]", key->client_id_);
+ logger_->log_debug("PublishKafka: client.id [{}]", key->client_id_);
if (result != RD_KAFKA_CONF_OK) {
auto error_msg = utils::StringUtils::join_pack(PREFIX_ERROR_MSG, errstr.data());
throw Exception(PROCESS_SCHEDULE_EXCEPTION, error_msg);
@@ -453,7 +453,7 @@ bool PublishKafka::configureNewConnection(const std::shared_ptr<core::ProcessCon
value = "";
if (context->getProperty(DebugContexts, value) && !value.empty()) {
result = rd_kafka_conf_set(conf_.get(), "debug", value.c_str(), errstr.data(), errstr.size());
- logger_->log_debug("PublishKafka: debug [%s]", value);
+ logger_->log_debug("PublishKafka: debug [{}]", value);
if (result != RD_KAFKA_CONF_OK) {
auto error_msg = utils::StringUtils::join_pack(PREFIX_ERROR_MSG, errstr.data());
throw Exception(PROCESS_SCHEDULE_EXCEPTION, error_msg);
@@ -463,7 +463,7 @@ bool PublishKafka::configureNewConnection(const std::shared_ptr<core::ProcessCon
value = "";
if (context->getProperty(MaxMessageSize, value) && !value.empty()) {
result = rd_kafka_conf_set(conf_.get(), "message.max.bytes", value.c_str(), errstr.data(), errstr.size());
- logger_->log_debug("PublishKafka: message.max.bytes [%s]", value);
+ logger_->log_debug("PublishKafka: message.max.bytes [{}]", value);
if (result != RD_KAFKA_CONF_OK) {
auto error_msg = utils::StringUtils::join_pack(PREFIX_ERROR_MSG, errstr.data());
throw Exception(PROCESS_SCHEDULE_EXCEPTION, error_msg);
@@ -478,7 +478,7 @@ bool PublishKafka::configureNewConnection(const std::shared_ptr<core::ProcessCon
value = std::to_string(int_val);
result = rd_kafka_conf_set(conf_.get(), "queue.buffering.max.messages", value.c_str(), errstr.data(), errstr.size());
- logger_->log_debug("PublishKafka: queue.buffering.max.messages [%s]", value);
+ logger_->log_debug("PublishKafka: queue.buffering.max.messages [{}]", value);
if (result != RD_KAFKA_CONF_OK) {
auto error_msg = utils::StringUtils::join_pack(PREFIX_ERROR_MSG, errstr.data());
throw Exception(PROCESS_SCHEDULE_EXCEPTION, error_msg);
@@ -489,7 +489,7 @@ bool PublishKafka::configureNewConnection(const std::shared_ptr<core::ProcessCon
valInt = valInt / 1024;
valueConf = std::to_string(valInt);
result = rd_kafka_conf_set(conf_.get(), "queue.buffering.max.kbytes", valueConf.c_str(), errstr.data(), errstr.size());
- logger_->log_debug("PublishKafka: queue.buffering.max.kbytes [%s]", valueConf);
+ logger_->log_debug("PublishKafka: queue.buffering.max.kbytes [{}]", valueConf);
if (result != RD_KAFKA_CONF_OK) {
auto error_msg = utils::StringUtils::join_pack(PREFIX_ERROR_MSG, errstr.data());
throw Exception(PROCESS_SCHEDULE_EXCEPTION, error_msg);
@@ -499,7 +499,7 @@ bool PublishKafka::configureNewConnection(const std::shared_ptr<core::ProcessCon
if (auto queue_buffer_max_time = context->getProperty<core::TimePeriodValue>(QueueBufferMaxTime)) {
valueConf = std::to_string(queue_buffer_max_time->getMilliseconds().count());
result = rd_kafka_conf_set(conf_.get(), "queue.buffering.max.ms", valueConf.c_str(), errstr.data(), errstr.size());
- logger_->log_debug("PublishKafka: queue.buffering.max.ms [%s]", valueConf);
+ logger_->log_debug("PublishKafka: queue.buffering.max.ms [{}]", valueConf);
if (result != RD_KAFKA_CONF_OK) {
auto error_msg = utils::StringUtils::join_pack(PREFIX_ERROR_MSG, errstr.data());
throw Exception(PROCESS_SCHEDULE_EXCEPTION, error_msg);
@@ -508,7 +508,7 @@ bool PublishKafka::configureNewConnection(const std::shared_ptr<core::ProcessCon
value = "";
if (context->getProperty(BatchSize, value) && !value.empty()) {
result = rd_kafka_conf_set(conf_.get(), "batch.num.messages", value.c_str(), errstr.data(), errstr.size());
- logger_->log_debug("PublishKafka: batch.num.messages [%s]", value);
+ logger_->log_debug("PublishKafka: batch.num.messages [{}]", value);
if (result != RD_KAFKA_CONF_OK) {
auto error_msg = utils::StringUtils::join_pack(PREFIX_ERROR_MSG, errstr.data());
throw Exception(PROCESS_SCHEDULE_EXCEPTION, error_msg);
@@ -517,7 +517,7 @@ bool PublishKafka::configureNewConnection(const std::shared_ptr<core::ProcessCon
value = "";
if (context->getProperty(CompressCodec, value) && !value.empty() && value != "none") {
result = rd_kafka_conf_set(conf_.get(), "compression.codec", value.c_str(), errstr.data(), errstr.size());
- logger_->log_debug("PublishKafka: compression.codec [%s]", value);
+ logger_->log_debug("PublishKafka: compression.codec [{}]", value);
if (result != RD_KAFKA_CONF_OK) {
auto error_msg = utils::StringUtils::join_pack(PREFIX_ERROR_MSG, errstr.data());
throw Exception(PROCESS_SCHEDULE_EXCEPTION, error_msg);
@@ -528,21 +528,21 @@ bool PublishKafka::configureNewConnection(const std::shared_ptr<core::ProcessCon
// Add all of the dynamic properties as librdkafka configurations
const auto &dynamic_prop_keys = context->getDynamicPropertyKeys();
- logger_->log_info("PublishKafka registering %d librdkafka dynamic properties", dynamic_prop_keys.size());
+ logger_->log_info("PublishKafka registering {} librdkafka dynamic properties", dynamic_prop_keys.size());
for (const auto &prop_key : dynamic_prop_keys) {
core::Property dynamic_property_key{prop_key, "dynamic property"};
dynamic_property_key.setSupportsExpressionLanguage(true);
std::string dynamic_property_value;
if (context->getDynamicProperty(dynamic_property_key, dynamic_property_value, nullptr) && !dynamic_property_value.empty()) {
- logger_->log_debug("PublishKafka: DynamicProperty: [%s] -> [%s]", prop_key, dynamic_property_value);
+ logger_->log_debug("PublishKafka: DynamicProperty: [{}] -> [{}]", prop_key, dynamic_property_value);
result = rd_kafka_conf_set(conf_.get(), prop_key.c_str(), dynamic_property_value.c_str(), errstr.data(), errstr.size());
if (result != RD_KAFKA_CONF_OK) {
auto error_msg = utils::StringUtils::join_pack(PREFIX_ERROR_MSG, errstr.data());
throw Exception(PROCESS_SCHEDULE_EXCEPTION, error_msg);
}
} else {
- logger_->log_warn("PublishKafka Dynamic Property '%s' is empty and therefore will not be configured", prop_key);
+ logger_->log_warn("PublishKafka Dynamic Property '{}' is empty and therefore will not be configured", prop_key);
}
}
@@ -594,9 +594,9 @@ bool PublishKafka::createNewTopic(const std::shared_ptr<core::ProcessContext> &c
"If you want to wait for one acknowledgment use '1' as the property.");
}
result = rd_kafka_topic_conf_set(topic_conf_.get(), "request.required.acks", value.c_str(), errstr.data(), errstr.size());
- logger_->log_debug("PublishKafka: request.required.acks [%s]", value);
+ logger_->log_debug("PublishKafka: request.required.acks [{}]", value);
if (result != RD_KAFKA_CONF_OK) {
- logger_->log_error("PublishKafka: configure request.required.acks error result [%s]", errstr.data());
+ logger_->log_error("PublishKafka: configure request.required.acks error result [{}]", errstr.data());
return false;
}
}
@@ -604,9 +604,9 @@ bool PublishKafka::createNewTopic(const std::shared_ptr<core::ProcessContext> &c
if (auto request_timeout = context->getProperty<core::TimePeriodValue>(RequestTimeOut)) {
valueConf = std::to_string(request_timeout->getMilliseconds().count());
result = rd_kafka_topic_conf_set(topic_conf_.get(), "request.timeout.ms", valueConf.c_str(), errstr.data(), errstr.size());
- logger_->log_debug("PublishKafka: request.timeout.ms [%s]", valueConf);
+ logger_->log_debug("PublishKafka: request.timeout.ms [{}]", valueConf);
if (result != RD_KAFKA_CONF_OK) {
- logger_->log_error("PublishKafka: configure request.timeout.ms error result [%s]", errstr.data());
+ logger_->log_error("PublishKafka: configure request.timeout.ms error result [{}]", errstr.data());
return false;
}
}
@@ -614,9 +614,9 @@ bool PublishKafka::createNewTopic(const std::shared_ptr<core::ProcessContext> &c
if (auto message_timeout = context->getProperty<core::TimePeriodValue>(MessageTimeOut)) {
valueConf = std::to_string(message_timeout->getMilliseconds().count());
result = rd_kafka_topic_conf_set(topic_conf_.get(), "message.timeout.ms", valueConf.c_str(), errstr.data(), errstr.size());
- logger_->log_debug("PublishKafka: message.timeout.ms [%s]", valueConf);
+ logger_->log_debug("PublishKafka: message.timeout.ms [{}]", valueConf);
if (result != RD_KAFKA_CONF_OK) {
- logger_->log_error("PublishKafka: configure message.timeout.ms error result [%s]", errstr.data());
+ logger_->log_error("PublishKafka: configure message.timeout.ms error result [{}]", errstr.data());
return false;
}
}
@@ -625,7 +625,7 @@ bool PublishKafka::createNewTopic(const std::shared_ptr<core::ProcessContext> &c
const auto topic_reference = gsl::owner<rd_kafka_topic_t*>(rd_kafka_topic_new(conn_->getConnection(), topic_name.c_str(), topic_conf_.release()));
if (topic_reference == nullptr) {
rd_kafka_resp_err_t resp_err = rd_kafka_last_error();
- logger_->log_error("PublishKafka: failed to create topic %s, error: %s", topic_name.c_str(), rd_kafka_err2str(resp_err));
+ logger_->log_error("PublishKafka: failed to create topic {}, error: {}", topic_name.c_str(), rd_kafka_err2str(resp_err));
return false;
}
@@ -681,7 +681,7 @@ void PublishKafka::onTrigger(const std::shared_ptr<core::ProcessContext> &contex
context->yield();
return;
}
- logger_->log_debug("Processing %lu flow files with a total size of %llu B", flowFiles.size(), actual_bytes);
+ logger_->log_debug("Processing {} flow files with a total size of {} B", flowFiles.size(), actual_bytes);
auto messages = std::make_shared<Messages>(logger_);
// We must add this to the messages set, so that it will be interrupted when notifyStop is called
@@ -702,9 +702,9 @@ void PublishKafka::onTrigger(const std::shared_ptr<core::ProcessContext> &contex
// Get Topic (FlowFile-dependent EL property)
std::string topic;
if (context->getProperty(Topic, topic, flowFile)) {
- logger_->log_debug("PublishKafka: topic for flow file %s is '%s'", flowFile->getUUIDStr(), topic);
+ logger_->log_debug("PublishKafka: topic for flow file {} is '{}'", flowFile->getUUIDStr(), topic);
} else {
- logger_->log_error("Flow file %s does not have a valid Topic", flowFile->getUUIDStr());
+ logger_->log_error("Flow file {} does not have a valid Topic", flowFile->getUUIDStr());
messages->modifyResult(flow_file_index, [](FlowFileResult& flow_file_result) {
flow_file_result.flow_file_error = true;
});
@@ -714,7 +714,7 @@ void PublishKafka::onTrigger(const std::shared_ptr<core::ProcessContext> &contex
// Add topic to the connection if needed
if (!conn_->hasTopic(topic)) {
if (!createNewTopic(context, topic, flowFile)) {
- logger_->log_error("Failed to add topic %s", topic);
+ logger_->log_error("Failed to add topic {}", topic);
messages->modifyResult(flow_file_index, [](FlowFileResult& flow_file_result) {
flow_file_result.flow_file_error = true;
});
@@ -726,11 +726,11 @@ void PublishKafka::onTrigger(const std::shared_ptr<core::ProcessContext> &contex
if (!context->getProperty(KafkaKey, kafkaKey, flowFile) || kafkaKey.empty()) {
kafkaKey = flowFile->getUUIDStr();
}
- logger_->log_debug("PublishKafka: Message Key [%s]", kafkaKey);
+ logger_->log_debug("PublishKafka: Message Key [{}]", kafkaKey);
auto thisTopic = conn_->getTopic(topic);
if (thisTopic == nullptr) {
- logger_->log_error("Topic %s is invalid", topic);
+ logger_->log_error("Topic {} is invalid", topic);
messages->modifyResult(flow_file_index, [](FlowFileResult& flow_file_result) {
flow_file_result.flow_file_error = true;
});
@@ -750,14 +750,14 @@ void PublishKafka::onTrigger(const std::shared_ptr<core::ProcessContext> &contex
}
if (flowFile->getSize() == 0 && failEmptyFlowFiles) {
- logger_->log_debug("Deprecated behavior, use connections to drop empty flow files! Failing empty flow file with uuid: %s", flowFile->getUUIDStr());
+ logger_->log_debug("Deprecated behavior, use connections to drop empty flow files! Failing empty flow file with uuid: {}", flowFile->getUUIDStr());
messages->modifyResult(flow_file_index, [](FlowFileResult& flow_file_result) {
flow_file_result.flow_file_error = true;
});
}
if (callback.status_ < 0) {
- logger_->log_error("Failed to send flow to kafka topic %s, error: %s", topic, callback.error_);
+ logger_->log_error("Failed to send flow to kafka topic {}, error: {}", topic, callback.error_);
messages->modifyResult(flow_file_index, [](FlowFileResult& flow_file_result) {
flow_file_result.flow_file_error = true;
});
@@ -783,19 +783,19 @@ void PublishKafka::onTrigger(const std::shared_ptr<core::ProcessContext> &contex
switch (message.status) {
case MessageStatus::InFlight:
success = false;
- logger_->log_error("Waiting for delivery confirmation was interrupted for flow file %s segment %zu",
+ logger_->log_error("Waiting for delivery confirmation was interrupted for flow file {} segment {}",
flowFiles[index]->getUUIDStr(),
segment_num);
break;
case MessageStatus::Error:
success = false;
- logger_->log_error("Failed to deliver flow file %s segment %zu, error: %s",
+ logger_->log_error("Failed to deliver flow file {} segment {}, error: {}",
flowFiles[index]->getUUIDStr(),
segment_num,
rd_kafka_err2str(message.err_code));
break;
case MessageStatus::Success:
- logger_->log_debug("Successfully delivered flow file %s segment %zu",
+ logger_->log_debug("Successfully delivered flow file {} segment {}",
flowFiles[index]->getUUIDStr(),
segment_num);
break;
diff --git a/extensions/librdkafka/rdkafka_utils.cpp b/extensions/librdkafka/rdkafka_utils.cpp
index 58b68ce58..4b82b08fe 100644
--- a/extensions/librdkafka/rdkafka_utils.cpp
+++ b/extensions/librdkafka/rdkafka_utils.cpp
@@ -36,7 +36,7 @@ void setKafkaConfigurationField(rd_kafka_conf_t& configuration, const std::strin
void print_topics_list(core::logging::Logger& logger, rd_kafka_topic_partition_list_t& kf_topic_partition_list) {
for (int i = 0; i < kf_topic_partition_list.cnt; ++i) {
- logger.log_debug("kf_topic_partition_list: topic: %s, partition: %d, offset: %" PRId64 ".",
+ logger.log_debug("kf_topic_partition_list: topic: {}, partition: {}, offset: {}.",
kf_topic_partition_list.elems[i].topic, kf_topic_partition_list.elems[i].partition, kf_topic_partition_list.elems[i].offset);
}
}
@@ -66,7 +66,7 @@ std::string get_human_readable_kafka_message_headers(const rd_kafka_message_t& r
if (RD_KAFKA_RESP_ERR__NOENT == get_header_response) {
return "[None]";
}
- logger.log_error("Failed to fetch message headers: %d: %s", rd_kafka_last_error(), rd_kafka_err2str(rd_kafka_last_error()));
+ logger.log_error("Failed to fetch message headers: {}: {}", magic_enum::enum_underlying(rd_kafka_last_error()), rd_kafka_err2str(rd_kafka_last_error()));
return "[Error]";
}
@@ -90,7 +90,7 @@ void print_kafka_message(const rd_kafka_message_t& rkmessage, core::logging::Log
message_as_string += get_human_readable_kafka_message_headers(rkmessage, logger) + ")";
message_as_string += "[Payload](" + message + ")";
- logger.log_debug("Message: %s", message_as_string.c_str());
+ logger.log_debug("Message: {}", message_as_string.c_str());
}
std::string get_encoded_string(const std::string& input, KafkaEncoding encoding) {
diff --git a/extensions/rocksdb-repos/database/ColumnHandle.cpp b/extensions/lua/LuaLogger.h
similarity index 62%
copy from extensions/rocksdb-repos/database/ColumnHandle.cpp
copy to extensions/lua/LuaLogger.h
index df4f65713..2412e74a0 100644
--- a/extensions/rocksdb-repos/database/ColumnHandle.cpp
+++ b/extensions/lua/LuaLogger.h
@@ -16,14 +16,23 @@
* limitations under the License.
*/
-#include "ColumnHandle.h"
-#include "logging/LoggerConfiguration.h"
+#pragma once
-namespace org::apache::nifi::minifi::internal {
+#include <string>
+#include <memory>
-ColumnHandle::~ColumnHandle() {
- static auto logger = core::logging::LoggerFactory<ColumnHandle>::getLogger();
- logger->log_trace("Closing column handle '%s'", handle->GetName());
-}
+#include "sol/sol.hpp"
+#include "core/StateManager.h"
-} // namespace org::apache::nifi::minifi::internal
+namespace org::apache::nifi::minifi::extensions::lua {
+
+class LuaLogger {
+ public:
+ explicit LuaLogger(gsl::not_null<core::logging::Logger*> logger) : logger_(logger) {}
+
+ void log_info(std::string_view log_message) { logger_->log_info("{}", log_message); }
+ private:
+ gsl::not_null<core::logging::Logger*> logger_;
+};
+
+} // namespace org::apache::nifi::minifi::extensions::lua
diff --git a/extensions/lua/LuaScriptEngine.cpp b/extensions/lua/LuaScriptEngine.cpp
index 5a21bf2a7..c2e97506f 100644
--- a/extensions/lua/LuaScriptEngine.cpp
+++ b/extensions/lua/LuaScriptEngine.cpp
@@ -22,6 +22,7 @@
#include "LuaScriptEngine.h"
#include "LuaProcessSession.h"
#include "LuaScriptProcessContext.h"
+#include "LuaLogger.h"
#include "utils/StringUtils.h"
namespace org::apache::nifi::minifi::extensions::lua {
@@ -37,9 +38,9 @@ LuaScriptEngine::LuaScriptEngine() {
sol::lib::table,
sol::lib::utf8,
sol::lib::package);
- lua_.new_usertype<core::logging::Logger>(
+ lua_.new_usertype<LuaLogger>(
"Logger",
- "info", &core::logging::Logger::log_info<>);
+ "info", &LuaLogger::log_info);
lua_.new_usertype<LuaProcessSession>(
"ProcessSession",
"create", static_cast<std::shared_ptr<LuaScriptFlowFile> (LuaProcessSession::*)()>(&LuaProcessSession::create),
@@ -109,7 +110,8 @@ void LuaScriptEngine::evalFile(const std::filesystem::path& file_name) {
}
void LuaScriptEngine::initialize(const core::Relationship& success, const core::Relationship& failure, const std::shared_ptr<core::logging::Logger>& logger) {
- bind("log", logger);
+ lua_logger_ = std::make_unique<LuaLogger>(gsl::make_not_null(logger.get()));
+ bind("log", lua_logger_.get());
bind("REL_SUCCESS", success);
bind("REL_FAILURE", failure);
}
diff --git a/extensions/lua/LuaScriptEngine.h b/extensions/lua/LuaScriptEngine.h
index 8840448cd..c0f099b8c 100644
--- a/extensions/lua/LuaScriptEngine.h
+++ b/extensions/lua/LuaScriptEngine.h
@@ -29,6 +29,7 @@
#include "LuaScriptEngine.h"
#include "LuaScriptProcessContext.h"
#include "LuaScriptException.h"
+#include "LuaLogger.h"
#include "LuaProcessSession.h"
@@ -75,6 +76,7 @@ class LuaScriptEngine {
private:
void executeScriptWithAppendedModulePaths(std::string& script);
+ std::unique_ptr<LuaLogger> lua_logger_;
std::vector<std::filesystem::path> module_paths_;
sol::state lua_;
};
diff --git a/extensions/mqtt/processors/AbstractMQTTProcessor.cpp b/extensions/mqtt/processors/AbstractMQTTProcessor.cpp
index d184a2f87..4f08eadd6 100644
--- a/extensions/mqtt/processors/AbstractMQTTProcessor.cpp
+++ b/extensions/mqtt/processors/AbstractMQTTProcessor.cpp
@@ -29,61 +29,61 @@ void AbstractMQTTProcessor::onSchedule(const std::shared_ptr<core::ProcessContex
if (auto value = context->getProperty(BrokerURI)) {
uri_ = std::move(*value);
}
- logger_->log_debug("AbstractMQTTProcessor: BrokerURI [%s]", uri_);
+ logger_->log_debug("AbstractMQTTProcessor: BrokerURI [{}]", uri_);
mqtt_version_ = utils::parseEnumProperty<mqtt::MqttVersions>(*context, MqttVersion);
- logger_->log_debug("AbstractMQTTProcessor: MQTT Specification Version: %s", std::string{magic_enum::enum_name(mqtt_version_)});
+ logger_->log_debug("AbstractMQTTProcessor: MQTT Specification Version: {}", magic_enum::enum_name(mqtt_version_));
if (auto value = context->getProperty(ClientID)) {
clientID_ = std::move(*value);
} else if (mqtt_version_ == mqtt::MqttVersions::V_3_1_0) {
throw minifi::Exception(ExceptionType::PROCESS_SCHEDULE_EXCEPTION, "MQTT 3.1.0 specification does not support empty client IDs");
}
- logger_->log_debug("AbstractMQTTProcessor: ClientID [%s]", clientID_);
+ logger_->log_debug("AbstractMQTTProcessor: ClientID [{}]", clientID_);
if (auto value = context->getProperty(Username)) {
username_ = std::move(*value);
}
- logger_->log_debug("AbstractMQTTProcessor: Username [%s]", username_);
+ logger_->log_debug("AbstractMQTTProcessor: Username [{}]", username_);
if (auto value = context->getProperty(Password)) {
password_ = std::move(*value);
}
- logger_->log_debug("AbstractMQTTProcessor: Password [%s]", password_);
+ logger_->log_debug("AbstractMQTTProcessor: Password [{}]", password_);
if (const auto keep_alive_interval = context->getProperty(KeepAliveInterval) | utils::andThen(&core::TimePeriodValue::fromString)) {
keep_alive_interval_ = std::chrono::duration_cast<std::chrono::seconds>(keep_alive_interval->getMilliseconds());
}
- logger_->log_debug("AbstractMQTTProcessor: KeepAliveInterval [%" PRId64 "] s", int64_t{keep_alive_interval_.count()});
+ logger_->log_debug("AbstractMQTTProcessor: KeepAliveInterval [{}] s", int64_t{keep_alive_interval_.count()});
if (const auto connection_timeout = context->getProperty(ConnectionTimeout) | utils::andThen(&core::TimePeriodValue::fromString)) {
connection_timeout_ = std::chrono::duration_cast<std::chrono::seconds>(connection_timeout->getMilliseconds());
}
- logger_->log_debug("AbstractMQTTProcessor: ConnectionTimeout [%" PRId64 "] s", int64_t{connection_timeout_.count()});
+ logger_->log_debug("AbstractMQTTProcessor: ConnectionTimeout [{}] s", int64_t{connection_timeout_.count()});
qos_ = utils::parseEnumProperty<mqtt::MqttQoS>(*context, QoS);
- logger_->log_debug("AbstractMQTTProcessor: QoS [%u]", static_cast<uint8_t>(qos_));
+ logger_->log_debug("AbstractMQTTProcessor: QoS [{}]", magic_enum::enum_name(qos_));
if (const auto security_protocol = context->getProperty(SecurityProtocol)) {
if (*security_protocol == MQTT_SECURITY_PROTOCOL_SSL) {
sslOpts_ = MQTTAsync_SSLOptions_initializer;
if (auto value = context->getProperty(SecurityCA)) {
- logger_->log_debug("AbstractMQTTProcessor: trustStore [%s]", *value);
+ logger_->log_debug("AbstractMQTTProcessor: trustStore [{}]", *value);
securityCA_ = std::move(*value);
sslOpts_->trustStore = securityCA_.c_str();
}
if (auto value = context->getProperty(SecurityCert)) {
- logger_->log_debug("AbstractMQTTProcessor: keyStore [%s]", *value);
+ logger_->log_debug("AbstractMQTTProcessor: keyStore [{}]", *value);
securityCert_ = std::move(*value);
sslOpts_->keyStore = securityCert_.c_str();
}
if (auto value = context->getProperty(SecurityPrivateKey)) {
- logger_->log_debug("AbstractMQTTProcessor: privateKey [%s]", *value);
+ logger_->log_debug("AbstractMQTTProcessor: privateKey [{}]", *value);
securityPrivateKey_ = std::move(*value);
sslOpts_->privateKey = securityPrivateKey_.c_str();
}
if (auto value = context->getProperty(SecurityPrivateKeyPassword)) {
- logger_->log_debug("AbstractMQTTProcessor: privateKeyPassword [%s]", *value);
+ logger_->log_debug("AbstractMQTTProcessor: privateKeyPassword [{}]", *value);
securityPrivateKeyPassword_ = std::move(*value);
sslOpts_->privateKeyPassword = securityPrivateKeyPassword_.c_str();
}
@@ -93,28 +93,28 @@ void AbstractMQTTProcessor::onSchedule(const std::shared_ptr<core::ProcessContex
if (auto last_will_topic = context->getProperty(LastWillTopic); last_will_topic.has_value() && !last_will_topic->empty()) {
last_will_ = MQTTAsync_willOptions_initializer;
- logger_->log_debug("AbstractMQTTProcessor: Last Will Topic [%s]", *last_will_topic);
+ logger_->log_debug("AbstractMQTTProcessor: Last Will Topic [{}]", *last_will_topic);
last_will_topic_ = std::move(*last_will_topic);
last_will_->topicName = last_will_topic_.c_str();
if (auto value = context->getProperty(LastWillMessage)) {
- logger_->log_debug("AbstractMQTTProcessor: Last Will Message [%s]", *value);
+ logger_->log_debug("AbstractMQTTProcessor: Last Will Message [{}]", *value);
last_will_message_ = std::move(*value);
last_will_->message = last_will_message_.c_str();
}
last_will_qos_ = utils::parseEnumProperty<mqtt::MqttQoS>(*context, LastWillQoS);
- logger_->log_debug("AbstractMQTTProcessor: Last Will QoS [%u]", static_cast<uint8_t>(last_will_qos_));
+ logger_->log_debug("AbstractMQTTProcessor: Last Will QoS [{}]", magic_enum::enum_name(last_will_qos_));
last_will_->qos = static_cast<int>(last_will_qos_);
if (const auto value = context->getProperty(LastWillRetain) | utils::andThen(&utils::StringUtils::toBool)) {
- logger_->log_debug("AbstractMQTTProcessor: Last Will Retain [%d]", *value);
+ logger_->log_debug("AbstractMQTTProcessor: Last Will Retain [{}]", *value);
last_will_retain_ = {*value};
last_will_->retained = last_will_retain_;
}
if (auto value = context->getProperty(LastWillContentType)) {
- logger_->log_debug("AbstractMQTTProcessor: Last Will Content Type [%s]", *value);
+ logger_->log_debug("AbstractMQTTProcessor: Last Will Content Type [{}]", *value);
last_will_content_type_ = std::move(*value);
}
}
@@ -151,7 +151,7 @@ void AbstractMQTTProcessor::reconnect() {
throw minifi::Exception(ExceptionType::PROCESS_SCHEDULE_EXCEPTION, "MQTT client is not existing while trying to reconnect");
}
if (MQTTAsync_isConnected(client_)) {
- logger_->log_debug("Already connected to %s, no need to reconnect", uri_);
+ logger_->log_debug("Already connected to {}, no need to reconnect", uri_);
return;
}
@@ -165,16 +165,16 @@ void AbstractMQTTProcessor::reconnect() {
const MQTTAsync_connectOptions connect_options = createConnectOptions(connect_properties, will_properties, connect_finished_task);
- logger_->log_info("Reconnecting to %s", uri_);
+ logger_->log_info("Reconnecting to {}", uri_);
if (MQTTAsync_isConnected(client_)) {
- logger_->log_debug("Already connected to %s, no need to reconnect", uri_);
+ logger_->log_debug("Already connected to {}, no need to reconnect", uri_);
return;
}
const int ret = MQTTAsync_connect(client_, &connect_options);
MQTTProperties_free(&connect_properties);
if (ret != MQTTASYNC_SUCCESS) {
- logger_->log_error("MQTTAsync_connect failed to MQTT broker %s with error code [%d]", uri_, ret);
+ logger_->log_error("MQTTAsync_connect failed to MQTT broker {} with error code [{}]", uri_, ret);
return;
}
@@ -263,7 +263,7 @@ void AbstractMQTTProcessor::onTrigger(const std::shared_ptr<core::ProcessContext
reconnect();
if (!MQTTAsync_isConnected(client_)) {
- logger_->log_error("Could not work with MQTT broker because disconnected to %s", uri_);
+ logger_->log_error("Could not work with MQTT broker because disconnected to {}", uri_);
yield();
return;
}
@@ -308,7 +308,7 @@ void AbstractMQTTProcessor::disconnect() {
const int ret = MQTTAsync_disconnect(client_, &disconnect_options);
if (ret != MQTTASYNC_SUCCESS) {
- logger_->log_error("MQTTAsync_disconnect failed to MQTT broker %s with error code [%d]", uri_, ret);
+ logger_->log_error("MQTTAsync_disconnect failed to MQTT broker {} with error code [{}]", uri_, ret);
return;
}
@@ -399,23 +399,23 @@ int AbstractMQTTProcessor::msgReceived(void *context, char* topic_name, int topi
}
void AbstractMQTTProcessor::onConnectionLost(char* cause) {
- logger_->log_error("Connection lost to MQTT broker %s", uri_);
+ logger_->log_error("Connection lost to MQTT broker {}", uri_);
if (cause != nullptr) {
- logger_->log_error("Cause for connection loss: %s", cause);
+ logger_->log_error("Cause for connection loss: {}", cause);
}
}
void AbstractMQTTProcessor::onConnectFinished(MQTTAsync_successData* success_data, MQTTAsync_successData5* success_data_5,
MQTTAsync_failureData* failure_data, MQTTAsync_failureData5* failure_data_5) {
if (success_data) {
- logger_->log_info("Successfully connected to MQTT broker %s", uri_);
+ logger_->log_info("Successfully connected to MQTT broker {}", uri_);
startupClient();
return;
}
if (success_data_5) {
- logger_->log_info("Successfully connected to MQTT broker %s", uri_);
- logger_->log_info("Reason code for connection success: %d: %s", success_data_5->reasonCode, MQTTReasonCode_toString(success_data_5->reasonCode));
+ logger_->log_info("Successfully connected to MQTT broker {}", uri_);
+ logger_->log_info("Reason code for connection success: {}: {}", magic_enum::enum_underlying(success_data_5->reasonCode), MQTTReasonCode_toString(success_data_5->reasonCode));
setBrokerLimits(success_data_5);
checkBrokerLimits();
startupClient();
@@ -423,49 +423,49 @@ void AbstractMQTTProcessor::onConnectFinished(MQTTAsync_successData* success_dat
}
if (failure_data) {
- logger_->log_error("Connection failed to MQTT broker %s (%d)", uri_, failure_data->code);
+ logger_->log_error("Connection failed to MQTT broker {} ({})", uri_, failure_data->code);
if (failure_data->message != nullptr) {
- logger_->log_error("Detailed reason for connection failure: %s", failure_data->message);
+ logger_->log_error("Detailed reason for connection failure: {}", failure_data->message);
}
return;
}
if (failure_data_5) {
- logger_->log_error("Connection failed to MQTT broker %s (%d)", uri_, failure_data_5->code);
+ logger_->log_error("Connection failed to MQTT broker {} ({})", uri_, failure_data_5->code);
if (failure_data_5->message != nullptr) {
- logger_->log_error("Detailed reason for connection failure: %s", failure_data_5->message);
+ logger_->log_error("Detailed reason for connection failure: {}", failure_data_5->message);
}
- logger_->log_error("Reason code for connection failure: %d: %s", failure_data_5->reasonCode, MQTTReasonCode_toString(failure_data_5->reasonCode));
+ logger_->log_error("Reason code for connection failure: {}: {}", magic_enum::enum_underlying(failure_data_5->reasonCode), MQTTReasonCode_toString(failure_data_5->reasonCode));
}
}
void AbstractMQTTProcessor::onDisconnectFinished(MQTTAsync_successData* success_data, MQTTAsync_successData5* success_data_5,
MQTTAsync_failureData* failure_data, MQTTAsync_failureData5* failure_data_5) {
if (success_data) {
- logger_->log_info("Successfully disconnected from MQTT broker %s", uri_);
+ logger_->log_info("Successfully disconnected from MQTT broker {}", uri_);
return;
}
if (success_data_5) {
- logger_->log_info("Successfully disconnected from MQTT broker %s", uri_);
- logger_->log_info("Reason code for disconnection success: %d: %s", success_data_5->reasonCode, MQTTReasonCode_toString(success_data_5->reasonCode));
+ logger_->log_info("Successfully disconnected from MQTT broker {}", uri_);
+ logger_->log_info("Reason code for disconnection success: {}: {}", magic_enum::enum_underlying(success_data_5->reasonCode), MQTTReasonCode_toString(success_data_5->reasonCode));
return;
}
if (failure_data) {
- logger_->log_error("Disconnection failed from MQTT broker %s (%d)", uri_, failure_data->code);
+ logger_->log_error("Disconnection failed from MQTT broker {} ({})", uri_, failure_data->code);
if (failure_data->message != nullptr) {
- logger_->log_error("Detailed reason for disconnection failure: %s", failure_data->message);
+ logger_->log_error("Detailed reason for disconnection failure: {}", failure_data->message);
}
return;
}
if (failure_data_5) {
- logger_->log_error("Disconnection failed from MQTT broker %s (%d)", uri_, failure_data_5->code);
+ logger_->log_error("Disconnection failed from MQTT broker {} ({})", uri_, failure_data_5->code);
if (failure_data_5->message != nullptr) {
- logger_->log_error("Detailed reason for disconnection failure: %s", failure_data_5->message);
+ logger_->log_error("Detailed reason for disconnection failure: {}", failure_data_5->message);
}
- logger_->log_error("Reason code for disconnection failure: %d: %s", failure_data_5->reasonCode, MQTTReasonCode_toString(failure_data_5->reasonCode));
+ logger_->log_error("Reason code for disconnection failure: {}: {}", magic_enum::enum_underlying(failure_data_5->reasonCode), MQTTReasonCode_toString(failure_data_5->reasonCode));
}
}
diff --git a/extensions/mqtt/processors/ConsumeMQTT.cpp b/extensions/mqtt/processors/ConsumeMQTT.cpp
index 3df93ea7e..355b7aab3 100644
--- a/extensions/mqtt/processors/ConsumeMQTT.cpp
+++ b/extensions/mqtt/processors/ConsumeMQTT.cpp
@@ -41,7 +41,7 @@ void ConsumeMQTT::enqueueReceivedMQTTMsg(SmartMessage message) {
return;
}
- logger_->log_debug("enqueuing MQTT message with length %d", message.contents->payloadlen);
+ logger_->log_debug("enqueuing MQTT message with length {}", message.contents->payloadlen);
queue_.enqueue(std::move(message));
}
@@ -49,42 +49,42 @@ void ConsumeMQTT::readProperties(const std::shared_ptr<core::ProcessContext>& co
if (auto value = context->getProperty(Topic)) {
topic_ = std::move(*value);
}
- logger_->log_debug("ConsumeMQTT: Topic [%s]", topic_);
+ logger_->log_debug("ConsumeMQTT: Topic [{}]", topic_);
if (const auto value = context->getProperty(CleanSession) | utils::andThen(&utils::StringUtils::toBool)) {
clean_session_ = *value;
}
- logger_->log_debug("ConsumeMQTT: CleanSession [%d]", clean_session_);
+ logger_->log_debug("ConsumeMQTT: CleanSession [{}]", clean_session_);
if (const auto value = context->getProperty(CleanStart) | utils::andThen(&utils::StringUtils::toBool)) {
clean_start_ = *value;
}
- logger_->log_debug("ConsumeMQTT: CleanStart [%d]", clean_start_);
+ logger_->log_debug("ConsumeMQTT: CleanStart [{}]", clean_start_);
if (const auto session_expiry_interval = context->getProperty(SessionExpiryInterval) | utils::andThen(&core::TimePeriodValue::fromString)) {
session_expiry_interval_ = std::chrono::duration_cast<std::chrono::seconds>(session_expiry_interval->getMilliseconds());
}
- logger_->log_debug("ConsumeMQTT: SessionExpiryInterval [%" PRId64 "] s", int64_t{session_expiry_interval_.count()});
+ logger_->log_debug("ConsumeMQTT: SessionExpiryInterval [{}] s", int64_t{session_expiry_interval_.count()});
if (const auto value = context->getProperty(QueueBufferMaxMessage) | utils::andThen(&utils::toNumber<uint64_t>)) {
max_queue_size_ = *value;
}
- logger_->log_debug("ConsumeMQTT: Queue Max Message [%" PRIu64 "]", max_queue_size_);
+ logger_->log_debug("ConsumeMQTT: Queue Max Message [{}]", max_queue_size_);
if (auto value = context->getProperty(AttributeFromContentType)) {
attribute_from_content_type_ = std::move(*value);
}
- logger_->log_debug("ConsumeMQTT: Attribute From Content Type [%s]", attribute_from_content_type_);
+ logger_->log_debug("ConsumeMQTT: Attribute From Content Type [{}]", attribute_from_content_type_);
if (const auto topic_alias_maximum = context->getProperty(TopicAliasMaximum) | utils::andThen(&utils::toNumber<uint32_t>)) {
topic_alias_maximum_ = gsl::narrow<uint16_t>(*topic_alias_maximum);
}
- logger_->log_debug("ConsumeMQTT: Topic Alias Maximum [%" PRIu16 "]", topic_alias_maximum_);
+ logger_->log_debug("ConsumeMQTT: Topic Alias Maximum [{}]", topic_alias_maximum_);
if (const auto receive_maximum = context->getProperty(ReceiveMaximum) | utils::andThen(&utils::toNumber<uint32_t>)) {
receive_maximum_ = gsl::narrow<uint16_t>(*receive_maximum);
}
- logger_->log_debug("ConsumeMQTT: Receive Maximum [%" PRIu16 "]", receive_maximum_);
+ logger_->log_debug("ConsumeMQTT: Receive Maximum [{}]", receive_maximum_);
}
void ConsumeMQTT::onTriggerImpl(const std::shared_ptr<core::ProcessContext>& /*context*/, const std::shared_ptr<core::ProcessSession>& session) {
@@ -96,17 +96,17 @@ void ConsumeMQTT::onTriggerImpl(const std::shared_ptr<core::ProcessContext>& /*c
try {
session->write(flow_file, std::ref(write_callback));
} catch (const Exception& ex) {
- logger_->log_error("Error when processing message queue: %s", ex.what());
+ logger_->log_error("Error when processing message queue: {}", ex.what());
}
if (!write_callback.getSuccessStatus()) {
- logger_->log_error("ConsumeMQTT fail for the flow with UUID %s", flow_file->getUUIDStr());
+ logger_->log_error("ConsumeMQTT fail for the flow with UUID {}", flow_file->getUUIDStr());
session->remove(flow_file);
} else {
putUserPropertiesAsAttributes(message, flow_file, session);
session->putAttribute(flow_file, BrokerOutputAttribute.name, uri_);
session->putAttribute(flow_file, TopicOutputAttribute.name, message.topic);
fillAttributeFromContentType(message, flow_file, session);
- logger_->log_debug("ConsumeMQTT processing success for the flow with UUID %s topic %s", flow_file->getUUIDStr(), message.topic);
+ logger_->log_debug("ConsumeMQTT processing success for the flow with UUID {} topic {}", flow_file->getUUIDStr(), message.topic);
session->transfer(flow_file, Success);
}
msg_queue.pop();
@@ -125,7 +125,7 @@ std::queue<ConsumeMQTT::SmartMessage> ConsumeMQTT::getReceivedMqttMessages() {
int64_t ConsumeMQTT::WriteCallback::operator() (const std::shared_ptr<io::OutputStream>& stream) {
if (message_.contents->payloadlen < 0) {
success_status_ = false;
- logger_->log_error("Payload length of message is negative, value is [%d]", message_.contents->payloadlen);
+ logger_->log_error("Payload length of message is negative, value is [{}]", message_.contents->payloadlen);
return -1;
}
@@ -181,10 +181,10 @@ void ConsumeMQTT::startupClient() {
const int ret = MQTTAsync_subscribe(client_, topic_.c_str(), gsl::narrow<int>(qos_), &response_options);
if (ret != MQTTASYNC_SUCCESS) {
- logger_->log_error("Failed to subscribe to MQTT topic %s (%d)", topic_, ret);
+ logger_->log_error("Failed to subscribe to MQTT topic {} ({})", topic_, ret);
return;
}
- logger_->log_debug("Successfully subscribed to MQTT topic: %s", topic_);
+ logger_->log_debug("Successfully subscribed to MQTT topic: {}", topic_);
}
void ConsumeMQTT::onMessageReceived(SmartMessage smart_message) {
@@ -212,7 +212,7 @@ void ConsumeMQTT::resolveTopicFromAlias(SmartMessage& smart_message) {
if (alias.has_value()) {
if (*alias > topic_alias_maximum_) {
- logger_->log_error("Broker does not respect client's Topic Alias Maximum, sent a greater value: %" PRIu16 " > %" PRIu16, *alias, topic_alias_maximum_);
+ logger_->log_error("Broker does not respect client's Topic Alias Maximum, sent a greater value: {} > {}", *alias, topic_alias_maximum_);
return;
}
@@ -220,7 +220,7 @@ void ConsumeMQTT::resolveTopicFromAlias(SmartMessage& smart_message) {
if (topic.empty()) {
const auto iter = alias_to_topic_.find(*alias);
if (iter == alias_to_topic_.end()) {
- logger_->log_error("Broker sent an alias that was not known to client before: %" PRIu16, *alias);
+ logger_->log_error("Broker sent an alias that was not known to client before: {}", *alias);
} else {
topic = iter->second;
}
@@ -304,7 +304,7 @@ void ConsumeMQTT::checkBrokerLimitsImpl() {
throw Exception(PROCESS_SCHEDULE_EXCEPTION, os.str());
}
} else {
- logger_->log_warn("Shared topic feature with topic \"%s\" might not be supported by broker on MQTT 3.x");
+ logger_->log_warn("Shared topic feature with topic \"{}\" might not be supported by broker on MQTT 3.x", topic_);
}
}
}
@@ -346,22 +346,22 @@ void ConsumeMQTT::subscriptionFailure5(void* context, MQTTAsync_failureData5* re
}
void ConsumeMQTT::onSubscriptionSuccess() {
- logger_->log_info("Successfully subscribed to MQTT topic %s on broker %s", topic_, uri_);
+ logger_->log_info("Successfully subscribed to MQTT topic {} on broker {}", topic_, uri_);
}
void ConsumeMQTT::onSubscriptionFailure(MQTTAsync_failureData* response) {
- logger_->log_error("Subscription failed on topic %s to MQTT broker %s (%d)", topic_, uri_, response->code);
+ logger_->log_error("Subscription failed on topic {} to MQTT broker {} ({})", topic_, uri_, response->code);
if (response->message != nullptr) {
- logger_->log_error("Detailed reason for subscription failure: %s", response->message);
+ logger_->log_error("Detailed reason for subscription failure: {}", response->message);
}
}
void ConsumeMQTT::onSubscriptionFailure5(MQTTAsync_failureData5* response) {
- logger_->log_error("Subscription failed on topic %s to MQTT broker %s (%d)", topic_, uri_, response->code);
+ logger_->log_error("Subscription failed on topic {} to MQTT broker {} ({})", topic_, uri_, response->code);
if (response->message != nullptr) {
- logger_->log_error("Detailed reason for subscription failure: %s", response->message);
+ logger_->log_error("Detailed reason for subscription failure: {}", response->message);
}
- logger_->log_error("Reason code for subscription failure: %d: %s", response->reasonCode, MQTTReasonCode_toString(response->reasonCode));
+ logger_->log_error("Reason code for subscription failure: {}: {}", magic_enum::enum_underlying(response->reasonCode), MQTTReasonCode_toString(response->reasonCode));
}
REGISTER_RESOURCE(ConsumeMQTT, Processor);
diff --git a/extensions/mqtt/processors/PublishMQTT.cpp b/extensions/mqtt/processors/PublishMQTT.cpp
index 9ede561fa..b9170411e 100644
--- a/extensions/mqtt/processors/PublishMQTT.cpp
+++ b/extensions/mqtt/processors/PublishMQTT.cpp
@@ -50,11 +50,11 @@ void PublishMQTT::readProperties(const std::shared_ptr<core::ProcessContext>& co
if (const auto retain_opt = context->getProperty(Retain) | utils::andThen(&utils::StringUtils::toBool)) {
retain_ = *retain_opt;
}
- logger_->log_debug("PublishMQTT: Retain [%d]", retain_);
+ logger_->log_debug("PublishMQTT: Retain [{}]", retain_);
if (const auto message_expiry_interval = context->getProperty(MessageExpiryInterval) | utils::andThen(&core::TimePeriodValue::fromString)) {
message_expiry_interval_ = std::chrono::duration_cast<std::chrono::seconds>(message_expiry_interval->getMilliseconds());
- logger_->log_debug("PublishMQTT: MessageExpiryInterval [%" PRId64 "] s", int64_t{message_expiry_interval_->count()});
+ logger_->log_debug("PublishMQTT: MessageExpiryInterval [{}] s", int64_t{message_expiry_interval_->count()});
}
in_flight_message_counter_.setEnabled(mqtt_version_ == mqtt::MqttVersions::V_5_0 && qos_ != mqtt::MqttQoS::LEVEL_0);
@@ -75,14 +75,14 @@ void PublishMQTT::onTriggerImpl(const std::shared_ptr<core::ProcessContext>& con
try {
const auto result = session->readBuffer(flow_file);
if (result.status < 0 || !sendMessage(result.buffer, topic, getContentType(context, flow_file), flow_file)) {
- logger_->log_error("Failed to send flow file [%s] to MQTT topic '%s' on broker %s", flow_file->getUUIDStr(), topic, uri_);
+ logger_->log_error("Failed to send flow file [{}] to MQTT topic '{}' on broker {}", flow_file->getUUIDStr(), topic, uri_);
session->transfer(flow_file, Failure);
return;
}
- logger_->log_debug("Sent flow file [%s] with length %" PRId64 " to MQTT topic '%s' on broker %s", flow_file->getUUIDStr(), result.status, topic, uri_);
+ logger_->log_debug("Sent flow file [{}] with length {} to MQTT topic '{}' on broker {}", flow_file->getUUIDStr(), result.status, topic, uri_);
session->transfer(flow_file, Success);
} catch (const Exception& ex) {
- logger_->log_error("Failed to send flow file [%s] to MQTT topic '%s' on broker %s, exception string: '%s'", flow_file->getUUIDStr(), topic, uri_, ex.what());
+ logger_->log_error("Failed to send flow file [{}] to MQTT topic '{}' on broker {}, exception string: '{}'", flow_file->getUUIDStr(), topic, uri_, ex.what());
session->transfer(flow_file, Failure);
}
}
@@ -90,12 +90,12 @@ void PublishMQTT::onTriggerImpl(const std::shared_ptr<core::ProcessContext>& con
bool PublishMQTT::sendMessage(const std::vector<std::byte>& buffer, const std::string& topic, const std::string& content_type, const std::shared_ptr<core::FlowFile>& flow_file) {
static constexpr size_t max_packet_size = 256_MiB - 1;
if (buffer.size() > max_packet_size) {
- logger_->log_error("Sending message failed because MQTT limit maximum packet size [%u] is exceeded by FlowFile of [%zu]", std::to_string(max_packet_size), buffer.size());
+ logger_->log_error("Sending message failed because MQTT limit maximum packet size [{}] is exceeded by FlowFile of [{}]", std::to_string(max_packet_size), buffer.size());
return false;
}
if (maximum_packet_size_.has_value() && buffer.size() > *(maximum_packet_size_)) {
- logger_->log_error("Sending message failed because broker-requested maximum packet size [%" PRIu32 "] is exceeded by FlowFile of [%zu]",
+ logger_->log_error("Sending message failed because broker-requested maximum packet size [{}] is exceeded by FlowFile of [{}]",
*maximum_packet_size_, buffer.size());
return false;
}
@@ -128,7 +128,7 @@ bool PublishMQTT::sendMessage(const std::vector<std::byte>& buffer, const std::s
const int error_code = MQTTAsync_sendMessage(client_, topic.c_str(), &message_to_publish, &response_options);
if (error_code != MQTTASYNC_SUCCESS) {
- logger_->log_error("MQTTAsync_sendMessage failed on topic '%s', MQTT broker %s with error code [%d]", topic, uri_, error_code);
+ logger_->log_error("MQTTAsync_sendMessage failed on topic '{}', MQTT broker {} with error code [{}]", topic, uri_, error_code);
// early fail, sending attempt did not succeed, no need to wait for callback
in_flight_message_counter_.decrease();
return false;
@@ -178,14 +178,14 @@ bool PublishMQTT::notify(const bool success, const std::optional<int> response_c
in_flight_message_counter_.decrease();
if (success) {
- logger_->log_debug("Successfully sent message to MQTT broker %s", uri_);
+ logger_->log_debug("Successfully sent message to MQTT broker {}", uri_);
if (reason_code.has_value()) {
- logger_->log_error("Additional reason code for sending success: %d: %s", *reason_code, MQTTReasonCode_toString(*reason_code));
+ logger_->log_error("Additional reason code for sending success: {}: {}", magic_enum::enum_underlying(*reason_code), MQTTReasonCode_toString(*reason_code));
}
} else {
- logger_->log_error("Sending message failed to MQTT broker %s with response code %d", uri_, *response_code);
+ logger_->log_error("Sending message failed to MQTT broker {} with response code {}", uri_, *response_code);
if (reason_code.has_value()) {
- logger_->log_error("Reason code for sending failure: %d: %s", *reason_code, MQTTReasonCode_toString(*reason_code));
+ logger_->log_error("Reason code for sending failure: {}: {}", magic_enum::enum_underlying(*reason_code), MQTTReasonCode_toString(*reason_code));
}
}
@@ -194,7 +194,7 @@ bool PublishMQTT::notify(const bool success, const std::optional<int> response_c
std::string PublishMQTT::getTopic(const std::shared_ptr<core::ProcessContext>& context, const std::shared_ptr<core::FlowFile>& flow_file) const {
if (auto value = context->getProperty(Topic, flow_file)) {
- logger_->log_debug("PublishMQTT: Topic resolved as \"%s\"", *value);
+ logger_->log_debug("PublishMQTT: Topic resolved as \"{}\"", *value);
return *value;
}
throw minifi::Exception(ExceptionType::GENERAL_EXCEPTION, "Could not resolve required property Topic");
@@ -202,7 +202,7 @@ std::string PublishMQTT::getTopic(const std::shared_ptr<core::ProcessContext>& c
std::string PublishMQTT::getContentType(const std::shared_ptr<core::ProcessContext>& context, const std::shared_ptr<core::FlowFile>& flow_file) const {
if (auto value = context->getProperty(ContentType, flow_file)) {
- logger_->log_debug("PublishMQTT: Content Type resolved as \"%s\"", *value);
+ logger_->log_debug("PublishMQTT: Content Type resolved as \"{}\"", *value);
return *value;
}
return "";
diff --git a/extensions/opc/src/fetchopc.cpp b/extensions/opc/src/fetchopc.cpp
index 39682ecf6..83c1f1423 100644
--- a/extensions/opc/src/fetchopc.cpp
+++ b/extensions/opc/src/fetchopc.cpp
@@ -25,6 +25,7 @@
#include "core/ProcessSession.h"
#include "core/Resource.h"
#include "utils/StringUtils.h"
+#include "utils/Enum.h"
namespace org::apache::nifi::minifi::processors {
@@ -100,7 +101,7 @@ namespace org::apache::nifi::minifi::processors {
myID.identifierType = UA_NODEIDTYPE_STRING;
myID.identifier.string = UA_STRING_ALLOC(nodeID_.c_str()); // NOLINT(cppcoreguidelines-pro-type-union-access)
} else {
- logger_->log_error("Unhandled id type: '%d'. No flowfiles are generated.", idType_);
+ logger_->log_error("Unhandled id type: '{}'. No flowfiles are generated.", magic_enum::enum_underlying(idType_));
yield();
return;
}
@@ -109,7 +110,7 @@ namespace org::apache::nifi::minifi::processors {
if (translatedNodeIDs_.empty()) {
auto sc = connection_->translateBrowsePathsToNodeIdsRequest(nodeID_, translatedNodeIDs_, logger_);
if (sc != UA_STATUSCODE_GOOD) {
- logger_->log_error("Failed to translate %s to node id, no flow files will be generated (%s)", nodeID_.c_str(), UA_StatusCode_name(sc));
+ logger_->log_error("Failed to translate {} to node id, no flow files will be generated ({})", nodeID_.c_str(), UA_StatusCode_name(sc));
yield();
return;
}
@@ -141,7 +142,7 @@ namespace org::apache::nifi::minifi::processors {
std::string new_timestamp = nodedata.attributes["Sourcetimestamp"];
if (cur_timestamp != new_timestamp) {
node_timestamp_[nodeid] = new_timestamp;
- logger_->log_debug("Node %s has new source timestamp %s", nodeid, new_timestamp);
+ logger_->log_debug("Node {} has new source timestamp {}", nodeid, new_timestamp);
write = true;
}
}
@@ -151,7 +152,7 @@ namespace org::apache::nifi::minifi::processors {
}
} catch (const std::exception& exception) {
std::string browse_name(reinterpret_cast<char*>(ref->browseName.name.data), ref->browseName.name.length);
- logger_->log_warn("Caught Exception while trying to get data from node %s: %s", path + "/" + browse_name, exception.what());
+ logger_->log_warn("Caught Exception while trying to get data from node {}: {}", path + "/" + browse_name, exception.what());
}
}
return true;
@@ -172,7 +173,7 @@ namespace org::apache::nifi::minifi::processors {
} catch (const std::exception& e) {
std::string browsename;
flowFile->getAttribute("Browsename", browsename);
- logger_->log_info("Failed to extract data of OPC node %s: %s", browsename, e.what());
+ logger_->log_info("Failed to extract data of OPC node {}: {}", browsename, e.what());
session->transfer(flowFile, Failure);
return;
}
diff --git a/extensions/opc/src/opc.cpp b/extensions/opc/src/opc.cpp
index b3de74663..6d1881e86 100644
--- a/extensions/opc/src/opc.cpp
+++ b/extensions/opc/src/opc.cpp
@@ -149,7 +149,7 @@ Client::Client(const std::shared_ptr<core::logging::Logger>& logger, const std::
UA_ByteString_clear(&trustList[i]);
}
if (sc != UA_STATUSCODE_GOOD) {
- logger->log_error("Configuring the client for encryption failed: %s", UA_StatusCode_name(sc));
+ logger->log_error("Configuring the client for encryption failed: {}", UA_StatusCode_name(sc));
UA_Client_delete(client_);
throw OPCException(GENERAL_EXCEPTION, std::string("Failed to created client with the provided encryption settings: ") + UA_StatusCode_name(sc));
}
@@ -178,7 +178,7 @@ Client::~Client() {
if (channel_state != UA_SECURECHANNELSTATE_CLOSED) {
auto sc = UA_Client_disconnect(client_);
if (sc != UA_STATUSCODE_GOOD) {
- logger_->log_warn("Failed to disconnect OPC client: %s", UA_StatusCode_name(sc));
+ logger_->log_warn("Failed to disconnect OPC client: {}", UA_StatusCode_name(sc));
}
}
UA_Client_delete(client_);
@@ -336,7 +336,7 @@ bool Client::exists(UA_NodeId nodeId) {
}
UA_StatusCode Client::translateBrowsePathsToNodeIdsRequest(const std::string& path, std::vector<UA_NodeId>& foundNodeIDs, const std::shared_ptr<core::logging::Logger>& logger) {
- logger->log_trace("Trying to find node id for %s", path.c_str());
+ logger->log_trace("Trying to find node id for {}", path.c_str());
auto tokens = utils::StringUtils::split(path, "/");
std::vector<UA_UInt32> ids;
@@ -370,7 +370,7 @@ UA_StatusCode Client::translateBrowsePathsToNodeIdsRequest(const std::string& pa
});
if (response.resultsSize < 1) {
- logger->log_warn("No node id in response for %s", path.c_str());
+ logger->log_warn("No node id in response for {}", path.c_str());
return UA_STATUSCODE_BADNODATAAVAILABLE;
}
@@ -390,10 +390,10 @@ UA_StatusCode Client::translateBrowsePathsToNodeIdsRequest(const std::string& pa
UA_TranslateBrowsePathsToNodeIdsResponse_clear(&response);
if (foundData) {
- logger->log_debug("Found %lu nodes for path %s", foundNodeIDs.size(), path.c_str());
+ logger->log_debug("Found {} nodes for path {}", foundNodeIDs.size(), path.c_str());
return UA_STATUSCODE_GOOD;
} else {
- logger->log_warn("No node id found for path %s", path.c_str());
+ logger->log_warn("No node id found for path {}", path.c_str());
return UA_STATUSCODE_BADNODATAAVAILABLE;
}
}
@@ -430,7 +430,7 @@ std::unique_ptr<Client> Client::createClient(const std::shared_ptr<core::logging
try {
return ClientPtr(new Client(logger, applicationURI, certBuffer, keyBuffer, trustBuffers));
} catch (const std::exception& exception) {
- logger->log_error("Failed to create client: %s", exception.what());
+ logger->log_error("Failed to create client: {}", exception.what());
}
return nullptr;
}
diff --git a/extensions/opc/src/opcbase.cpp b/extensions/opc/src/opcbase.cpp
index feb8e9ce8..bdf761287 100644
--- a/extensions/opc/src/opcbase.cpp
+++ b/extensions/opc/src/opcbase.cpp
@@ -98,7 +98,7 @@ namespace org::apache::nifi::minifi::processors {
auto sc = connection_->connect(endPointURL_, username_, password_);
if (sc != UA_STATUSCODE_GOOD) {
- logger_->log_error("Failed to connect: %s!", UA_StatusCode_name(sc));
+ logger_->log_error("Failed to connect: {}!", UA_StatusCode_name(sc));
return false;
}
logger_->log_debug("Successfully connected.");
diff --git a/extensions/opc/src/putopc.cpp b/extensions/opc/src/putopc.cpp
index b55a9f9e4..7ae8a892a 100644
--- a/extensions/opc/src/putopc.cpp
+++ b/extensions/opc/src/putopc.cpp
@@ -87,11 +87,11 @@ namespace org::apache::nifi::minifi::processors {
std::vector<UA_NodeId> translatedNodeIDs;
if (connection_->translateBrowsePathsToNodeIdsRequest(nodeID_, translatedNodeIDs, logger_) !=
UA_STATUSCODE_GOOD) {
- logger_->log_error("Failed to translate %s to node id, no flow files will be put", nodeID_.c_str());
+ logger_->log_error("Failed to translate {} to node id, no flow files will be put", nodeID_.c_str());
yield();
return;
} else if (translatedNodeIDs.size() != 1) {
- logger_->log_error("%s was translated to multiple node ids, no flow files will be put", nodeID_.c_str());
+ logger_->log_error("{} was translated to multiple node ids, no flow files will be put", nodeID_.c_str());
yield();
return;
} else {
@@ -135,16 +135,14 @@ namespace org::apache::nifi::minifi::processors {
if (!context->getProperty(TargetNodeID, targetid, flowFile)) {
- logger_->log_error("Flowfile %s had target node ID type specified (%s) without ID, routing to failure!",
+ logger_->log_error("Flowfile {} had target node ID type specified ({}) without ID, routing to failure!",
flowFile->getUUIDStr(), targetidtype);
session->transfer(flowFile, Failure);
return;
}
if (!context->getProperty(TargetNodeNameSpaceIndex, namespaceidx, flowFile)) {
- logger_->log_error(
- "Flowfile %s had target node ID type specified (%s) without namespace index, routing to failure!",
- flowFile->getUUIDStr(), targetidtype);
+ logger_->log_error("Flowfile {} had target node ID type specified ({}) without namespace index, routing to failure!", flowFile->getUUIDStr(), targetidtype);
session->transfer(flowFile, Failure);
return;
}
@@ -152,7 +150,7 @@ namespace org::apache::nifi::minifi::processors {
try {
nsi = std::stoi(namespaceidx);
} catch (...) {
- logger_->log_error("Flowfile %s has invalid namespace index (%s), routing to failure!",
+ logger_->log_error("Flowfile {} has invalid namespace index ({}), routing to failure!",
flowFile->getUUIDStr(), namespaceidx);
session->transfer(flowFile, Failure);
return;
@@ -165,7 +163,7 @@ namespace org::apache::nifi::minifi::processors {
targetnode.identifier.numeric = std::stoi(targetid); // NOLINT(cppcoreguidelines-pro-type-union-access)
targetNodeValid = true;
} catch (...) {
- logger_->log_error("Flowfile %s: target node ID is not a valid integer: %s. Routing to failure!",
+ logger_->log_error("Flowfile {}: target node ID is not a valid integer: {}. Routing to failure!",
flowFile->getUUIDStr(), targetid);
session->transfer(flowFile, Failure);
return;
@@ -175,7 +173,7 @@ namespace org::apache::nifi::minifi::processors {
targetnode.identifier.string = UA_STRING_ALLOC(targetid.c_str()); // NOLINT(cppcoreguidelines-pro-type-union-access)
targetNodeValid = true;
} else {
- logger_->log_error("Flowfile %s: target node ID type is invalid: %s. Routing to failure!",
+ logger_->log_error("Flowfile {}: target node ID type is invalid: {}. Routing to failure!",
flowFile->getUUIDStr(), targetidtype);
session->transfer(flowFile, Failure);
return;
@@ -236,14 +234,14 @@ namespace org::apache::nifi::minifi::processors {
throw opc::OPCException(GENERAL_EXCEPTION, "This should never happen!");
}
if (sc != UA_STATUSCODE_GOOD) {
- logger_->log_error("Failed to update node: %s", UA_StatusCode_name(sc));
+ logger_->log_error("Failed to update node: {}", UA_StatusCode_name(sc));
session->transfer(flowFile, Failure);
return;
}
} catch (...) {
std::string typestr;
context->getProperty(ValueType, typestr);
- logger_->log_error("Failed to convert %s to data type %s", contentstr, typestr);
+ logger_->log_error("Failed to convert {} to data type {}", contentstr, typestr);
session->transfer(flowFile, Failure);
return;
}
@@ -254,7 +252,7 @@ namespace org::apache::nifi::minifi::processors {
logger_->log_trace("Node doesn't exist, trying to create new node");
std::string browsename;
if (!context->getProperty(TargetNodeBrowseName, browsename, flowFile)) {
- logger_->log_error("Target node browse name is required for flowfile (%s) as new node is to be created",
+ logger_->log_error("Target node browse name is required for flowfile ({}) as new node is to be created",
flowFile->getUUIDStr());
session->transfer(flowFile, Failure);
return;
@@ -313,14 +311,14 @@ namespace org::apache::nifi::minifi::processors {
throw opc::OPCException(GENERAL_EXCEPTION, "This should never happen!");
}
if (sc != UA_STATUSCODE_GOOD) {
- logger_->log_error("Failed to create node: %s", UA_StatusCode_name(sc));
+ logger_->log_error("Failed to create node: {}", UA_StatusCode_name(sc));
session->transfer(flowFile, Failure);
return;
}
} catch (...) {
std::string typestr;
context->getProperty(ValueType, typestr);
- logger_->log_error("Failed to convert %s to data type %s", contentstr, typestr);
+ logger_->log_error("Failed to convert {} to data type {}", contentstr, typestr);
session->transfer(flowFile, Failure);
return;
}
diff --git a/extensions/opencv/CaptureRTSPFrame.cpp b/extensions/opencv/CaptureRTSPFrame.cpp
index ad0b30ef0..dd4cfec2b 100644
--- a/extensions/opencv/CaptureRTSPFrame.cpp
+++ b/extensions/opencv/CaptureRTSPFrame.cpp
@@ -84,7 +84,7 @@ void CaptureRTSPFrame::onTrigger(const std::shared_ptr<core::ProcessContext> &co
video_capture_.open(rtsp_url_);
video_backend_driver_ = video_capture_.getBackendName();
} catch (const cv::Exception &e) {
- logger_->log_error("Unable to open RTSP stream: %s", e.what());
+ logger_->log_error("Unable to open RTSP stream: {}", e.what());
context->yield();
return;
} catch (...) {
diff --git a/extensions/opencv/MotionDetector.cpp b/extensions/opencv/MotionDetector.cpp
index 299630d49..3977202d5 100644
--- a/extensions/opencv/MotionDetector.cpp
+++ b/extensions/opencv/MotionDetector.cpp
@@ -73,7 +73,7 @@ bool MotionDetector::detectAndDraw(cv::Mat &frame) {
cv::GaussianBlur(gray, gray, cv::Size(21, 21), 0, 0);
// Get difference between current frame and background
- logger_->log_trace("Get difference [%d x %d] [%d x %d]", bg_img_.rows, bg_img_.cols, gray.rows, gray.cols);
+ logger_->log_trace("Get difference [{} x {}] [{} x {}]", bg_img_.rows, bg_img_.cols, gray.rows, gray.cols);
cv::absdiff(gray, bg_img_, img_diff);
logger_->log_trace("Apply threshold");
cv::threshold(img_diff, thresh, threshold_, 255, cv::THRESH_BINARY);
diff --git a/extensions/openwsman/processors/SourceInitiatedSubscriptionListener.cpp b/extensions/openwsman/processors/SourceInitiatedSubscriptionListener.cpp
index 1483cde67..4327509a5 100644
--- a/extensions/openwsman/processors/SourceInitiatedSubscriptionListener.cpp
+++ b/extensions/openwsman/processors/SourceInitiatedSubscriptionListener.cpp
@@ -129,12 +129,14 @@ bool SourceInitiatedSubscriptionListener::persistState() const {
size_t i = 0U;
for (const auto& subscriber : subscribers_) {
char* xml_buf = nullptr;
+ auto clean_up_xml_buf = gsl::finally([&]{
+ ws_xml_free_memory(xml_buf);
+ });
int xml_buf_size = 0;
ws_xml_dump_memory_enc(subscriber.second.bookmark_, &xml_buf, &xml_buf_size, "UTF-8");
state_map.emplace("subscriber." + std::to_string(i) + ".machineid", subscriber.first);
state_map.emplace("subscriber." + std::to_string(i) + ".bookmark", std::string(xml_buf, xml_buf_size));
i++;
- ws_xml_free_memory(xml_buf);
}
return state_manager_->set(state_map);
}
@@ -157,13 +159,13 @@ bool SourceInitiatedSubscriptionListener::loadState() {
try {
bookmark = state_map.at("subscriber." + std::to_string(i) + ".bookmark");
} catch (...) {
- logger_->log_error("Bookmark for subscriber \"%s\" is missing, skipping", machineId);
+ logger_->log_error("Bookmark for subscriber \"{}\" is missing, skipping", machineId);
continue;
}
WsXmlDocH doc = ws_xml_read_memory(bookmark.data(), bookmark.size(), "UTF-8", 0);
if (doc == nullptr) {
- logger_->log_error("Failed to parse saved bookmark for subscriber \"%s\", skipping", machineId);
+ logger_->log_error("Failed to parse saved bookmark for subscriber \"{}\", skipping", machineId);
continue;
}
subscribers_[machineId].setBookmark(doc);
@@ -190,10 +192,10 @@ bool SourceInitiatedSubscriptionListener::Handler::handlePost(CivetServer* /*ser
processor_.logger_->log_error("Failed to get called endpoint (local_uri)");
return false;
}
- processor_.logger_->log_trace("Endpoint \"%s\" has been called", endpoint);
+ processor_.logger_->log_trace("Endpoint \"{}\" has been called", endpoint);
for (int i = 0; i < req_info->num_headers; i++) {
- processor_.logger_->log_trace("Received header \"%s: %s\"", req_info->http_headers[i].name, req_info->http_headers[i].value);
+ processor_.logger_->log_trace("Received header \"{}: {}\"", req_info->http_headers[i].name, req_info->http_headers[i].value);
}
const char* content_type = mg_get_header(conn, "Content-Type");
@@ -216,7 +218,7 @@ bool SourceInitiatedSubscriptionListener::Handler::handlePost(CivetServer* /*ser
charset = std::string(charset_begin, charset_end - charset_begin);
}
}
- processor_.logger_->log_trace("charset is \"%s\"", charset.c_str());
+ processor_.logger_->log_trace("charset is \"{}\"", charset.c_str());
std::vector<uint8_t> raw_data;
{
@@ -244,11 +246,13 @@ bool SourceInitiatedSubscriptionListener::Handler::handlePost(CivetServer* /*ser
{
WsXmlNodeH node = ws_xml_get_doc_root(doc);
char* xml_buf = nullptr;
+ auto clean_up_xml_buf = gsl::finally([&]{
+ ws_xml_free_memory(xml_buf);
+ });
int xml_buf_size = 0;
ws_xml_dump_memory_node_tree_enc(node, &xml_buf, &xml_buf_size, "UTF-8");
if (xml_buf != nullptr) {
- core::logging::LOG_TRACE(processor_.logger_) << "Received request: \"" << std::string(xml_buf, xml_buf_size) << "\"";
- ws_xml_free_memory(xml_buf);
+ processor_.logger_->log_trace("Received request: \"{}\"", std::string_view(xml_buf, xml_buf_size));
}
}
@@ -306,8 +310,7 @@ bool SourceInitiatedSubscriptionListener::Handler::isAckRequested(WsXmlDocH doc)
}
void SourceInitiatedSubscriptionListener::Handler::sendResponse(struct mg_connection* conn, const std::string& machineId, const std::string& remoteIp, char* xml_buf, size_t xml_buf_size) {
- core::logging::LOG_TRACE(processor_.logger_) << "Sending response to " << machineId << " (" << remoteIp << "): \"" << std::string(xml_buf, xml_buf_size) << "\"";
-
+ processor_.logger_->log_trace("Sending response to {} ({}) \"{}\"", machineId, remoteIp, std::string_view(xml_buf, xml_buf_size));
mg_printf(conn, "HTTP/1.1 200 OK\r\n");
mg_printf(conn, "Content-Type: application/soap+xml;charset=UTF-8\r\n");
mg_printf(conn, "Authorization: %s\r\n", WSMAN_SECURITY_PROFILE_HTTPS_MUTUAL);
@@ -326,7 +329,7 @@ bool SourceInitiatedSubscriptionListener::Handler::handleSubscriptionManager(str
const struct mg_request_info* req_info = mg_get_request_info(conn);
std::string remote_ip = req_info->remote_addr;
if (action != ENUM_ACTION_ENUMERATE) {
- processor_.logger_->log_error("%s called by %s (%s) with unknown Action \"%s\"", endpoint.c_str(), machine_id.c_str(), remote_ip.c_str(), action.c_str());
+ processor_.logger_->log_error("{} called by {} ({}) with unknown Action \"{}\"", endpoint.c_str(), machine_id.c_str(), remote_ip.c_str(), action.c_str());
return false; // TODO(bakaid): generate fault if possible
}
@@ -515,13 +518,13 @@ bool SourceInitiatedSubscriptionListener::Handler::handleSubscriptionManager(str
// Send response
char* xml_buf = nullptr;
+ auto clean_up_xml_buf = gsl::finally([&]{
+ ws_xml_free_memory(xml_buf);
+ });
int xml_buf_size = 0;
ws_xml_dump_memory_enc(response, &xml_buf, &xml_buf_size, "UTF-8");
-
sendResponse(conn, machine_id, req_info->remote_addr, xml_buf, xml_buf_size);
- ws_xml_free_memory(xml_buf);
-
return true;
}
@@ -558,7 +561,7 @@ int SourceInitiatedSubscriptionListener::Handler::enumerateEventCallback(WsXmlNo
session->transfer(flow_file, SourceInitiatedSubscriptionListener::Success);
} catch (const std::exception& e) {
- logger->log_error("Caught exception while processing Events: %s", e.what());
+ logger->log_error("Caught exception while processing Events: {}", e.what());
return 1;
} catch (...) {
logger->log_error("Caught exception while processing Events");
@@ -584,19 +587,19 @@ bool SourceInitiatedSubscriptionListener::Handler::handleSubscriptions(struct mg
}
// TODO(bakaid): make sure whether we really have to clean the bookmark as well (based on the fault)
} else if (action == WSMAN_CUSTOM_ACTION_HEARTBEAT) {
- processor_.logger_->log_debug("Received Heartbeat on %s from %s (%s)", endpoint.c_str(), machine_id.c_str(), remote_ip.c_str());
+ processor_.logger_->log_debug("Received Heartbeat on {} from {} ({})", endpoint.c_str(), machine_id.c_str(), remote_ip.c_str());
} else if (action == WSMAN_CUSTOM_ACTION_EVENTS) {
- processor_.logger_->log_debug("Received Events on %s from %s (%s)", endpoint.c_str(), machine_id.c_str(), remote_ip.c_str());
+ processor_.logger_->log_debug("Received Events on {} from {} ({})", endpoint.c_str(), machine_id.c_str(), remote_ip.c_str());
// Body
WsXmlNodeH body = ws_xml_get_soap_body(request);
if (body == nullptr) {
- processor_.logger_->log_error("Received malformed Events request on %s from %s (%s), SOAP Body missing", endpoint.c_str(), machine_id.c_str(), remote_ip.c_str());
+ processor_.logger_->log_error("Received malformed Events request on {} from {} ({}), SOAP Body missing", endpoint.c_str(), machine_id.c_str(), remote_ip.c_str());
return false;
}
// Body/Events
WsXmlNodeH events_node = ws_xml_get_child(body, 0 /*index*/, XML_NS_WS_MAN, WSM_EVENTS);
if (events_node == nullptr) {
- processor_.logger_->log_error("Received malformed Events request on %s from %s (%s), Events missing", endpoint.c_str(), machine_id.c_str(), remote_ip.c_str());
+ processor_.logger_->log_error("Received malformed Events request on {} from {} ({}), Events missing", endpoint.c_str(), machine_id.c_str(), remote_ip.c_str());
return false;
}
// Enumare Body/Events/Event nodes
@@ -605,7 +608,7 @@ bool SourceInitiatedSubscriptionListener::Handler::handleSubscriptions(struct mg
std::forward_as_tuple(session, processor_.logger_, machine_id, remote_ip);
int ret = ws_xml_enum_children(events_node, &SourceInitiatedSubscriptionListener::Handler::enumerateEventCallback, &callback_args, 0 /*bRecursive*/);
if (ret != 0) {
- processor_.logger_->log_error("Failed to parse events on %s from %s (%s), rolling back session", endpoint.c_str(), machine_id.c_str(), remote_ip.c_str());
+ processor_.logger_->log_error("Failed to parse events on {} from {} ({}), rolling back session", endpoint.c_str(), machine_id.c_str(), remote_ip.c_str());
session->rollback();
}
// Header
@@ -630,13 +633,15 @@ bool SourceInitiatedSubscriptionListener::Handler::handleSubscriptions(struct mg
processor_.persistState();
char* xml_buf = nullptr;
+ auto clean_up_xml_buf = gsl::finally([&]{
+ ws_xml_free_memory(xml_buf);
+ });
int xml_buf_size = 0;
ws_xml_dump_memory_enc(bookmark_doc, &xml_buf, &xml_buf_size, "UTF-8");
- processor_.logger_->log_debug("Saved new bookmark for %s: \"%.*s\"", machine_id.c_str(), xml_buf_size, xml_buf);
- ws_xml_free_memory(xml_buf);
+ processor_.logger_->log_debug("Saved new bookmark for {}: \"{:.{}}\"", machine_id.c_str(), xml_buf, xml_buf_size);
}
} else {
- processor_.logger_->log_error("%s called by %s (%s) with unknown Action \"%s\"", endpoint.c_str(), machine_id.c_str(), remote_ip.c_str(), action.c_str());
+ processor_.logger_->log_error("{} called by {} ({}) with unknown Action \"{}\"", endpoint.c_str(), machine_id.c_str(), remote_ip.c_str(), action.c_str());
return false; // TODO(bakaid): generate fault if possible
}
@@ -652,12 +657,14 @@ bool SourceInitiatedSubscriptionListener::Handler::handleSubscriptions(struct mg
// Send ACK
char* xml_buf = nullptr;
+ auto clean_up_xml_buf = gsl::finally([&]{
+ ws_xml_free_memory(xml_buf);
+ });
int xml_buf_size = 0;
ws_xml_dump_memory_enc(ack, &xml_buf, &xml_buf_size, "UTF-8");
sendResponse(conn, machine_id, remote_ip, xml_buf, xml_buf_size);
- ws_xml_free_memory(xml_buf);
ws_xml_destroy_doc(ack);
}
@@ -756,7 +763,7 @@ void SourceInitiatedSubscriptionListener::onSchedule(const std::shared_ptr<core:
throw Exception(PROCESSOR_EXCEPTION, "Failed to get fingerprint for CA specified by SSL Certificate Authority attribute");
}
ssl_ca_cert_thumbprint_ = utils::StringUtils::to_hex(hash_buf, true /*uppercase*/);
- logger_->log_debug("%s SHA-1 thumbprint is %s", ssl_ca_file.c_str(), ssl_ca_cert_thumbprint_.c_str());
+ logger_->log_debug("{} SHA-1 thumbprint is {}", ssl_ca_file.c_str(), ssl_ca_cert_thumbprint_.c_str());
session_factory_ = sessionFactory;
diff --git a/extensions/pcap/CapturePacket.cpp b/extensions/pcap/CapturePacket.cpp
index d79beeb4a..8f9c02f75 100644
--- a/extensions/pcap/CapturePacket.cpp
+++ b/extensions/pcap/CapturePacket.cpp
@@ -148,34 +148,34 @@ void CapturePacket::onSchedule(const std::shared_ptr<core::ProcessContext> &cont
}
}
if (!found_match) {
- logger_->log_debug("Skipping %s because it does not match any regex", name);
+ logger_->log_debug("Skipping {} because it does not match any regex", name);
continue;
} else {
- logger_->log_trace("Accepting %s because it matches %s", name, matching_regex);
+ logger_->log_trace("Accepting {} because it matches {}", name, matching_regex);
}
}
if (!iter->open()) {
- logger_->log_error("Could not open device %s", name);
+ logger_->log_error("Could not open device {}", name);
continue;
}
if (!capture_bluetooth_) {
if (name.find("bluetooth") != std::string::npos) {
- logger_->log_error("Skipping %s because blue tooth capture is not enabled", name);
+ logger_->log_error("Skipping {} because blue tooth capture is not enabled", name);
continue;
}
}
if (name.find("dbus") != std::string::npos) {
- logger_->log_error("Skipping %s because dbus capture is disabled", name);
+ logger_->log_error("Skipping {} because dbus capture is disabled", name);
continue;
}
if (iter->startCapture(packet_callback, mover.get())) {
- logger_->log_debug("Starting capture on %s", iter->getName());
+ logger_->log_debug("Starting capture on {}", iter->getName());
CapturePacketMechanism *aa = create_new_capture(getPath(), &pcap_batch_size_);
- logger_->log_trace("Creating packet capture in %s", aa->getFile());
+ logger_->log_trace("Creating packet capture in {}", aa->getFile());
mover->source.enqueue(aa);
device_list_.push_back(iter);
}
@@ -194,7 +194,7 @@ void CapturePacket::onTrigger(const std::shared_ptr<core::ProcessContext> &conte
if (mover->sink.try_dequeue(capture)) {
auto ff = session->create();
session->import(capture->getFile(), ff, false, 0);
- logger_->log_debug("Received packet capture in file %s %d for %s", capture->getFile(), capture->getSize(), ff->getResourceClaim()->getContentFullPath());
+ logger_->log_debug("Received packet capture in file {} {} for {}", capture->getFile(), capture->getSize(), ff->getResourceClaim()->getContentFullPath());
session->transfer(ff, Success);
delete capture;
} else {
diff --git a/extensions/pdh/PerformanceDataMonitor.cpp b/extensions/pdh/PerformanceDataMonitor.cpp
index 1df46639f..9336d76bf 100644
--- a/extensions/pdh/PerformanceDataMonitor.cpp
+++ b/extensions/pdh/PerformanceDataMonitor.cpp
@@ -47,7 +47,7 @@ void PerformanceDataMonitor::onSchedule(const std::shared_ptr<core::ProcessConte
if (pdh_counter != nullptr) {
PDH_STATUS add_to_query_result = pdh_counter->addToQuery(pdh_query_);
if (add_to_query_result != ERROR_SUCCESS) {
- logger_->log_error("Error adding %s to query, error code: 0x%x", pdh_counter->getName(), add_to_query_result);
+ logger_->log_error("Error adding {} to query, error code: {:#x}", pdh_counter->getName(), add_to_query_result);
it = resource_consumption_counters_.erase(it);
continue;
}
@@ -57,7 +57,7 @@ void PerformanceDataMonitor::onSchedule(const std::shared_ptr<core::ProcessConte
PDH_STATUS collect_query_data_result = PdhCollectQueryData(pdh_query_);
if (ERROR_SUCCESS != collect_query_data_result) {
- logger_->log_error("Error during PdhCollectQueryData, error code: 0x%x", collect_query_data_result);
+ logger_->log_error("Error during PdhCollectQueryData, error code: {:#x}", collect_query_data_result);
}
}
@@ -77,7 +77,7 @@ void PerformanceDataMonitor::onTrigger(core::ProcessContext* context, core::Proc
PDH_STATUS collect_query_data_result = PdhCollectQueryData(pdh_query_);
if (ERROR_SUCCESS != collect_query_data_result) {
- logger_->log_error("Error during PdhCollectQueryData, error code: 0x%x", collect_query_data_result);
+ logger_->log_error("Error during PdhCollectQueryData, error code: {:#x}", collect_query_data_result);
yield();
return;
}
@@ -227,7 +227,7 @@ void PerformanceDataMonitor::addCountersFromPredefinedGroupsProperty(const std::
} else if (group == "Process") {
add_process_related_counters(resource_consumption_counters_);
} else {
- logger_->log_error((group + " is not a valid predefined group for PerformanceDataMonitor").c_str());
+ logger_->log_error("{} is not a valid predefined group for PerformanceDataMonitor", group);
}
}
}
@@ -244,7 +244,7 @@ void PerformanceDataMonitor::addCustomPDHCountersFromProperty(const std::string&
void PerformanceDataMonitor::setupCountersFromProperties(const std::shared_ptr<core::ProcessContext>& context) {
std::string custom_pdh_counters;
if (context->getProperty(CustomPDHCounters, custom_pdh_counters)) {
- logger_->log_trace("Custom PDH counters configured to be %s", custom_pdh_counters);
+ logger_->log_trace("Custom PDH counters configured to be {}", custom_pdh_counters);
addCustomPDHCountersFromProperty(custom_pdh_counters);
}
}
@@ -252,7 +252,7 @@ void PerformanceDataMonitor::setupCountersFromProperties(const std::shared_ptr<c
void PerformanceDataMonitor::setupPredefinedGroupsFromProperties(const std::shared_ptr<core::ProcessContext>& context) {
std::string predefined_groups;
if (context->getProperty(PredefinedGroups, predefined_groups)) {
- logger_->log_trace("Predefined group configured to be %s", predefined_groups);
+ logger_->log_trace("Predefined group configured to be {}", predefined_groups);
addCountersFromPredefinedGroupsProperty(predefined_groups);
}
}
@@ -280,7 +280,7 @@ void PerformanceDataMonitor::setupOutputFormatFromProperties(const std::shared_p
}
}
- logger_->log_trace("OutputFormat is configured to be %s %s", pretty_output_ ? "pretty" : "compact", output_format_ == OutputFormat::JSON ? "JSON" : "OpenTelemetry");
+ logger_->log_trace("OutputFormat is configured to be {} {}", pretty_output_ ? "pretty" : "compact", output_format_ == OutputFormat::JSON ? "JSON" : "OpenTelemetry");
}
void PerformanceDataMonitor::setupDecimalPlacesFromProperties(const std::shared_ptr<core::ProcessContext>& context) {
@@ -297,7 +297,7 @@ void PerformanceDataMonitor::setupDecimalPlacesFromProperties(const std::shared_
decimal_places_ = static_cast<uint8_t>(decimal_places);
}
if (decimal_places_.has_value())
- logger_->log_trace("Rounding is enabled with %d decimal places", decimal_places_.value());
+ logger_->log_trace("Rounding is enabled with {} decimal places", decimal_places_.value());
}
void PerformanceDataMonitor::setupMembersFromProperties(const std::shared_ptr<core::ProcessContext>& context) {
diff --git a/extensions/procfs/ProcFs.cpp b/extensions/procfs/ProcFs.cpp
index 8adc86757..623f9e4d5 100644
--- a/extensions/procfs/ProcFs.cpp
+++ b/extensions/procfs/ProcFs.cpp
@@ -35,7 +35,7 @@ std::map<pid_t, ProcessStat> ProcFs::getProcessStats() const {
if (auto process_stat_data = ProcessStatData::parseProcessStatFile(stat_file)) {
process_stats.emplace(process_stat_data->getPid(), ProcessStat(*process_stat_data, page_size_));
} else {
- logger_->log_error("Failed to parse %s", entry.path());
+ logger_->log_error("Failed to parse {}", entry.path());
}
}
}
@@ -56,7 +56,7 @@ std::vector<std::pair<std::string, CpuStatData>> ProcFs::getCpuStats() const {
if (auto cpu_stat_data = CpuStatData::parseCpuStatLine(iss)) {
cpu_stats.emplace_back(entry_name, *cpu_stat_data);
} else {
- logger_->log_error("Failed to parse %s from %s", entry_name, stat_file_path);
+ logger_->log_error("Failed to parse {} from {}", entry_name, stat_file_path);
}
}
}
@@ -78,7 +78,7 @@ std::vector<std::pair<std::string, NetDevData>> ProcFs::getNetDevs() const {
if (auto net_dev = NetDevData::parseNetDevLine(iss)) {
net_devs.emplace_back(net_dev->first, net_dev->second);
} else {
- logger_->log_error("Failed to parse line %d from %s", line_num, stat_file_path);
+ logger_->log_error("Failed to parse line {} from {}", line_num, stat_file_path);
}
}
return net_devs;
@@ -97,7 +97,7 @@ std::vector<std::pair<std::string, DiskStatData>> ProcFs::getDiskStats() const {
if (auto disk_stat = DiskStatData::parseDiskStatLine(iss)) {
disk_stats.emplace_back(disk_stat->first, disk_stat->second);
} else {
- logger_->log_error("Failed to parse line %d from %s", line_num, disk_stats_file_path);
+ logger_->log_error("Failed to parse line {} from {}", line_num, disk_stats_file_path);
}
}
return disk_stats;
diff --git a/extensions/procfs/processors/ProcFsMonitor.cpp b/extensions/procfs/processors/ProcFsMonitor.cpp
index 3b34d7d1a..1eabaa9eb 100644
--- a/extensions/procfs/processors/ProcFsMonitor.cpp
+++ b/extensions/procfs/processors/ProcFsMonitor.cpp
@@ -134,9 +134,9 @@ void ProcFsMonitor::setupDecimalPlacesFromProperties(const core::ProcessContext&
throw Exception(PROCESS_SCHEDULE_EXCEPTION, "ProcFsMonitor Decimal Places property is zero or too large");
}
decimal_places_ = gsl::narrow<uint8_t>(decimal_places);
- logger_->log_trace("Rounding is enabled with %d decimal places", decimal_places_.value());
+ logger_->log_trace("Rounding is enabled with {} decimal places", decimal_places_.value());
} catch (const std::exception&) {
- logger_->log_error("ProcFsMonitor Decimal Places property is invalid or out of range: %s", decimal_places_str);
+ logger_->log_error("ProcFsMonitor Decimal Places property is invalid or out of range: {}", decimal_places_str);
throw Exception(PROCESS_SCHEDULE_EXCEPTION, "ProcFsMonitor Decimal Places property is invalid or out of range");
}
}
diff --git a/extensions/prometheus/PrometheusExposerWrapper.cpp b/extensions/prometheus/PrometheusExposerWrapper.cpp
index 4d05e8eef..4c59e78c7 100644
--- a/extensions/prometheus/PrometheusExposerWrapper.cpp
+++ b/extensions/prometheus/PrometheusExposerWrapper.cpp
@@ -22,7 +22,7 @@ namespace org::apache::nifi::minifi::extensions::prometheus {
PrometheusExposerWrapper::PrometheusExposerWrapper(const PrometheusExposerConfig& config)
: exposer_(parseExposerConfig(config)) {
- logger_->log_info("Started Prometheus metrics publisher on port %" PRIu32 "%s", config.port, config.certificate ? " with TLS enabled" : "");
+ logger_->log_info("Started Prometheus metrics publisher on port {} {}", config.port, config.certificate ? " with TLS enabled" : "");
}
std::vector<std::string> PrometheusExposerWrapper::parseExposerConfig(const PrometheusExposerConfig& config) {
diff --git a/extensions/prometheus/PrometheusMetricsPublisher.cpp b/extensions/prometheus/PrometheusMetricsPublisher.cpp
index d9052afb1..c2bbf0b80 100644
--- a/extensions/prometheus/PrometheusMetricsPublisher.cpp
+++ b/extensions/prometheus/PrometheusMetricsPublisher.cpp
@@ -75,7 +75,7 @@ void PrometheusMetricsPublisher::loadMetricNodes() {
auto nodes = getMetricNodes();
for (const auto& metric_node : nodes) {
- logger_->log_debug("Registering metric node '%s'", metric_node->getName());
+ logger_->log_debug("Registering metric node '{}'", metric_node->getName());
gauge_collections_.push_back(std::make_shared<PublishedMetricGaugeCollection>(metric_node, agent_identifier_));
exposer_->registerMetric(gauge_collections_.back());
}
@@ -93,7 +93,7 @@ std::vector<state::response::SharedResponseNode> PrometheusMetricsPublisher::get
for (const std::string& clazz : metric_classes) {
auto response_nodes = response_node_loader_->loadResponseNodes(clazz);
if (response_nodes.empty()) {
- logger_->log_warn("Metric class '%s' could not be loaded.", clazz);
+ logger_->log_warn("Metric class '{}' could not be loaded.", clazz);
continue;
}
nodes.insert(nodes.end(), response_nodes.begin(), response_nodes.end());
diff --git a/extensions/python/PythonCreator.h b/extensions/python/PythonCreator.h
index 5a60f9704..f85977f11 100644
--- a/extensions/python/PythonCreator.h
+++ b/extensions/python/PythonCreator.h
@@ -76,7 +76,7 @@ class PythonCreator : public minifi::core::CoreComponent {
try {
registerScriptDescription(class_name, full_name, path, script_name.string());
} catch (const std::exception &err) {
- logger_->log_error("Cannot load %s: %s", script_name.string(), err.what());
+ logger_->log_error("Cannot load {}: {}", script_name, err.what());
}
}
}
@@ -85,7 +85,7 @@ class PythonCreator : public minifi::core::CoreComponent {
void registerScriptDescription(const std::string& class_name, const std::string& full_name, const std::filesystem::path& path, const std::string& script_name) {
auto processor = core::ClassLoader::getDefaultClassLoader().instantiate<python::processors::ExecutePythonProcessor>(class_name, utils::IdGenerator::getIdGenerator()->generate());
if (!processor) {
- logger_->log_error("Couldn't instantiate '%s' python processor", class_name);
+ logger_->log_error("Couldn't instantiate '{}' python processor", class_name);
return;
}
processor->initialize();
diff --git a/extensions/python/tests/CMakeLists.txt b/extensions/python/tests/CMakeLists.txt
index 3bf6f7edc..89b0418fb 100644
--- a/extensions/python/tests/CMakeLists.txt
+++ b/extensions/python/tests/CMakeLists.txt
@@ -46,9 +46,7 @@ FOREACH(testfile ${EXECUTEPYTHONPROCESSOR_UNIT_TESTS})
target_include_directories(${testfilename} PRIVATE BEFORE "${CMAKE_SOURCE_DIR}/extensions/standard-processors")
target_include_directories(${testfilename} PRIVATE BEFORE "${CMAKE_SOURCE_DIR}/libminifi/test/")
- target_link_libraries(${testfilename} minifi-python-script-extension)
- target_link_libraries(${testfilename} minifi-standard-processors)
- target_link_libraries(${testfilename} Catch2WithMain)
+ target_link_libraries(${testfilename} minifi-python-script-extension minifi-script-extension minifi-standard-processors Catch2WithMain Python::Python)
createTests("${testfilename}")
MATH(EXPR EXTENSIONS_TEST_COUNT "${EXTENSIONS_TEST_COUNT}+1")
diff --git a/extensions/python/types/PyLogger.cpp b/extensions/python/types/PyLogger.cpp
index 873e17d53..b8134841b 100644
--- a/extensions/python/types/PyLogger.cpp
+++ b/extensions/python/types/PyLogger.cpp
@@ -70,7 +70,7 @@ PyObject* PyLogger::error(PyLogger* self, PyObject* args) {
if (!PyArg_ParseTuple(args, "s", &message)) {
throw PyException();
}
- logger->log_error(message);
+ logger->log_error("{}", message);
Py_RETURN_NONE;
}
@@ -85,7 +85,7 @@ PyObject* PyLogger::warn(PyLogger* self, PyObject* args) {
if (!PyArg_ParseTuple(args, "s", &message)) {
throw PyException();
}
- logger->log_warn(message);
+ logger->log_warn("{}", message);
Py_RETURN_NONE;
}
@@ -100,7 +100,7 @@ PyObject* PyLogger::info(PyLogger* self, PyObject* args) {
if (!PyArg_ParseTuple(args, "s", &message)) {
throw PyException();
}
- logger->log_info(message);
+ logger->log_info("{}", message);
Py_RETURN_NONE;
}
@@ -115,7 +115,7 @@ PyObject* PyLogger::debug(PyLogger* self, PyObject* args) {
if (!PyArg_ParseTuple(args, "s", &message)) {
throw PyException();
}
- logger->log_debug(message);
+ logger->log_debug("{}", message);
Py_RETURN_NONE;
}
@@ -130,7 +130,7 @@ PyObject* PyLogger::trace(PyLogger* self, PyObject* args) {
if (!PyArg_ParseTuple(args, "s", &message)) {
throw PyException();
}
- logger->log_trace(message);
+ logger->log_trace("{}", message);
Py_RETURN_NONE;
}
diff --git a/extensions/python/types/PyStateManager.cpp b/extensions/python/types/PyStateManager.cpp
index fce6eb2e0..7a30abbf1 100644
--- a/extensions/python/types/PyStateManager.cpp
+++ b/extensions/python/types/PyStateManager.cpp
@@ -50,10 +50,10 @@ int PyStateManager::init(PyStateManager* self, PyObject* args, PyObject*) {
return -1;
}
- auto process_context = PyCapsule_GetPointer(weak_ptr_capsule, HeldTypeName);
- if (!process_context)
+ auto state_manager = PyCapsule_GetPointer(weak_ptr_capsule, HeldTypeName);
+ if (!state_manager)
throw PyException();
- self->state_manager_ = *static_cast<HeldType*>(process_context);
+ self->state_manager_ = *static_cast<HeldType*>(state_manager);
return 0;
}
diff --git a/extensions/rocksdb-repos/DatabaseContentRepository.cpp b/extensions/rocksdb-repos/DatabaseContentRepository.cpp
index e013ae09d..78ee942b5 100644
--- a/extensions/rocksdb-repos/DatabaseContentRepository.cpp
+++ b/extensions/rocksdb-repos/DatabaseContentRepository.cpp
@@ -47,11 +47,11 @@ bool DatabaseContentRepository::initialize(const std::shared_ptr<minifi::Configu
} else if (auto purge_period_val = core::TimePeriodValue::fromString(purge_period_str)) {
purge_period_ = purge_period_val->getMilliseconds();
} else {
- logger_->log_error("Malformed delete period value, expected time format: '%s'", purge_period_str);
+ logger_->log_error("Malformed delete period value, expected time format: '{}'", purge_period_str);
purge_period_ = std::chrono::seconds{1};
}
const auto encrypted_env = createEncryptingEnv(utils::crypto::EncryptionManager{configuration->getHome()}, DbEncryptionOptions{directory_, ENCRYPTION_KEY_NAME});
- logger_->log_info("Using %s DatabaseContentRepository", encrypted_env ? "encrypted" : "plaintext");
+ logger_->log_info("Using {} DatabaseContentRepository", encrypted_env ? "encrypted" : "plaintext");
setCompactionPeriod(configuration);
@@ -76,10 +76,10 @@ bool DatabaseContentRepository::initialize(const std::shared_ptr<minifi::Configu
};
db_ = minifi::internal::RocksDatabase::create(set_db_opts, set_cf_opts, directory_);
if (db_->open()) {
- logger_->log_debug("NiFi Content DB Repository database open %s success", directory_);
+ logger_->log_debug("NiFi Content DB Repository database open {} success", directory_);
is_valid_ = true;
} else {
- logger_->log_error("NiFi Content DB Repository database open %s fail", directory_);
+ logger_->log_error("NiFi Content DB Repository database open {} fail", directory_);
is_valid_ = false;
}
return is_valid_;
@@ -91,13 +91,13 @@ void DatabaseContentRepository::setCompactionPeriod(const std::shared_ptr<minifi
if (auto compaction_period = TimePeriodValue::fromString(compaction_period_str.value())) {
compaction_period_ = compaction_period->getMilliseconds();
if (compaction_period_.count() == 0) {
- logger_->log_warn("Setting '%s' to 0 disables forced compaction", Configure::nifi_dbcontent_repository_rocksdb_compaction_period);
+ logger_->log_warn("Setting '{}' to 0 disables forced compaction", Configure::nifi_dbcontent_repository_rocksdb_compaction_period);
}
} else {
- logger_->log_error("Malformed property '%s', expected time period, using default", Configure::nifi_dbcontent_repository_rocksdb_compaction_period);
+ logger_->log_error("Malformed property '{}', expected time period, using default", Configure::nifi_dbcontent_repository_rocksdb_compaction_period);
}
} else {
- logger_->log_debug("Using default compaction period of %" PRId64 " ms", int64_t{compaction_period_.count()});
+ logger_->log_debug("Using default compaction period of {}", compaction_period_);
}
}
@@ -105,7 +105,7 @@ void DatabaseContentRepository::runCompaction() {
do {
if (auto opendb = db_->open()) {
auto status = opendb->RunCompaction();
- logger_->log_trace("Compaction triggered: %s", status.ToString());
+ logger_->log_trace("Compaction triggered: {}", status.ToString());
} else {
logger_->log_error("Failed to open database for compaction");
}
@@ -205,10 +205,10 @@ bool DatabaseContentRepository::exists(const minifi::ResourceClaim &streamId) {
rocksdb::Status status;
status = opendb->Get(rocksdb::ReadOptions(), streamId.getContentFullPath(), &value);
if (status.ok()) {
- logger_->log_debug("%s exists", streamId.getContentFullPath());
+ logger_->log_debug("{} exists", streamId.getContentFullPath());
return true;
} else {
- logger_->log_debug("%s does not exist", streamId.getContentFullPath());
+ logger_->log_debug("{} does not exist", streamId.getContentFullPath());
return false;
}
}
@@ -223,13 +223,13 @@ bool DatabaseContentRepository::removeKeySync(const std::string &content_path) {
}
rocksdb::Status status = opendb->Delete(rocksdb::WriteOptions(), content_path);
if (status.ok()) {
- logger_->log_debug("Deleting resource %s", content_path);
+ logger_->log_debug("Deleting resource {}", content_path);
return true;
} else if (status.IsNotFound()) {
- logger_->log_debug("Resource %s was not found", content_path);
+ logger_->log_debug("Resource {} was not found", content_path);
return true;
} else {
- logger_->log_debug("Attempted, but could not delete %s", content_path);
+ logger_->log_debug("Attempted, but could not delete {}", content_path);
return false;
}
}
@@ -240,7 +240,7 @@ bool DatabaseContentRepository::removeKey(const std::string& content_path) {
}
// asynchronous deletion
std::lock_guard guard(keys_mtx_);
- logger_->log_debug("Staging resource for deletion %s", content_path);
+ logger_->log_debug("Staging resource for deletion {}", content_path);
keys_to_delete_.push_back(content_path);
return true;
}
@@ -267,11 +267,11 @@ void DatabaseContentRepository::runGc() {
status = opendb->Write(rocksdb::WriteOptions(), &batch);
if (status.ok()) {
for (auto& key : keys) {
- logger_->log_debug("Deleted resource async %s", key);
+ logger_->log_debug("Deleted resource async {}", key);
}
} else {
for (auto& key : keys) {
- logger_->log_debug("Failed to delete resource async %s", key);
+ logger_->log_debug("Failed to delete resource async {}", key);
}
// move keys we could not delete back to the list for a retry
std::lock_guard guard(keys_mtx_);
@@ -306,7 +306,7 @@ void DatabaseContentRepository::clearOrphans() {
std::lock_guard<std::mutex> lock(count_map_mutex_);
auto claim_it = count_map_.find(key);
if (claim_it == count_map_.end() || claim_it->second == 0) {
- logger_->log_error("Deleting orphan resource %s", key);
+ logger_->log_error("Deleting orphan resource {}", key);
keys_to_be_deleted.push_back(key);
}
}
@@ -318,7 +318,7 @@ void DatabaseContentRepository::clearOrphans() {
rocksdb::Status status = opendb->Write(rocksdb::WriteOptions(), &batch);
if (!status.ok()) {
- logger_->log_error("Could not delete orphan contents from rocksdb database: %s", status.ToString());
+ logger_->log_error("Could not delete orphan contents from rocksdb database: {}", status.ToString());
std::lock_guard<std::mutex> lock(purge_list_mutex_);
for (const auto& key : keys_to_be_deleted) {
purge_list_.push_back(key);
diff --git a/extensions/rocksdb-repos/FlowFileLoader.cpp b/extensions/rocksdb-repos/FlowFileLoader.cpp
index 133f7ecda..f2576a47f 100644
--- a/extensions/rocksdb-repos/FlowFileLoader.cpp
+++ b/extensions/rocksdb-repos/FlowFileLoader.cpp
@@ -89,7 +89,7 @@ utils::TaskRescheduleInfo FlowFileLoader::loadImpl(const std::vector<SwappedFlow
std::vector<rocksdb::Status> statuses = opendb->MultiGet(read_options, keys, &serialized_items);
for (size_t idx = 0; idx < statuses.size(); ++idx) {
if (!statuses[idx].ok()) {
- logger_->log_error("Failed to fetch flow file \"%s\"", serialized_keys[idx]);
+ logger_->log_error("Failed to fetch flow file \"{}\"", serialized_keys[idx]);
return utils::TaskRescheduleInfo::RetryIn(std::chrono::seconds{30});
}
utils::Identifier container_id;
@@ -97,18 +97,18 @@ utils::TaskRescheduleInfo FlowFileLoader::loadImpl(const std::vector<SwappedFlow
gsl::make_span(serialized_items[idx]).as_span<const std::byte>(), content_repo_, container_id);
if (!flow_file) {
// corrupted flow file
- logger_->log_error("Failed to deserialize flow file \"%s\"", serialized_keys[idx]);
+ logger_->log_error("Failed to deserialize flow file \"{}\"", serialized_keys[idx]);
} else {
flow_file->setStoredToRepository(true);
flow_file->setPenaltyExpiration(flow_files[idx].to_be_processed_after);
result.push_back(std::move(flow_file));
- logger_->log_debug("Deserialized flow file \"%s\"", serialized_keys[idx]);
+ logger_->log_debug("Deserialized flow file \"{}\"", serialized_keys[idx]);
}
}
output->set_value(result);
return utils::TaskRescheduleInfo::Done();
} catch (const std::exception& err) {
- logger_->log_error("Error while swapping flow files in: %s", err.what());
+ logger_->log_error("Error while swapping flow files in: {}", err.what());
return utils::TaskRescheduleInfo::RetryIn(std::chrono::seconds{60});
}
}
diff --git a/extensions/rocksdb-repos/FlowFileRepository.cpp b/extensions/rocksdb-repos/FlowFileRepository.cpp
index 7144dbc63..67f08cba5 100644
--- a/extensions/rocksdb-repos/FlowFileRepository.cpp
+++ b/extensions/rocksdb-repos/FlowFileRepository.cpp
@@ -56,7 +56,7 @@ void FlowFileRepository::flush() {
for (auto& ff : flow_files) {
batch.Delete(ff.key);
- logger_->log_debug("Issuing batch delete, including %s, Content path %s", ff.key, ff.content ? ff.content->getContentFullPath() : "null");
+ logger_->log_debug("Issuing batch delete, including {}, Content path {}", ff.key, ff.content ? ff.content->getContentFullPath() : "null");
}
auto operation = [&batch, &opendb]() { return opendb->Write(rocksdb::WriteOptions(), &batch); };
@@ -95,7 +95,7 @@ void FlowFileRepository::deserializeFlowFilesWithNoContentClaim(minifi::internal
for (size_t i = 0; i < keys.size(); ++i) {
if (!multistatus[i].ok()) {
- logger_->log_error("Failed to read key from rocksdb: %s! DB is most probably in an inconsistent state!", keys[i].data());
+ logger_->log_error("Failed to read key from rocksdb: {}! DB is most probably in an inconsistent state!", keys[i].data());
flow_files.erase(key_positions.at(i));
continue;
}
@@ -106,7 +106,7 @@ void FlowFileRepository::deserializeFlowFilesWithNoContentClaim(minifi::internal
gsl_Expects(flow_file->getUUIDStr() == key_positions.at(i)->key);
key_positions.at(i)->content = flow_file->getResourceClaim();
} else {
- logger_->log_error("Could not deserialize flow file %s", key_positions.at(i)->key);
+ logger_->log_error("Could not deserialize flow file {}", key_positions.at(i)->key);
}
}
}
@@ -145,13 +145,13 @@ void FlowFileRepository::initialize_repository() {
found = (search != connection_map_.end());
}
if (found) {
- logger_->log_debug("Found connection for %s, path %s ", container_id.to_string(), eventRead->getContentFullPath());
+ logger_->log_debug("Found connection for {}, path {} ", container_id.to_string(), eventRead->getContentFullPath());
eventRead->setStoredToRepository(true);
// we found the connection for the persistent flowFile
// even if a processor immediately marks it for deletion, flush only happens after prune_stored_flowfiles
search->second->restore(eventRead);
} else {
- logger_->log_warn("Could not find connection for %s, path %s ", container_id.to_string(), eventRead->getContentFullPath());
+ logger_->log_warn("Could not find connection for {}, path {} ", container_id.to_string(), eventRead->getContentFullPath());
keys_to_delete_.enqueue({.key = key, .content = eventRead->getResourceClaim()});
}
} else {
@@ -177,12 +177,12 @@ bool FlowFileRepository::initialize(const std::shared_ptr<Configure> &configure)
if (configure->get(Configure::nifi_flowfile_repository_directory_default, value) && !value.empty()) {
directory_ = value;
}
- logger_->log_debug("NiFi FlowFile Repository Directory %s", directory_);
+ logger_->log_debug("NiFi FlowFile Repository Directory {}", directory_);
setCompactionPeriod(configure);
const auto encrypted_env = createEncryptingEnv(utils::crypto::EncryptionManager{configure->getHome()}, DbEncryptionOptions{directory_, ENCRYPTION_KEY_NAME});
- logger_->log_info("Using %s FlowFileRepository", encrypted_env ? "encrypted" : "plaintext");
+ logger_->log_info("Using {} FlowFileRepository", encrypted_env ? "encrypted" : "plaintext");
auto db_options = [encrypted_env] (minifi::internal::Writable<rocksdb::DBOptions>& options) {
options.set(&rocksdb::DBOptions::create_if_missing, true);
@@ -212,10 +212,10 @@ bool FlowFileRepository::initialize(const std::shared_ptr<Configure> &configure)
};
db_ = minifi::internal::RocksDatabase::create(db_options, cf_options, directory_);
if (db_->open()) {
- logger_->log_debug("NiFi FlowFile Repository database open %s success", directory_);
+ logger_->log_debug("NiFi FlowFile Repository database open {} success", directory_);
return true;
} else {
- logger_->log_error("NiFi FlowFile Repository database open %s fail", directory_);
+ logger_->log_error("NiFi FlowFile Repository database open {} fail", directory_);
return false;
}
}
@@ -226,13 +226,13 @@ void FlowFileRepository::setCompactionPeriod(const std::shared_ptr<Configure> &c
if (auto compaction_period = TimePeriodValue::fromString(compaction_period_str.value())) {
compaction_period_ = compaction_period->getMilliseconds();
if (compaction_period_.count() == 0) {
- logger_->log_warn("Setting '%s' to 0 disables forced compaction", Configure::nifi_flowfile_repository_rocksdb_compaction_period);
+ logger_->log_warn("Setting '{}' to 0 disables forced compaction", Configure::nifi_flowfile_repository_rocksdb_compaction_period);
}
} else {
- logger_->log_error("Malformed property '%s', expected time period, using default", Configure::nifi_flowfile_repository_rocksdb_compaction_period);
+ logger_->log_error("Malformed property '{}', expected time period, using default", Configure::nifi_flowfile_repository_rocksdb_compaction_period);
}
} else {
- logger_->log_debug("Using default compaction period of %" PRId64 " ms", int64_t{compaction_period_.count()});
+ logger_->log_debug("Using default compaction period of {}", compaction_period_);
}
}
@@ -245,7 +245,7 @@ void FlowFileRepository::runCompaction() {
do {
if (auto opendb = db_->open()) {
auto status = opendb->RunCompaction();
- logger_->log_trace("Compaction triggered: %s", status.ToString());
+ logger_->log_trace("Compaction triggered: {}", status.ToString());
} else {
logger_->log_error("Failed to open database for compaction");
}
diff --git a/extensions/rocksdb-repos/ProvenanceRepository.cpp b/extensions/rocksdb-repos/ProvenanceRepository.cpp
index d46b3d048..42bf840fa 100644
--- a/extensions/rocksdb-repos/ProvenanceRepository.cpp
+++ b/extensions/rocksdb-repos/ProvenanceRepository.cpp
@@ -28,17 +28,16 @@ bool ProvenanceRepository::initialize(const std::shared_ptr<org::apache::nifi::m
if (config->get(Configure::nifi_provenance_repository_directory_default, value) && !value.empty()) {
directory_ = value;
}
- logger_->log_debug("MiNiFi Provenance Repository Directory %s", directory_);
+ logger_->log_debug("MiNiFi Provenance Repository Directory {}", directory_);
if (config->get(Configure::nifi_provenance_repository_max_storage_size, value)) {
core::Property::StringToInt(value, max_partition_bytes_);
}
- logger_->log_debug("MiNiFi Provenance Max Partition Bytes %d", max_partition_bytes_);
+ logger_->log_debug("MiNiFi Provenance Max Partition Bytes {}", max_partition_bytes_);
if (config->get(Configure::nifi_provenance_repository_max_storage_time, value)) {
if (auto max_partition = utils::timeutils::StringToDuration<std::chrono::milliseconds>(value))
max_partition_millis_ = *max_partition;
}
- logger_->log_debug("MiNiFi Provenance Max Storage Time: [%" PRId64 "] ms",
- int64_t{max_partition_millis_.count()});
+ logger_->log_debug("MiNiFi Provenance Max Storage Time: [{}]", max_partition_millis_);
auto db_options = [] (minifi::internal::Writable<rocksdb::DBOptions>& db_opts) {
db_opts.set(&rocksdb::DBOptions::create_if_missing, true);
@@ -63,9 +62,9 @@ bool ProvenanceRepository::initialize(const std::shared_ptr<org::apache::nifi::m
db_ = minifi::internal::RocksDatabase::create(db_options, cf_options, directory_);
if (db_->open()) {
- logger_->log_debug("MiNiFi Provenance Repository database open %s success", directory_);
+ logger_->log_debug("MiNiFi Provenance Repository database open {} success", directory_);
} else {
- logger_->log_error("MiNiFi Provenance Repository database open %s failed", directory_);
+ logger_->log_error("MiNiFi Provenance Repository database open {} failed", directory_);
return false;
}
diff --git a/extensions/rocksdb-repos/RocksDbRepository.cpp b/extensions/rocksdb-repos/RocksDbRepository.cpp
index 4dc420c62..409388327 100644
--- a/extensions/rocksdb-repos/RocksDbRepository.cpp
+++ b/extensions/rocksdb-repos/RocksDbRepository.cpp
@@ -39,7 +39,7 @@ bool RocksDbRepository::ExecuteWithRetry(const std::function<rocksdb::Status()>&
logger_->log_trace("Rocksdb operation executed successfully");
return true;
}
- logger_->log_error("Rocksdb operation failed: %s", status.ToString());
+ logger_->log_error("Rocksdb operation failed: {}", status.ToString());
wait_time += FLOWFILE_REPOSITORY_RETRY_INTERVAL_INCREMENTS;
std::this_thread::sleep_for(wait_time);
}
diff --git a/extensions/rocksdb-repos/controllers/RocksDbStateStorage.cpp b/extensions/rocksdb-repos/controllers/RocksDbStateStorage.cpp
index faf80e833..a07e1a451 100644
--- a/extensions/rocksdb-repos/controllers/RocksDbStateStorage.cpp
+++ b/extensions/rocksdb-repos/controllers/RocksDbStateStorage.cpp
@@ -46,10 +46,10 @@ void RocksDbStateStorage::onEnable() {
}
const auto always_persist = getProperty<bool>(AlwaysPersist).value_or(false);
- logger_->log_info("Always Persist property: %s", always_persist ? "true" : "false");
+ logger_->log_info("Always Persist property: {}", always_persist);
const auto auto_persistence_interval = getProperty<core::TimePeriodValue>(AutoPersistenceInterval).value_or(core::TimePeriodValue{}).getMilliseconds();
- logger_->log_info("Auto Persistence Interval property: %" PRId64 " ms", auto_persistence_interval.count());
+ logger_->log_info("Auto Persistence Interval property: {}", auto_persistence_interval);
if (!getProperty(Directory, directory_)) {
logger_->log_error("Invalid or missing property: Directory");
@@ -64,7 +64,7 @@ void RocksDbStateStorage::onEnable() {
if (!encrypted_env) {
encrypted_env = createEncryptingEnv(utils::crypto::EncryptionManager{configuration_->getHome()}, core::repository::DbEncryptionOptions{directory_, ENCRYPTION_KEY_NAME_OLD});
}
- logger_->log_info("Using %s RocksDbStateStorage", encrypted_env ? "encrypted" : "plaintext");
+ logger_->log_info("Using {} RocksDbStateStorage", encrypted_env ? "encrypted" : "plaintext");
auto set_db_opts = [encrypted_env] (internal::Writable<rocksdb::DBOptions>& db_opts) {
db_opts.set(&rocksdb::DBOptions::create_if_missing, true);
@@ -83,10 +83,10 @@ void RocksDbStateStorage::onEnable() {
};
db_ = minifi::internal::RocksDatabase::create(set_db_opts, set_cf_opts, directory_);
if (db_->open()) {
- logger_->log_trace("Successfully opened RocksDB database at %s", directory_.c_str());
+ logger_->log_trace("Successfully opened RocksDB database at {}", directory_.c_str());
} else {
// TODO(adebreceni) forward the status
- logger_->log_error("Failed to open RocksDB database at %s, error", directory_.c_str());
+ logger_->log_error("Failed to open RocksDB database at {}, error", directory_.c_str());
return;
}
@@ -112,7 +112,7 @@ bool RocksDbStateStorage::set(const std::string& key, const std::string& value)
}
rocksdb::Status status = opendb->Put(default_write_options, key, value);
if (!status.ok()) {
- logger_->log_error("Failed to Put key %s to RocksDB database at %s, error: %s", key.c_str(), directory_.c_str(), status.getState());
+ logger_->log_error("Failed to Put key {} to RocksDB database at {}, error: {}", key.c_str(), directory_.c_str(), status.getState());
return false;
}
return true;
@@ -129,9 +129,9 @@ bool RocksDbStateStorage::get(const std::string& key, std::string& value) {
rocksdb::Status status = opendb->Get(rocksdb::ReadOptions(), key, &value);
if (!status.ok()) {
if (status.getState() != nullptr) {
- logger_->log_error("Failed to Get key %s from RocksDB database at %s, error: %s", key.c_str(), directory_.c_str(), status.getState());
+ logger_->log_error("Failed to Get key {} from RocksDB database at {}, error: {}", key.c_str(), directory_.c_str(), status.getState());
} else {
- logger_->log_warn("Failed to Get key %s from RocksDB database at %s (it may not have been initialized yet)", key.c_str(), directory_.c_str());
+ logger_->log_warn("Failed to Get key {} from RocksDB database at {} (it may not have been initialized yet)", key.c_str(), directory_.c_str());
}
return false;
}
@@ -152,7 +152,7 @@ bool RocksDbStateStorage::get(std::unordered_map<std::string, std::string>& kvs)
kvs.emplace(it->key().ToString(), it->value().ToString());
}
if (!it->status().ok()) {
- logger_->log_error("Encountered error when iterating through RocksDB database at %s, error: %s", directory_.c_str(), it->status().getState());
+ logger_->log_error("Encountered error when iterating through RocksDB database at {}, error: {}", directory_.c_str(), it->status().getState());
return false;
}
return true;
@@ -168,7 +168,7 @@ bool RocksDbStateStorage::remove(const std::string& key) {
}
rocksdb::Status status = opendb->Delete(default_write_options, key);
if (!status.ok()) {
- logger_->log_error("Failed to Delete from RocksDB database at %s, error: %s", directory_.c_str(), status.getState());
+ logger_->log_error("Failed to Delete from RocksDB database at {}, error: {}", directory_.c_str(), status.getState());
return false;
}
return true;
@@ -186,12 +186,12 @@ bool RocksDbStateStorage::clear() {
for (it->SeekToFirst(); it->Valid(); it->Next()) {
rocksdb::Status status = opendb->Delete(default_write_options, it->key());
if (!status.ok()) {
- logger_->log_error("Failed to Delete from RocksDB database at %s, error: %s", directory_.c_str(), status.getState());
+ logger_->log_error("Failed to Delete from RocksDB database at {}, error: {}", directory_.c_str(), status.getState());
return false;
}
}
if (!it->status().ok()) {
- logger_->log_error("Encountered error when iterating through RocksDB database at %s, error: %s", directory_.c_str(), it->status().getState());
+ logger_->log_error("Encountered error when iterating through RocksDB database at {}, error: {}", directory_.c_str(), it->status().getState());
return false;
}
return true;
diff --git a/extensions/rocksdb-repos/database/ColumnHandle.cpp b/extensions/rocksdb-repos/database/ColumnHandle.cpp
index df4f65713..4bd05b3d2 100644
--- a/extensions/rocksdb-repos/database/ColumnHandle.cpp
+++ b/extensions/rocksdb-repos/database/ColumnHandle.cpp
@@ -23,7 +23,7 @@ namespace org::apache::nifi::minifi::internal {
ColumnHandle::~ColumnHandle() {
static auto logger = core::logging::LoggerFactory<ColumnHandle>::getLogger();
- logger->log_trace("Closing column handle '%s'", handle->GetName());
+ logger->log_trace("Closing column handle '{}'", handle->GetName());
}
} // namespace org::apache::nifi::minifi::internal
diff --git a/extensions/rocksdb-repos/database/DbHandle.cpp b/extensions/rocksdb-repos/database/DbHandle.cpp
index 70c4bc637..2c96a043d 100644
--- a/extensions/rocksdb-repos/database/DbHandle.cpp
+++ b/extensions/rocksdb-repos/database/DbHandle.cpp
@@ -23,7 +23,7 @@ namespace org::apache::nifi::minifi::internal {
DbHandle::~DbHandle() {
static auto logger = core::logging::LoggerFactory<DbHandle>::getLogger();
- logger->log_trace("Closing database handle '%s'", handle->GetName());
+ logger->log_trace("Closing database handle '{}'", handle->GetName());
}
} // namespace org::apache::nifi::minifi::internal
diff --git a/extensions/rocksdb-repos/database/RocksDatabase.cpp b/extensions/rocksdb-repos/database/RocksDatabase.cpp
index 330f1398e..0f94442fa 100644
--- a/extensions/rocksdb-repos/database/RocksDatabase.cpp
+++ b/extensions/rocksdb-repos/database/RocksDatabase.cpp
@@ -32,26 +32,26 @@ std::shared_ptr<core::logging::Logger> RocksDatabase::logger_ = core::logging::L
std::unique_ptr<RocksDatabase> RocksDatabase::create(const DBOptionsPatch& db_options_patch, const ColumnFamilyOptionsPatch& cf_options_patch, const std::string& uri, RocksDbMode mode) {
const std::string scheme = "minifidb://";
- logger_->log_info("Acquiring database handle '%s'", uri);
+ logger_->log_info("Acquiring database handle '{}'", uri);
std::string db_path = uri;
std::string db_column = "default";
if (utils::StringUtils::startsWith(uri, scheme)) {
const std::string path = uri.substr(scheme.length());
- logger_->log_info("RocksDB scheme is detected in '%s'", uri);
+ logger_->log_info("RocksDB scheme is detected in '{}'", uri);
// last segment is treated as the column name
std::string::size_type pos = path.find_last_of('/');
if (pos == std::string::npos) {
pos = path.find_last_of('\\');
}
if (pos == std::string::npos) {
- logger_->log_error("Couldn't detect the column name in '%s'", uri);
+ logger_->log_error("Couldn't detect the column name in '{}'", uri);
return nullptr;
}
db_path = path.substr(0, pos);
db_column = path.substr(pos + 1);
- logger_->log_info("Using column '%s' in rocksdb database '%s'", db_column, db_path);
+ logger_->log_info("Using column '{}' in rocksdb database '{}'", db_column, db_path);
} else {
- logger_->log_info("Simple directory detected '%s', using as is", uri);
+ logger_->log_info("Simple directory detected '{}', using as is", uri);
}
if (mode == RocksDbMode::ReadOnly) {
@@ -67,11 +67,11 @@ std::unique_ptr<RocksDatabase> RocksDatabase::create(const DBOptionsPatch& db_op
std::lock_guard<std::mutex> guard(mtx);
instance = databases[db_path].lock();
if (!instance) {
- logger_->log_info("Opening rocksdb database '%s'", db_path);
+ logger_->log_info("Opening rocksdb database '{}'", db_path);
instance = std::make_shared<RocksDbInstance>(db_path, mode);
databases[db_path] = instance;
} else {
- logger_->log_info("Using previously opened rocksdb instance '%s'", db_path);
+ logger_->log_info("Using previously opened rocksdb instance '{}'", db_path);
}
}
return std::make_unique<RocksDatabase>(instance, db_column, db_options_patch, cf_options_patch);
diff --git a/extensions/rocksdb-repos/database/RocksDbInstance.cpp b/extensions/rocksdb-repos/database/RocksDbInstance.cpp
index f570934d2..0bab95c1d 100644
--- a/extensions/rocksdb-repos/database/RocksDbInstance.cpp
+++ b/extensions/rocksdb-repos/database/RocksDbInstance.cpp
@@ -44,7 +44,7 @@ void RocksDbInstance::invalidate(const std::lock_guard<std::mutex>&) {
void RocksDbInstance::registerColumnConfig(const std::string& column, const DBOptionsPatch& db_options_patch, const ColumnFamilyOptionsPatch& cf_options_patch) {
std::lock_guard<std::mutex> db_guard{mtx_};
- logger_->log_trace("Registering column '%s' in database '%s'", column, db_name_);
+ logger_->log_trace("Registering column '{}' in database '{}'", column, db_name_);
auto [_, inserted] = column_configs_.insert({column, ColumnConfig{.dbo_patch = db_options_patch, .cfo_patch = cf_options_patch}});
if (!inserted) {
throw std::runtime_error("Configuration is already registered for column '" + column + "'");
@@ -122,7 +122,7 @@ std::optional<OpenRocksDb> RocksDbInstance::open(const std::string& column) {
Writable<rocksdb::DBOptions> db_options_writer(dummy_opts);
dbo_patch(db_options_writer);
if (db_options_writer.isModified()) {
- logger_->log_error("Conflicting database options requested for '%s'", db_name_);
+ logger_->log_error("Conflicting database options requested for '{}'", db_name_);
return std::nullopt;
}
}
@@ -149,14 +149,14 @@ std::optional<OpenRocksDb> RocksDbInstance::open(const std::string& column) {
}
}
if (option_status.ok()) {
- logger_->log_trace("Found existing database '%s', checking compatibility", db_name_);
+ logger_->log_trace("Found existing database '{}', checking compatibility", db_name_);
rocksdb::Status compat_status = rocksdb::CheckOptionsCompatibility(conf_options, db_name_, db_options_, cf_descriptors);
if (!compat_status.ok()) {
- logger_->log_error("Incompatible database options: %s", compat_status.ToString());
+ logger_->log_error("Incompatible database options: {}", compat_status.ToString());
return std::nullopt;
}
} else if (option_status.IsNotFound()) {
- logger_->log_trace("Database at '%s' not found, creating", db_name_);
+ logger_->log_trace("Database at '{}' not found, creating", db_name_);
rocksdb::ColumnFamilyOptions default_cf_options;
if (auto it = column_configs_.find("default"); it != column_configs_.end()) {
if (auto& cfo_patch = it->second.cfo_patch) {
@@ -165,7 +165,7 @@ std::optional<OpenRocksDb> RocksDbInstance::open(const std::string& column) {
}
cf_descriptors.emplace_back("default", default_cf_options);
} else if (!option_status.ok()) {
- logger_->log_error("Couldn't query database '%s' for options: '%s'", db_name_, option_status.ToString());
+ logger_->log_error("Couldn't query database '{}' for options: '{}'", db_name_, option_status.ToString());
return std::nullopt;
}
std::vector<rocksdb::ColumnFamilyHandle*> column_handles;
@@ -173,13 +173,13 @@ std::optional<OpenRocksDb> RocksDbInstance::open(const std::string& column) {
case RocksDbMode::ReadWrite:
result = rocksdb::DB::Open(db_options_, db_name_, cf_descriptors, &column_handles, &db_instance);
if (!result.ok()) {
- logger_->log_error("Cannot open writable rocksdb database '%s', error: '%s'", db_name_, result.ToString());
+ logger_->log_error("Cannot open writable rocksdb database '{}', error: '{}'", db_name_, result.ToString());
}
break;
case RocksDbMode::ReadOnly:
result = rocksdb::DB::OpenForReadOnly(db_options_, db_name_, cf_descriptors, &column_handles, &db_instance);
if (!result.ok()) {
- logger_->log_error("Cannot open read-only rocksdb database '%s', error: '%s'", db_name_, result.ToString());
+ logger_->log_error("Cannot open read-only rocksdb database '{}', error: '{}'", db_name_, result.ToString());
}
break;
}
@@ -214,11 +214,11 @@ std::optional<OpenRocksDb> RocksDbInstance::open(const std::string& column) {
std::shared_ptr<ColumnHandle> RocksDbInstance::getOrCreateColumnFamily(const std::string& column, const std::lock_guard<std::mutex>& /*guard*/) {
gsl_Expects(impl_);
if (!column_configs_.contains(column)) {
- logger_->log_error("Trying to access column '%s' in database '%s' without configuration", column, impl_->handle->GetName());
+ logger_->log_error("Trying to access column '{}' in database '{}' without configuration", column, impl_->handle->GetName());
return nullptr;
}
if (auto it = columns_.find(column); it != columns_.end()) {
- logger_->log_trace("Column '%s' already exists in database '%s'", column, impl_->handle->GetName());
+ logger_->log_trace("Column '{}' already exists in database '{}'", column, impl_->handle->GetName());
return it->second;
}
if (mode_ == RocksDbMode::ReadOnly) {
@@ -236,10 +236,10 @@ std::shared_ptr<ColumnHandle> RocksDbInstance::getOrCreateColumnFamily(const std
}
auto status = impl_->handle->CreateColumnFamily(cf_options, column, &raw_handle);
if (!status.ok()) {
- logger_->log_error("Failed to create column '%s' in database '%s'", column, impl_->handle->GetName());
+ logger_->log_error("Failed to create column '{}' in database '{}'", column, impl_->handle->GetName());
return nullptr;
}
- logger_->log_trace("Successfully created column '%s' in database '%s'", column, impl_->handle->GetName());
+ logger_->log_trace("Successfully created column '{}' in database '{}'", column, impl_->handle->GetName());
columns_[column] = std::make_shared<ColumnHandle>(std::unique_ptr<rocksdb::ColumnFamilyHandle>(raw_handle), cfo_patch);
return columns_[column];
}
diff --git a/extensions/rocksdb-repos/encryption/RocksDbEncryptionProvider.cpp b/extensions/rocksdb-repos/encryption/RocksDbEncryptionProvider.cpp
index ffeead877..82fcfbd38 100644
--- a/extensions/rocksdb-repos/encryption/RocksDbEncryptionProvider.cpp
+++ b/extensions/rocksdb-repos/encryption/RocksDbEncryptionProvider.cpp
@@ -91,7 +91,7 @@ rocksdb::Status AES256BlockCipher::Encrypt(char *data) {
cipher_impl_.encrypt(std::span<unsigned char, Aes256EcbCipher::BLOCK_SIZE>{reinterpret_cast<unsigned char*>(data), Aes256EcbCipher::BLOCK_SIZE});
return rocksdb::Status::OK();
} catch (const utils::crypto::CipherError& error) {
- logger_->log_error("Error while encrypting in database '%s': %s", database_, error.what());
+ logger_->log_error("Error while encrypting in database '{}': {}", database_, error.what());
return rocksdb::Status::IOError();
}
}
@@ -101,7 +101,7 @@ rocksdb::Status AES256BlockCipher::Decrypt(char *data) {
cipher_impl_.decrypt(std::span<unsigned char, Aes256EcbCipher::BLOCK_SIZE>{reinterpret_cast<unsigned char*>(data), Aes256EcbCipher::BLOCK_SIZE});
return rocksdb::Status::OK();
} catch (const utils::crypto::CipherError& error) {
- logger_->log_error("Error while decrypting in database '%s': %s", database_, error.what());
+ logger_->log_error("Error while decrypting in database '{}': {}", database_, error.what());
return rocksdb::Status::IOError();
}
}
diff --git a/extensions/sftp/client/SFTPClient.cpp b/extensions/sftp/client/SFTPClient.cpp
index 79712416a..badea3ae9 100644
--- a/extensions/sftp/client/SFTPClient.cpp
+++ b/extensions/sftp/client/SFTPClient.cpp
@@ -183,7 +183,7 @@ SFTPClient::~SFTPClient() {
if (easy_ != nullptr) {
curl_easy_cleanup(easy_);
}
- logger_->log_trace("Closing SFTPClient for %s:%hu", hostname_, port_);
+ logger_->log_trace("Closing SFTPClient for {}:{}", hostname_, port_);
}
bool SFTPClient::setVerbose() {
@@ -198,13 +198,13 @@ bool SFTPClient::setHostKeyFile(const std::string& host_key_file_path, bool stri
if (ssh_known_hosts_ == nullptr) {
char *err_msg = nullptr;
libssh2_session_last_error(ssh_session_, &err_msg, nullptr, 0);
- logger_->log_error("Failed to init knownhost structure, error: %s", err_msg);
+ logger_->log_error("Failed to init knownhost structure, error: {}", err_msg);
return false;
}
if (libssh2_knownhost_readfile(ssh_known_hosts_, host_key_file_path.c_str(), LIBSSH2_KNOWNHOST_FILE_OPENSSH) <= 0) {
char *err_msg = nullptr;
libssh2_session_last_error(ssh_session_, &err_msg, nullptr, 0);
- logger_->log_error("Failed to read host file %s, error: %s", host_key_file_path.c_str(), err_msg);
+ logger_->log_error("Failed to read host file {}, error: {}", host_key_file_path.c_str(), err_msg);
return false;
}
strict_host_checking_ = strict_host_checking;
@@ -289,7 +289,7 @@ bool SFTPClient::connect() {
/* Connecting to proxy, if needed, then to the host */
CURLcode curl_res = curl_easy_perform(easy_);
if (curl_res != CURLE_OK) {
- logger_->log_error("Failed to connect to %s, curl error code: %s, detailed error message: %s",
+ logger_->log_error("Failed to connect to {}, curl error code: {}, detailed error message: {}",
uri.c_str(),
curl_easy_strerror(curl_res),
curl_errorbuffer_.data());
@@ -311,7 +311,7 @@ bool SFTPClient::connect() {
if (libssh2_session_handshake(ssh_session_, gsl::narrow<libssh2_socket_t>(sockfd)) != 0) {
char *err_msg = nullptr;
libssh2_session_last_error(ssh_session_, &err_msg, nullptr, 0);
- logger_->log_info("Failed to establish SSH connection, error: %s", err_msg);
+ logger_->log_info("Failed to establish SSH connection, error: {}", err_msg);
return false;
}
@@ -324,7 +324,7 @@ bool SFTPClient::connect() {
if (hostkey_ptr == nullptr) {
char *err_msg = nullptr;
libssh2_session_last_error(ssh_session_, &err_msg, nullptr, 0);
- logger_->log_info("Failed to get session hostkey, error: %s", err_msg);
+ logger_->log_info("Failed to get session hostkey, error: {}", err_msg);
return std::nullopt;
}
const auto hostkey = std::string_view{hostkey_ptr, hostkey_len};
@@ -341,7 +341,7 @@ bool SFTPClient::connect() {
keybit = LIBSSH2_KNOWNHOST_KEY_SSHDSS;
break;
default:
- logger_->log_error("Unknown host key type: %d", hostkey_type);
+ logger_->log_error("Unknown host key type: {}", hostkey_type);
return false;
}
struct libssh2_knownhost* known_host = nullptr;
@@ -356,23 +356,23 @@ bool SFTPClient::connect() {
bool host_match = false;
switch (keycheck_result) {
case LIBSSH2_KNOWNHOST_CHECK_FAILURE:
- logger_->log_warn("Failed to verify host key for %s", hostname_.c_str());
+ logger_->log_warn("Failed to verify host key for {}", hostname_.c_str());
break;
case LIBSSH2_KNOWNHOST_CHECK_NOTFOUND:
- logger_->log_warn("Host %s not found in the host key file", hostname_.c_str());
+ logger_->log_warn("Host {} not found in the host key file", hostname_.c_str());
break;
case LIBSSH2_KNOWNHOST_CHECK_MISMATCH: {
auto hostkey_b64 = utils::StringUtils::to_base64(hostkey);
- logger_->log_warn("Host key mismatch for %s, expected: %s, actual: %s", hostname_.c_str(),
+ logger_->log_warn("Host key mismatch for {}, expected: {}, actual: {}", hostname_.c_str(),
known_host == nullptr ? "" : known_host->key, hostkey_b64.c_str());
break;
}
case LIBSSH2_KNOWNHOST_CHECK_MATCH:
host_match = true;
- logger_->log_debug("Host key verification succeeded for %s", hostname_.c_str());
+ logger_->log_debug("Host key verification succeeded for {}", hostname_.c_str());
break;
default:
- logger_->log_error("Unknown libssh2_knownhost_checkp result: %d", keycheck_result);
+ logger_->log_error("Unknown libssh2_knownhost_checkp result: {}", keycheck_result);
break;
}
if (strict_host_checking_ && !host_match) {
@@ -392,7 +392,7 @@ bool SFTPClient::connect() {
fingerprint_hex_colon << ":";
}
}
- logger_->log_debug("SHA1 host key fingerprint for %s is %s", hostname_.c_str(), fingerprint_hex_colon.str().c_str());
+ logger_->log_debug("SHA1 host key fingerprint for {} is {}", hostname_.c_str(), fingerprint_hex_colon.str().c_str());
}
}
@@ -426,7 +426,7 @@ bool SFTPClient::connect() {
} else {
char *err_msg = nullptr;
libssh2_session_last_error(ssh_session_, &err_msg, nullptr, 0);
- logger_->log_info("Failed to authenticate with publickey, error: %s", err_msg);
+ logger_->log_info("Failed to authenticate with publickey, error: {}", err_msg);
}
}
if (!authenticated && password_authentication_enabled_ && auth_methods.count("password") == 1) {
@@ -436,7 +436,7 @@ bool SFTPClient::connect() {
} else {
char *err_msg = nullptr;
libssh2_session_last_error(ssh_session_, &err_msg, nullptr, 0);
- logger_->log_info("Failed to authenticate with password, error: %s", err_msg);
+ logger_->log_info("Failed to authenticate with password, error: {}", err_msg);
}
}
if (!authenticated) {
@@ -449,7 +449,7 @@ bool SFTPClient::connect() {
if (sftp_session_ == nullptr) {
char *err_msg = nullptr;
libssh2_session_last_error(ssh_session_, &err_msg, nullptr, 0);
- logger_->log_error("Failed to initialize SFTP session, error: %s", err_msg);
+ logger_->log_error("Failed to initialize SFTP session, error: {}", err_msg);
return false;
}
@@ -467,7 +467,7 @@ bool SFTPClient::sendKeepAliveIfNeeded(int &seconds_to_next) {
if (libssh2_keepalive_send(ssh_session_, &seconds_to_next) != 0) {
char *err_msg = nullptr;
libssh2_session_last_error(ssh_session_, &err_msg, nullptr, 0);
- logger_->log_error("Failed to send keepalive to %s@%s:%hu, error: %s",
+ logger_->log_error("Failed to send keepalive to {}@{}:{}, error: {}",
username_,
hostname_,
port_,
@@ -503,12 +503,12 @@ std::optional<uint64_t> SFTPClient::getFile(const std::string& path, io::OutputS
/* We can only get the sftp error in this case if the ssh error is a protocol error */
if (ssh_errno == LIBSSH2_ERROR_SFTP_PROTOCOL) {
last_error_.setLibssh2Error(libssh2_sftp_last_error(sftp_session_));
- logger_->log_error("Failed to open remote file \"%s\", error: %s", path.c_str(), sftp_strerror(last_error_));
+ logger_->log_error("Failed to open remote file \"{}\", error: {}", path.c_str(), sftp_strerror(last_error_));
} else {
last_error_.setSftpError(SFTPError::IoError);
char *err_msg = nullptr;
libssh2_session_last_error(ssh_session_, &err_msg, nullptr, 0);
- logger_->log_error("Failed to open remote file \"%s\" due to an underlying SSH error: %s", path.c_str(), err_msg);
+ logger_->log_error("Failed to open remote file \"{}\" due to an underlying SSH error: {}", path.c_str(), err_msg);
}
return std::nullopt;
}
@@ -523,13 +523,13 @@ std::optional<uint64_t> SFTPClient::getFile(const std::string& path, io::OutputS
ssize_t read_ret = libssh2_sftp_read(file_handle, reinterpret_cast<char*>(buf.data()), buf.size());
if (read_ret < 0) {
last_error_.setSftpError(SFTPError::IoError);
- logger_->log_error("Failed to read remote file \"%s\"", path.c_str());
+ logger_->log_error("Failed to read remote file \"{}\"", path.c_str());
return std::nullopt;
} else if (read_ret == 0) {
- logger_->log_trace("EOF while reading remote file \"%s\"", path.c_str());
+ logger_->log_trace("EOF while reading remote file \"{}\"", path.c_str());
break;
}
- logger_->log_trace("Read %d bytes from remote file \"%s\"", read_ret, path.c_str());
+ logger_->log_trace("Read {} bytes from remote file \"{}\"", read_ret, path.c_str());
total_read += gsl::narrow<uint64_t>(read_ret);
auto remaining = read_ret;
while (remaining > 0) {
@@ -545,7 +545,7 @@ std::optional<uint64_t> SFTPClient::getFile(const std::string& path, io::OutputS
if (expected_size >= 0 && total_read != gsl::narrow<uint64_t>(expected_size)) {
last_error_.setLibssh2Error(LIBSSH2_FX_OK);
- logger_->log_error("Remote file \"%s\" has unexpected size, expected: %ld, actual: %lu", path.c_str(), expected_size, total_read);
+ logger_->log_error("Remote file \"{}\" has unexpected size, expected: {}, actual: {}", path.c_str(), expected_size, total_read);
return std::nullopt;
}
@@ -554,23 +554,23 @@ std::optional<uint64_t> SFTPClient::getFile(const std::string& path, io::OutputS
std::optional<uint64_t> SFTPClient::putFile(const std::string& path, io::InputStream& input, bool overwrite, int64_t expected_size /*= -1*/) {
int flags = LIBSSH2_FXF_WRITE | LIBSSH2_FXF_CREAT | (overwrite ? LIBSSH2_FXF_TRUNC : LIBSSH2_FXF_EXCL);
- logger_->log_trace("Opening remote file \"%s\"", path.c_str());
+ logger_->log_trace("Opening remote file \"{}\"", path.c_str());
LIBSSH2_SFTP_HANDLE *file_handle = libssh2_sftp_open(sftp_session_, path.c_str(), flags, 0644);
if (file_handle == nullptr) {
int ssh_errno = libssh2_session_last_errno(ssh_session_);
/* We can only get the sftp error in this case if the ssh error is a protocol error */
if (ssh_errno == LIBSSH2_ERROR_SFTP_PROTOCOL) {
last_error_.setLibssh2Error(libssh2_sftp_last_error(sftp_session_));
- logger_->log_error("Failed to open remote file \"%s\", error: %s", path.c_str(), sftp_strerror(last_error_));
+ logger_->log_error("Failed to open remote file \"{}\", error: {}", path.c_str(), sftp_strerror(last_error_));
} else {
last_error_.setSftpError(SFTPError::IoError);
char *err_msg = nullptr;
libssh2_session_last_error(ssh_session_, &err_msg, nullptr, 0);
- logger_->log_error("Failed to open remote file \"%s\" due to an underlying SSH error: %s", path.c_str(), err_msg);
+ logger_->log_error("Failed to open remote file \"{}\" due to an underlying SSH error: {}", path.c_str(), err_msg);
}
}
const auto guard = gsl::finally([this, &file_handle, &path]() {
- logger_->log_trace("Closing remote file \"%s\"", path.c_str());
+ logger_->log_trace("Closing remote file \"{}\"", path.c_str());
libssh2_sftp_close(file_handle);
});
@@ -592,24 +592,24 @@ std::optional<uint64_t> SFTPClient::putFile(const std::string& path, io::InputSt
logger_->log_trace("EOF while reading input");
break;
}
- logger_->log_trace("Read %d bytes", read_ret);
+ logger_->log_trace("Read {} bytes", read_ret);
total_read += read_ret;
auto remaining = read_ret;
while (remaining > 0) {
const auto write_ret = libssh2_sftp_write(file_handle, reinterpret_cast<char*>(buf.data() + (read_ret - remaining)), remaining);
if (write_ret < 0) {
last_error_.setSftpError(SFTPError::IoError);
- logger_->log_error("Failed to write remote file \"%s\"", path.c_str());
+ logger_->log_error("Failed to write remote file \"{}\"", path.c_str());
return std::nullopt;
}
- logger_->log_trace("Wrote %d bytes to remote file \"%s\"", write_ret, path.c_str());
+ logger_->log_trace("Wrote {} bytes to remote file \"{}\"", write_ret, path.c_str());
remaining -= gsl::narrow<size_t>(write_ret);
}
} while (true);
if (expected_size >= 0 && total_read != gsl::narrow<size_t>(expected_size)) {
last_error_.setLibssh2Error(LIBSSH2_FX_OK);
- logger_->log_error("Input has unexpected size, expected: %ld, actual: %lu", path.c_str(), expected_size, total_read);
+ logger_->log_error("Input has unexpected size, expected: {}, actual: {}", path.c_str(), expected_size, total_read);
return std::nullopt;
}
@@ -633,7 +633,7 @@ bool SFTPClient::rename(const std::string& source_path, const std::string& targe
auto err = libssh2_sftp_last_error(sftp_session_);
if (overwrite && err == LIBSSH2_FX_FILE_ALREADY_EXISTS && !tried_deleting) {
/* It couldn't overwrite the file, let's delete it and try again */
- logger_->log_debug("Failed to overwrite file \"%s\" with rename, deleting instead", target_path.c_str());
+ logger_->log_debug("Failed to overwrite file \"{}\" with rename, deleting instead", target_path.c_str());
tried_deleting = true;
if (!this->removeFile(target_path)) {
return false;
@@ -641,7 +641,7 @@ bool SFTPClient::rename(const std::string& source_path, const std::string& targe
continue;
}
last_error_.setLibssh2Error(libssh2_sftp_last_error(sftp_session_));
- logger_->log_error(R"(Failed to rename remote file "%s" to "%s", error: %s)",
+ logger_->log_error(R"(Failed to rename remote file "{}" to "{}", error: {})",
source_path.c_str(),
target_path.c_str(),
sftp_strerror(last_error_));
@@ -671,10 +671,10 @@ bool SFTPClient::createDirectoryHierarchy(const std::string& path) {
err != LIBSSH2_FX_FAILURE &&
err != LIBSSH2_FX_PERMISSION_DENIED) {
last_error_.setLibssh2Error(err);
- logger_->log_error("Failed to create remote directory \"%s\", error: %s", current_dir.c_str(), sftp_strerror(last_error_));
+ logger_->log_error("Failed to create remote directory \"{}\", error: {}", current_dir.c_str(), sftp_strerror(last_error_));
return false;
} else {
- logger_->log_debug("Non-fatal failure to create remote directory \"%s\", error: %s", current_dir.c_str(), sftp_strerror(err));
+ logger_->log_debug("Non-fatal failure to create remote directory \"{}\", error: {}", current_dir.c_str(), sftp_strerror(err));
}
}
}
@@ -684,7 +684,7 @@ bool SFTPClient::createDirectoryHierarchy(const std::string& path) {
bool SFTPClient::removeFile(const std::string& path) {
if (libssh2_sftp_unlink(sftp_session_, path.c_str()) != 0) {
last_error_.setLibssh2Error(libssh2_sftp_last_error(sftp_session_));
- logger_->log_error("Failed to remove remote file \"%s\", error: %s", path.c_str(), sftp_strerror(last_error_));
+ logger_->log_error("Failed to remove remote file \"{}\", error: {}", path.c_str(), sftp_strerror(last_error_));
return false;
}
return true;
@@ -693,7 +693,7 @@ bool SFTPClient::removeFile(const std::string& path) {
bool SFTPClient::removeDirectory(const std::string& path) {
if (libssh2_sftp_rmdir(sftp_session_, path.c_str()) != 0) {
last_error_.setLibssh2Error(libssh2_sftp_last_error(sftp_session_));
- logger_->log_error("Failed to remove remote directory \"%s\", error: %s", path.c_str(), sftp_strerror(last_error_));
+ logger_->log_error("Failed to remove remote directory \"{}\", error: {}", path.c_str(), sftp_strerror(last_error_));
return false;
}
return true;
@@ -709,7 +709,7 @@ bool SFTPClient::listDirectory(const std::string& path, bool follow_symlinks,
LIBSSH2_SFTP_OPENDIR);
if (dir_handle == nullptr) {
last_error_.setLibssh2Error(libssh2_sftp_last_error(sftp_session_));
- logger_->log_error("Failed to open remote directory \"%s\", error: %s", path.c_str(), sftp_strerror(last_error_));
+ logger_->log_error("Failed to open remote directory \"{}\", error: {}", path.c_str(), sftp_strerror(last_error_));
return false;
}
const auto guard = gsl::finally([&dir_handle]() {
@@ -728,7 +728,7 @@ bool SFTPClient::listDirectory(const std::string& path, bool follow_symlinks,
&attrs);
if (ret < 0) {
last_error_.setLibssh2Error(libssh2_sftp_last_error(sftp_session_));
- logger_->log_error("Failed to read remote directory \"%s\", error: %s", path.c_str(), sftp_strerror(last_error_));
+ logger_->log_error("Failed to read remote directory \"{}\", error: {}", path.c_str(), sftp_strerror(last_error_));
return false;
} else if (ret == 0) {
break;
@@ -753,7 +753,7 @@ bool SFTPClient::stat(const std::string& path, bool follow_symlinks, LIBSSH2_SFT
follow_symlinks ? LIBSSH2_SFTP_STAT : LIBSSH2_SFTP_LSTAT,
&result) != 0) {
last_error_.setLibssh2Error(libssh2_sftp_last_error(sftp_session_));
- logger_->log_debug("Failed to stat remote path \"%s\", error: %s", path.c_str(), sftp_strerror(last_error_));
+ logger_->log_debug("Failed to stat remote path \"{}\", error: {}", path.c_str(), sftp_strerror(last_error_));
return false;
}
return true;
@@ -797,7 +797,7 @@ bool SFTPClient::setAttributes(const std::string& path, const SFTPAttributes& in
LIBSSH2_SFTP_SETSTAT,
&attrs) != 0) {
last_error_.setLibssh2Error(libssh2_sftp_last_error(sftp_session_));
- logger_->log_debug("Failed to setstat on remote path \"%s\", error: %s", path.c_str(), sftp_strerror(last_error_));
+ logger_->log_debug("Failed to setstat on remote path \"{}\", error: {}", path.c_str(), sftp_strerror(last_error_));
return false;
}
diff --git a/extensions/sftp/processors/FetchSFTP.cpp b/extensions/sftp/processors/FetchSFTP.cpp
index 7046c11de..0b34cf5ff 100644
--- a/extensions/sftp/processors/FetchSFTP.cpp
+++ b/extensions/sftp/processors/FetchSFTP.cpp
@@ -129,7 +129,7 @@ void FetchSFTP::onTrigger(const std::shared_ptr<core::ProcessContext> &context,
return gsl::narrow<int64_t>(*bytes_read);
});
} catch (const utils::SFTPException& ex) {
- logger_->log_debug(ex.what());
+ logger_->log_debug("{}", ex.what());
switch (ex.error()) {
case utils::SFTPError::PermissionDenied:
session->transfer(flow_file, PermissionDenied);
@@ -163,7 +163,7 @@ void FetchSFTP::onTrigger(const std::shared_ptr<core::ProcessContext> &context,
/* Execute completion strategy */
if (completion_strategy_ == COMPLETION_STRATEGY_DELETE_FILE) {
if (!client->removeFile(remote_file.generic_string())) {
- logger_->log_warn("Completion Strategy is Delete File, but failed to delete remote file \"%s\"", remote_file.generic_string());
+ logger_->log_warn("Completion Strategy is Delete File, but failed to delete remote file \"{}\"", remote_file.generic_string());
}
} else if (completion_strategy_ == COMPLETION_STRATEGY_MOVE_FILE) {
bool should_move = true;
@@ -174,11 +174,11 @@ void FetchSFTP::onTrigger(const std::shared_ptr<core::ProcessContext> &context,
}
}
if (!should_move) {
- logger_->log_warn("Completion Strategy is Move File, but failed to create Move Destination Directory \"%s\"", move_destination_directory.generic_string());
+ logger_->log_warn("Completion Strategy is Move File, but failed to create Move Destination Directory \"{}\"", move_destination_directory.generic_string());
} else {
auto target_path = move_destination_directory / child_path;
if (!client->rename(remote_file.generic_string(), target_path.generic_string(), false /*overwrite*/)) {
- logger_->log_warn(R"(Completion Strategy is Move File, but failed to move file "%s" to "%s")", remote_file.generic_string(), target_path.generic_string());
+ logger_->log_warn(R"(Completion Strategy is Move File, but failed to move file "{}" to "{}")", remote_file.generic_string(), target_path.generic_string());
}
}
}
diff --git a/extensions/sftp/processors/ListSFTP.cpp b/extensions/sftp/processors/ListSFTP.cpp
index 4795ab96c..909035c21 100644
--- a/extensions/sftp/processors/ListSFTP.cpp
+++ b/extensions/sftp/processors/ListSFTP.cpp
@@ -101,14 +101,14 @@ void ListSFTP::onSchedule(const std::shared_ptr<core::ProcessContext> &context,
try {
compiled_file_filter_regex_ = utils::Regex(file_filter_regex_);
} catch (const Exception &e) {
- logger_->log_error("Failed to compile File Filter Regex \"%s\"", file_filter_regex_.c_str());
+ logger_->log_error("Failed to compile File Filter Regex \"{}\"", file_filter_regex_.c_str());
}
}
if (context->getProperty(PathFilterRegex, path_filter_regex_) && !path_filter_regex_.empty()) {
try {
compiled_path_filter_regex_ = utils::Regex(path_filter_regex_);
} catch (const Exception &e) {
- logger_->log_error("Failed to compile Path Filter Regex \"%s\"", path_filter_regex_.c_str());
+ logger_->log_error("Failed to compile Path Filter Regex \"{}\"", path_filter_regex_.c_str());
}
}
if (!context->getProperty(IgnoreDottedFiles, value)) {
@@ -172,7 +172,7 @@ bool ListSFTP::filter(const std::string& parent_path, const std::tuple<std::stri
const LIBSSH2_SFTP_ATTRIBUTES& attrs = std::get<2>(sftp_child);
/* This should not happen */
if (filename.empty()) {
- logger_->log_error("Listing directory \"%s\" returned an empty child", parent_path.c_str());
+ logger_->log_error("Listing directory \"{}\" returned an empty child", parent_path.c_str());
return false;
}
/* Ignore current dir and parent dir */
@@ -181,12 +181,12 @@ bool ListSFTP::filter(const std::string& parent_path, const std::tuple<std::stri
}
/* Dotted files */
if (ignore_dotted_files_ && filename[0] == '.') {
- logger_->log_debug("Ignoring \"%s/%s\" because Ignore Dotted Files is true", parent_path.c_str(), filename.c_str());
+ logger_->log_debug("Ignoring \"{}/{}\" because Ignore Dotted Files is true", parent_path.c_str(), filename.c_str());
return false;
}
if (!(attrs.flags & LIBSSH2_SFTP_ATTR_PERMISSIONS)) {
// TODO(Bakai): maybe do a fallback stat here
- logger_->log_error("Failed to get permissions in stat for \"%s/%s\"", parent_path.c_str(), filename.c_str());
+ logger_->log_error("Failed to get permissions in stat for \"{}/{}\"", parent_path.c_str(), filename.c_str());
return false;
}
if (LIBSSH2_SFTP_S_ISREG(attrs.permissions)) {
@@ -194,7 +194,7 @@ bool ListSFTP::filter(const std::string& parent_path, const std::tuple<std::stri
} else if (LIBSSH2_SFTP_S_ISDIR(attrs.permissions)) {
return filterDirectory(parent_path, filename, attrs);
} else {
- logger_->log_debug("Skipping non-regular, non-directory file \"%s/%s\"", parent_path.c_str(), filename.c_str());
+ logger_->log_debug("Skipping non-regular, non-directory file \"{}/{}\"", parent_path.c_str(), filename.c_str());
return false;
}
}
@@ -204,32 +204,32 @@ bool ListSFTP::filterFile(const std::string& parent_path, const std::string& fil
!(attrs.flags & LIBSSH2_SFTP_ATTR_SIZE) ||
!(attrs.flags & LIBSSH2_SFTP_ATTR_ACMODTIME)) {
// TODO(Bakai): maybe do a fallback stat here
- logger_->log_error("Failed to get all attributes in stat for \"%s/%s\"", parent_path.c_str(), filename.c_str());
+ logger_->log_error("Failed to get all attributes in stat for \"{}/{}\"", parent_path.c_str(), filename.c_str());
return false;
}
/* Age */
auto file_age = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now() - std::chrono::system_clock::from_time_t(gsl::narrow<time_t>(attrs.mtime)));
if (file_age < minimum_file_age_) {
- logger_->log_debug("Ignoring \"%s/%s\" because it is younger than the Minimum File Age: %ld ms < %lu ms",
+ logger_->log_debug("Ignoring \"{}/{}\" because it is younger than the Minimum File Age: {} < {}",
parent_path.c_str(),
filename.c_str(),
- file_age.count(),
- minimum_file_age_.count());
+ file_age,
+ minimum_file_age_);
return false;
}
if (maximum_file_age_ != 0ms && file_age > maximum_file_age_) {
- logger_->log_debug("Ignoring \"%s/%s\" because it is older than the Maximum File Age: %" PRId64 " ms > %" PRId64 " ms",
+ logger_->log_debug("Ignoring \"{}/{}\" because it is older than the Maximum File Age: {} > {}",
parent_path.c_str(),
filename.c_str(),
- int64_t{file_age.count()},
- int64_t{maximum_file_age_.count()});
+ file_age,
+ maximum_file_age_);
return false;
}
/* Size */
if (attrs.filesize < minimum_file_size_) {
- logger_->log_debug("Ignoring \"%s/%s\" because it is smaller than the Minimum File Size: %lu B < %lu B",
+ logger_->log_debug("Ignoring \"{}/{}\" because it is smaller than the Minimum File Size: {} B < {} B",
parent_path.c_str(),
filename.c_str(),
attrs.filesize,
@@ -237,7 +237,7 @@ bool ListSFTP::filterFile(const std::string& parent_path, const std::string& fil
return false;
}
if (maximum_file_size_ != 0U && attrs.filesize > maximum_file_size_) {
- logger_->log_debug("Ignoring \"%s/%s\" because it is larger than the Maximum File Size: %lu B > %lu B",
+ logger_->log_debug("Ignoring \"{}/{}\" because it is larger than the Maximum File Size: {} B > {} B",
parent_path.c_str(),
filename.c_str(),
attrs.filesize,
@@ -250,7 +250,7 @@ bool ListSFTP::filterFile(const std::string& parent_path, const std::string& fil
bool match = false;
match = utils::regexMatch(filename, *compiled_file_filter_regex_);
if (!match) {
- logger_->log_debug(R"(Ignoring "%s/%s" because it did not match the File Filter Regex "%s")",
+ logger_->log_debug(R"(Ignoring "{}/{}" because it did not match the File Filter Regex "{}")",
parent_path.c_str(),
filename.c_str(),
file_filter_regex_);
@@ -272,7 +272,7 @@ bool ListSFTP::filterDirectory(const std::string& parent_path, const std::string
bool match = false;
match = utils::regexMatch(dir_path, *compiled_path_filter_regex_);
if (!match) {
- logger_->log_debug(R"(Not recursing into "%s" because it did not match the Path Filter Regex "%s")",
+ logger_->log_debug(R"(Not recursing into "{}" because it did not match the Path Filter Regex "{}")",
dir_path.c_str(),
path_filter_regex_);
return false;
@@ -290,7 +290,7 @@ bool ListSFTP::createAndTransferFlowFileFromChild(
const ListSFTP::Child& child) {
/* Convert mtime to string */
if (child.attrs.mtime > gsl::narrow<uint64_t>(std::numeric_limits<int64_t>::max())) {
- logger_->log_error("Modification date %lu of \"%s/%s\" larger than int64_t max", child.attrs.mtime, child.parent_path.c_str(), child.filename.c_str());
+ logger_->log_error("Modification date {} of \"{}/{}\" larger than int64_t max", child.attrs.mtime, child.parent_path.c_str(), child.filename.c_str());
return true;
}
auto mtime_str = utils::timeutils::getDateTimeStr(date::sys_seconds{std::chrono::seconds(child.attrs.mtime)});
@@ -419,10 +419,10 @@ bool ListSFTP::updateFromTrackingTimestampsCache(const std::shared_ptr<core::Pro
state_remote_path != remote_path) {
logger_->log_error(
"Processor state was persisted with different settings than the current ones, ignoring. "
- "Listing Strategy: \"%s\" vs. \"%s\", "
- "Hostname: \"%s\" vs. \"%s\", "
- "Username: \"%s\" vs. \"%s\", "
- "Remote Path: \"%s\" vs. \"%s\"",
+ "Listing Strategy: \"{}\" vs. \"{}\", "
+ "Hostname: \"{}\" vs. \"{}\", "
+ "Username: \"{}\" vs. \"{}\", "
+ "Remote Path: \"{}\" vs. \"{}\"",
state_listing_strategy, listing_strategy_,
state_hostname, hostname,
state_username, username,
@@ -472,7 +472,7 @@ void ListSFTP::listByTrackingTimestamps(
auto& files_for_timestamp = ordered_files[timestamp];
files_for_timestamp.emplace_back(std::move(file));
} else {
- logger_->log_trace("Skipping \"%s\", because it is not new.", file.getPath().c_str());
+ logger_->log_trace("Skipping \"{}\", because it is not new.", file.getPath().c_str());
}
}
@@ -500,7 +500,7 @@ void ListSFTP::listByTrackingTimestamps(
remote_system_timestamp_precision = TARGET_SYSTEM_TIMESTAMP_PRECISION_SECONDS;
}
std::chrono::milliseconds listing_lag{utils::at(LISTING_LAG_MAP, remote_system_timestamp_precision)};
- logger_->log_debug("The listing lag is %lu ms", listing_lag.count());
+ logger_->log_debug("The listing lag is {}", listing_lag);
/* If the latest listing time is equal to the last listing time, there are no entries with a newer timestamp than previously seen */
if (latest_listed_entry_timestamp_this_cycle == last_listed_latest_entry_timestamp_ && latest_listed_entry_timestamp_this_cycle) {
@@ -508,11 +508,9 @@ void ListSFTP::listByTrackingTimestamps(
auto elapsed_time = std::chrono::duration_cast<std::chrono::milliseconds>(current_run_time - last_run_time_);
/* If a precision-specific listing lag has not yet elapsed since out last execution, we wait. */
if (elapsed_time < listing_lag) {
- logger_->log_debug("The latest listed entry timestamp is the same as the last listed entry timestamp (%lu) "
- "and the listing lag has not yet elapsed (%lu ms < % lu ms). Yielding.",
- toUnixTime(latest_listed_entry_timestamp_this_cycle),
- elapsed_time.count(),
- listing_lag.count());
+ logger_->log_debug("The latest listed entry timestamp is the same as the last listed entry timestamp ({}) "
+ "and the listing lag has not yet elapsed ({} < {}). Yielding.",
+ latest_listed_entry_timestamp_this_cycle, elapsed_time, listing_lag);
context->yield();
return;
}
@@ -524,8 +522,8 @@ void ListSFTP::listByTrackingTimestamps(
std::all_of(latest_files.begin(), latest_files.end(), [this](const Child& child) {
return latest_identifiers_processed_.count(child.getPath()) == 1U;
})) {
- logger_->log_debug("The latest listed entry timestamp is the same as the last listed entry timestamp (%lu) "
- "and all files for that timestamp has been processed. Yielding.", toUnixTime(latest_listed_entry_timestamp_this_cycle));
+ logger_->log_debug("The latest listed entry timestamp is the same as the last listed entry timestamp ({}) "
+ "and all files for that timestamp has been processed. Yielding.", latest_listed_entry_timestamp_this_cycle);
context->yield();
return;
}
@@ -539,9 +537,9 @@ void ListSFTP::listByTrackingTimestamps(
}
/* If the latest timestamp is not old enough, we wait another cycle */
if (latest_listed_entry_timestamp_this_cycle && minimum_reliable_timestamp < latest_listed_entry_timestamp_this_cycle) {
- logger_->log_debug("Skipping files with latest timestamp because their modification date is not smaller than the minimum reliable timestamp: %lu ms >= %lu ms",
- toUnixTime(latest_listed_entry_timestamp_this_cycle),
- toUnixTime(minimum_reliable_timestamp));
+ logger_->log_debug("Skipping files with latest timestamp because their modification date is not smaller than the minimum reliable timestamp: {} >= {}",
+ latest_listed_entry_timestamp_this_cycle,
+ minimum_reliable_timestamp);
ordered_files.erase(*latest_listed_entry_timestamp_this_cycle);
}
}
@@ -562,7 +560,7 @@ void ListSFTP::listByTrackingTimestamps(
if (createAndTransferFlowFileFromChild(session, hostname, port, username, file)) {
flow_files_created++;
} else {
- logger_->log_error("Failed to emit FlowFile for \"%s\"", file.filename.generic_string());
+ logger_->log_error("Failed to emit FlowFile for \"{}\"", file.filename.generic_string());
context->yield();
return;
}
@@ -667,7 +665,7 @@ bool ListSFTP::updateFromTrackingEntitiesCache(const std::shared_ptr<core::Proce
std::forward_as_tuple(name),
std::forward_as_tuple(timestamp, size));
} catch (...) {
- logger_->log_error("State for entity \"%s\" is missing or invalid, skipping", name);
+ logger_->log_error("State for entity \"{}\" is missing or invalid, skipping", name);
continue;
}
}
@@ -678,10 +676,10 @@ bool ListSFTP::updateFromTrackingEntitiesCache(const std::shared_ptr<core::Proce
state_remote_path != remote_path) {
logger_->log_error(
"Processor state was persisted with different settings than the current ones, ignoring. "
- "Listing Strategy: \"%s\" vs. \"%s\", "
- "Hostname: \"%s\" vs. \"%s\", "
- "Username: \"%s\" vs. \"%s\", "
- "Remote Path: \"%s\" vs. \"%s\"",
+ "Listing Strategy: \"{}\" vs. \"{}\", "
+ "Hostname: \"{}\" vs. \"{}\", "
+ "Username: \"{}\" vs. \"{}\", "
+ "Remote Path: \"{}\" vs. \"{}\"",
state_listing_strategy, listing_strategy_,
state_hostname, hostname,
state_username, username,
@@ -721,7 +719,7 @@ void ListSFTP::listByTrackingEntities(
/* Skip files not in the tracking window */
for (auto it = files.begin(); it != files.end(); ) {
if (it->attrs.mtime * 1000 < min_timestamp_to_list) {
- logger_->log_trace("Skipping \"%s\" because it has an older timestamp than the minimum timestamp to list: %lu < %lu",
+ logger_->log_trace("Skipping \"{}\" because it has an older timestamp than the minimum timestamp to list: {} < {}",
it->getPath(), it->attrs.mtime * 1000, min_timestamp_to_list);
it = files.erase(it);
} else {
@@ -743,12 +741,12 @@ void ListSFTP::listByTrackingEntities(
[&](const Child& child) {
auto already_listed_it = already_listed_entities_.find(child.getPath());
if (already_listed_it == already_listed_entities_.end()) {
- logger_->log_trace("Found new file \"%s\"", child.getPath());
+ logger_->log_trace("Found new file \"{}\"", child.getPath());
return true;
}
if (child.attrs.mtime * 1000 > already_listed_it->second.timestamp) {
- logger_->log_trace("Found file \"%s\" with newer timestamp: %lu -> %lu",
+ logger_->log_trace("Found file \"{}\" with newer timestamp: {} -> {}",
child.getPath(),
already_listed_it->second.timestamp,
child.attrs.mtime * 1000);
@@ -756,14 +754,14 @@ void ListSFTP::listByTrackingEntities(
}
if (child.attrs.filesize != already_listed_it->second.size) {
- logger_->log_trace("Found file \"%s\" with different size: %lu -> %lu",
+ logger_->log_trace("Found file \"{}\" with different size: {} -> {}",
child.getPath(),
already_listed_it->second.size,
child.attrs.filesize);
return true;
}
- logger_->log_trace("Skipping file \"%s\" because it has not changed", child.getPath());
+ logger_->log_trace("Skipping file \"{}\" because it has not changed", child.getPath());
return false;
});
@@ -789,7 +787,7 @@ void ListSFTP::listByTrackingEntities(
for (const auto& updated_entity : updated_entities) {
/* Create the FlowFile for this path */
if (!createAndTransferFlowFileFromChild(session, hostname, port, username, updated_entity)) {
- logger_->log_error("Failed to emit FlowFile for \"%s\"", updated_entity.getPath());
+ logger_->log_error("Failed to emit FlowFile for \"{}\"", updated_entity.getPath());
context->yield();
return;
}
@@ -907,7 +905,7 @@ void ListSFTP::onTrigger(const std::shared_ptr<core::ProcessContext> &context, c
listByTrackingEntities(context, session, common_properties.hostname, common_properties.port,
common_properties.username, remote_path.generic_string(), entity_tracking_time_window, std::move(files));
} else {
- logger_->log_error("Unknown Listing Strategy: \"%s\"", listing_strategy_.c_str());
+ logger_->log_error("Unknown Listing Strategy: \"{}\"", listing_strategy_.c_str());
context->yield();
return;
}
diff --git a/extensions/sftp/processors/PutSFTP.cpp b/extensions/sftp/processors/PutSFTP.cpp
index f1275210b..8286e0f6f 100644
--- a/extensions/sftp/processors/PutSFTP.cpp
+++ b/extensions/sftp/processors/PutSFTP.cpp
@@ -145,7 +145,7 @@ bool PutSFTP::processOne(const std::shared_ptr<core::ProcessContext> &context, c
/* Reject zero-byte files if needed */
if (reject_zero_byte_ && flow_file->getSize() == 0U) {
- logger_->log_debug("Rejecting %s because it is zero bytes", filename.generic_string());
+ logger_->log_debug("Rejecting {} because it is zero bytes", filename.generic_string());
session->transfer(flow_file, Reject);
return true;
}
@@ -183,30 +183,30 @@ bool PutSFTP::processOne(const std::shared_ptr<core::ProcessContext> &context, c
LIBSSH2_SFTP_ATTRIBUTES attrs;
if (!client->stat(target_path, true /*follow_symlinks*/, attrs)) {
if (client->getLastError() != utils::SFTPError::FileDoesNotExist) {
- logger_->log_error("Failed to stat %s", target_path.c_str());
+ logger_->log_error("Failed to stat {}", target_path.c_str());
session->transfer(flow_file, Failure);
return true;
}
} else {
if ((attrs.flags & LIBSSH2_SFTP_ATTR_PERMISSIONS) && LIBSSH2_SFTP_S_ISDIR(attrs.permissions)) {
- logger_->log_error("Rejecting %s because a directory with the same name already exists", filename.c_str());
+ logger_->log_error("Rejecting {} because a directory with the same name already exists", filename.c_str());
session->transfer(flow_file, Reject);
put_connection_back_to_cache();
return true;
}
- logger_->log_debug("Found file with the same name as the target file: %s", filename.c_str());
+ logger_->log_debug("Found file with the same name as the target file: {}", filename.c_str());
if (conflict_resolution_ == CONFLICT_RESOLUTION_IGNORE) {
- logger_->log_debug("Routing %s to SUCCESS despite a file with the same name already existing", filename.c_str());
+ logger_->log_debug("Routing {} to SUCCESS despite a file with the same name already existing", filename.c_str());
session->transfer(flow_file, Success);
put_connection_back_to_cache();
return true;
} else if (conflict_resolution_ == CONFLICT_RESOLUTION_REJECT) {
- logger_->log_debug("Routing %s to REJECT because a file with the same name already exists", filename.c_str());
+ logger_->log_debug("Routing {} to REJECT because a file with the same name already exists", filename.c_str());
session->transfer(flow_file, Reject);
put_connection_back_to_cache();
return true;
} else if (conflict_resolution_ == CONFLICT_RESOLUTION_FAIL) {
- logger_->log_debug("Routing %s to FAILURE because a file with the same name already exists", filename.c_str());
+ logger_->log_debug("Routing {} to FAILURE because a file with the same name already exists", filename.c_str());
session->transfer(flow_file, Failure);
put_connection_back_to_cache();
return true;
@@ -221,17 +221,17 @@ bool PutSFTP::processOne(const std::shared_ptr<core::ProcessContext> &context, c
unique_name_generated = true;
break;
} else {
- logger_->log_error("Failed to stat %s", possible_resolved_path.c_str());
+ logger_->log_error("Failed to stat {}", possible_resolved_path.c_str());
session->transfer(flow_file, Failure);
return true;
}
}
}
if (unique_name_generated) {
- logger_->log_debug("Resolved %s to %s", filename.generic_string(), possible_resolved_filename);
+ logger_->log_debug("Resolved {} to {}", filename.generic_string(), possible_resolved_filename);
resolved_filename = std::move(possible_resolved_filename);
} else {
- logger_->log_error("Rejecting %s because a unique name could not be determined after 99 attempts", filename.c_str());
+ logger_->log_error("Rejecting {} because a unique name could not be determined after 99 attempts", filename.c_str());
session->transfer(flow_file, Reject);
put_connection_back_to_cache();
return true;
@@ -256,7 +256,7 @@ bool PutSFTP::processOne(const std::shared_ptr<core::ProcessContext> &context, c
put_connection_back_to_cache();
return true;
default:
- logger_->log_error("Unknown createDirectoryHierarchy result: %hhu", static_cast<uint8_t>(res));
+ logger_->log_error("Unknown createDirectoryHierarchy result: {}", magic_enum::enum_underlying(res));
context->yield();
return false;
}
@@ -273,7 +273,7 @@ bool PutSFTP::processOne(const std::shared_ptr<core::ProcessContext> &context, c
}
std::string final_target_path = (remote_path / resolved_filename).generic_string();
- logger_->log_debug("The target path is %s, final target path is %s", target_path.c_str(), final_target_path.c_str());
+ logger_->log_debug("The target path is {}, final target path is {}", target_path.c_str(), final_target_path.c_str());
try {
session->read(flow_file, [&client, &target_path, this](const std::shared_ptr<io::InputStream>& stream) {
@@ -286,7 +286,7 @@ bool PutSFTP::processOne(const std::shared_ptr<core::ProcessContext> &context, c
return gsl::narrow<int64_t>(stream->size());
});
} catch (const utils::SFTPException& ex) {
- logger_->log_debug(ex.what());
+ logger_->log_debug("{}", ex.what());
session->transfer(flow_file, Failure);
return true;
}
@@ -294,9 +294,9 @@ bool PutSFTP::processOne(const std::shared_ptr<core::ProcessContext> &context, c
/* Move file to its final place */
if (target_path != final_target_path) {
if (!client->rename(target_path.generic_string(), final_target_path, conflict_resolution_ == CONFLICT_RESOLUTION_REPLACE /*overwrite*/)) {
- logger_->log_error("Failed to move temporary file %s to final path %s", target_path.generic_string(), final_target_path);
+ logger_->log_error("Failed to move temporary file {} to final path {}", target_path.generic_string(), final_target_path);
if (!client->removeFile(target_path.generic_string())) {
- logger_->log_error("Failed to remove temporary file %s", target_path.generic_string());
+ logger_->log_error("Failed to remove temporary file {}", target_path.generic_string());
}
session->transfer(flow_file, Failure);
return true;
@@ -334,7 +334,7 @@ bool PutSFTP::processOne(const std::shared_ptr<core::ProcessContext> &context, c
}
if (!client->setAttributes(final_target_path, attrs)) {
/* This is not fatal, just log a warning */
- logger_->log_warn("Failed to set file attributes for %s", target_path.generic_string());
+ logger_->log_warn("Failed to set file attributes for {}", target_path.generic_string());
}
}
diff --git a/extensions/sftp/processors/SFTPProcessorBase.cpp b/extensions/sftp/processors/SFTPProcessorBase.cpp
index 40dceb95a..5f2ade616 100644
--- a/extensions/sftp/processors/SFTPProcessorBase.cpp
+++ b/extensions/sftp/processors/SFTPProcessorBase.cpp
@@ -115,7 +115,7 @@ bool SFTPProcessorBase::parseCommonPropertiesOnTrigger(const std::shared_ptr<cor
if (!core::Property::StringToInt(value, port_tmp) ||
port_tmp <= std::numeric_limits<uint16_t>::min() ||
port_tmp > std::numeric_limits<uint16_t>::max()) {
- logger_->log_error("Port attribute \"%s\" is invalid", value);
+ logger_->log_error("Port attribute \"{}\" is invalid", value);
return false;
} else {
common_properties.port = static_cast<uint16_t>(port_tmp);
@@ -135,7 +135,7 @@ bool SFTPProcessorBase::parseCommonPropertiesOnTrigger(const std::shared_ptr<cor
if (!core::Property::StringToInt(value, port_tmp) ||
port_tmp <= std::numeric_limits<uint16_t>::min() ||
port_tmp > std::numeric_limits<uint16_t>::max()) {
- logger_->log_error("Proxy Port attribute \"%s\" is invalid", value);
+ logger_->log_error("Proxy Port attribute \"{}\" is invalid", value);
return false;
} else {
common_properties.proxy_port = static_cast<uint16_t>(port_tmp);
@@ -165,7 +165,7 @@ std::unique_ptr<utils::SFTPClient> SFTPProcessorBase::getConnectionFromCache(con
return nullptr;
}
- logger_->log_debug("Removing %s@%s:%hu from SFTP connection pool",
+ logger_->log_debug("Removing {}@{}:{} from SFTP connection pool",
key.username,
key.hostname,
key.port);
@@ -187,7 +187,7 @@ void SFTPProcessorBase::addConnectionToCache(const SFTPProcessorBase::Connection
while (connections_.size() >= SFTPProcessorBase::CONNECTION_CACHE_MAX_SIZE) {
const auto& lru_key = lru_.back();
- logger_->log_debug("SFTP connection pool is full, removing %s@%s:%hu",
+ logger_->log_debug("SFTP connection pool is full, removing {}@{}:{}",
lru_key.username,
lru_key.hostname,
lru_key.port);
@@ -195,7 +195,7 @@ void SFTPProcessorBase::addConnectionToCache(const SFTPProcessorBase::Connection
lru_.pop_back();
}
- logger_->log_debug("Adding %s@%s:%hu to SFTP connection pool",
+ logger_->log_debug("Adding {}@{}:{} to SFTP connection pool",
key.username,
key.hostname,
key.port);
@@ -223,7 +223,7 @@ void SFTPProcessorBase::keepaliveThreadFunc() {
for (auto &connection : connections_) {
int seconds_to_next = 0;
if (connection.second->sendKeepAliveIfNeeded(seconds_to_next)) {
- logger_->log_debug("Sent keepalive to %s@%s:%hu if needed, next keepalive in %d s",
+ logger_->log_debug("Sent keepalive to {}@{}:{} if needed, next keepalive in {} s",
connection.first.username,
connection.first.hostname,
connection.first.port,
@@ -232,7 +232,7 @@ void SFTPProcessorBase::keepaliveThreadFunc() {
min_wait = seconds_to_next;
}
} else {
- logger_->log_debug("Failed to send keepalive to %s@%s:%hu",
+ logger_->log_debug("Failed to send keepalive to {}@{}:{}",
connection.first.username,
connection.first.hostname,
connection.first.port);
@@ -244,7 +244,7 @@ void SFTPProcessorBase::keepaliveThreadFunc() {
min_wait = 1;
}
- logger_->log_trace("Keepalive thread is going to sleep for %d s", min_wait);
+ logger_->log_trace("Keepalive thread is going to sleep for {} s", min_wait);
keepalive_cv_.wait_for(lock, std::chrono::seconds(min_wait), [this] {
return !running_;
});
@@ -342,15 +342,15 @@ SFTPProcessorBase::CreateDirectoryHierarchyError SFTPProcessorBase::createDirect
LIBSSH2_SFTP_ATTRIBUTES attrs;
if (!client.stat(remote_path, true /*follow_symlinks*/, attrs)) {
if (client.getLastError() != utils::SFTPError::FileDoesNotExist) {
- logger_->log_error("Failed to stat %s", remote_path.c_str());
+ logger_->log_error("Failed to stat {}", remote_path.c_str());
}
should_create_directory = true;
} else {
if (attrs.flags & LIBSSH2_SFTP_ATTR_PERMISSIONS && !LIBSSH2_SFTP_S_ISDIR(attrs.permissions)) {
- logger_->log_error("Remote path %s is not a directory", remote_path.c_str());
+ logger_->log_error("Remote path {} is not a directory", remote_path.c_str());
return CreateDirectoryHierarchyError::CREATE_DIRECTORY_HIERARCHY_ERROR_NOT_A_DIRECTORY;
}
- logger_->log_debug("Found remote directory %s", remote_path.c_str());
+ logger_->log_debug("Found remote directory {}", remote_path.c_str());
}
}
if (should_create_directory) {
@@ -360,18 +360,18 @@ SFTPProcessorBase::CreateDirectoryHierarchyError SFTPProcessorBase::createDirect
if (!client.stat(remote_path, true /*follow_symlinks*/, attrs)) {
auto last_error = client.getLastError();
if (last_error == utils::SFTPError::FileDoesNotExist) {
- logger_->log_error("Could not find remote directory %s after creating it", remote_path.c_str());
+ logger_->log_error("Could not find remote directory {} after creating it", remote_path.c_str());
return CreateDirectoryHierarchyError::CREATE_DIRECTORY_HIERARCHY_ERROR_NOT_FOUND;
} else if (last_error == utils::SFTPError::PermissionDenied) {
- logger_->log_error("Permission denied when reading remote directory %s after creating it", remote_path.c_str());
+ logger_->log_error("Permission denied when reading remote directory {} after creating it", remote_path.c_str());
return CreateDirectoryHierarchyError::CREATE_DIRECTORY_HIERARCHY_ERROR_PERMISSION_DENIED;
} else {
- logger_->log_error("Failed to stat %s", remote_path.c_str());
+ logger_->log_error("Failed to stat {}", remote_path.c_str());
return CreateDirectoryHierarchyError::CREATE_DIRECTORY_HIERARCHY_ERROR_STAT_FAILED;
}
} else {
if ((attrs.flags & LIBSSH2_SFTP_ATTR_PERMISSIONS) && !LIBSSH2_SFTP_S_ISDIR(attrs.permissions)) {
- logger_->log_error("Remote path %s is not a directory", remote_path.c_str());
+ logger_->log_error("Remote path {} is not a directory", remote_path.c_str());
return CreateDirectoryHierarchyError::CREATE_DIRECTORY_HIERARCHY_ERROR_NOT_A_DIRECTORY;
}
}
diff --git a/extensions/sftp/tests/tools/SFTPTestServer.cpp b/extensions/sftp/tests/tools/SFTPTestServer.cpp
index 9d1f1d0f7..387be14cd 100644
--- a/extensions/sftp/tests/tools/SFTPTestServer.cpp
+++ b/extensions/sftp/tests/tools/SFTPTestServer.cpp
@@ -69,7 +69,7 @@ bool SFTPTestServer::start() {
/* Delete possible previous port.txt */
port_file_path_ = working_directory_ / "port.txt";
if (!port_file_path_.empty()) {
- logger_->log_debug("Deleting port file %s", port_file_path_.c_str());
+ logger_->log_debug("Deleting port file {}", port_file_path_.c_str());
::unlink(port_file_path_.c_str());
}
@@ -90,7 +90,7 @@ bool SFTPTestServer::start() {
std::cerr << "Failed to start server, errno: " << strerror(errno) << std::endl;
exit(-1);
} else if (pid < 0) {
- logger_->log_error("Failed to fork, error: %s", strerror(errno));
+ logger_->log_error("Failed to fork, error: {}", strerror(errno));
return false;
} else {
server_pid_ = pid;
@@ -103,11 +103,11 @@ bool SFTPTestServer::start() {
if (port_file >> port) {
port_ = port;
started_ = true;
- logger_->log_debug("Found port file after %zu seconds", i);
+ logger_->log_debug("Found port file after {} seconds", i);
return true;
}
}
- logger_->log_debug("Could not find port file after %zu seconds", i);
+ logger_->log_debug("Could not find port file after {} seconds", i);
std::this_thread::sleep_for(std::chrono::seconds(1));
}
@@ -125,17 +125,17 @@ bool SFTPTestServer::stop() {
#else
if (server_pid_ != -1) {
if (::kill(server_pid_, SIGTERM) != 0) {
- logger_->log_error("Failed to kill child process, error: %s", strerror(errno));
+ logger_->log_error("Failed to kill child process, error: {}", strerror(errno));
return false;
}
int wstatus;
if (::waitpid(server_pid_, &wstatus, 0) == -1) {
- logger_->log_error("Failed to waitpid for child process, error: %s", strerror(errno));
+ logger_->log_error("Failed to waitpid for child process, error: {}", strerror(errno));
return false;
}
}
if (!port_file_path_.empty()) {
- logger_->log_debug("Deleting port file %s", port_file_path_.c_str());
+ logger_->log_debug("Deleting port file {}", port_file_path_);
::unlink(port_file_path_.c_str());
}
#endif
diff --git a/extensions/smb/FetchSmb.cpp b/extensions/smb/FetchSmb.cpp
index 19c7a848f..fd29cc27f 100644
--- a/extensions/smb/FetchSmb.cpp
+++ b/extensions/smb/FetchSmb.cpp
@@ -47,7 +47,7 @@ void FetchSmb::onTrigger(const std::shared_ptr<core::ProcessContext>& context, c
gsl_Expects(context && session && smb_connection_controller_service_);
if (auto connection_error = smb_connection_controller_service_->validateConnection()) {
- logger_->log_error("Couldn't establish connection to the specified network location due to %s", connection_error.message());
+ logger_->log_error("Couldn't establish connection to the specified network location due to {}", connection_error.message());
context->yield();
return;
}
diff --git a/extensions/smb/ListSmb.cpp b/extensions/smb/ListSmb.cpp
index 99fb8f776..f635ce918 100644
--- a/extensions/smb/ListSmb.cpp
+++ b/extensions/smb/ListSmb.cpp
@@ -94,7 +94,7 @@ std::shared_ptr<core::FlowFile> ListSmb::createFlowFile(core::ProcessSession& se
session.putAttribute(flow_file, LastModifiedTime.name, getDateTimeStr(windows_file_times->last_write_time));
session.putAttribute(flow_file, LastAccessTime.name, getDateTimeStr(windows_file_times->last_access_time));
} else {
- logger_->log_warn("Could not get file attributes due to %s", windows_file_times.error().message());
+ logger_->log_warn("Could not get file attributes due to {}", windows_file_times.error().message());
}
session.putAttribute(flow_file, ServiceLocation.name, smb_connection_controller_service_->getPath().string());
@@ -107,7 +107,7 @@ void ListSmb::onTrigger(const std::shared_ptr<core::ProcessContext> &context, co
gsl_Expects(context && session && smb_connection_controller_service_);
if (auto connection_error = smb_connection_controller_service_->validateConnection()) {
- logger_->log_error("Couldn't establish connection to the specified network location due to %s", connection_error.message());
+ logger_->log_error("Couldn't establish connection to the specified network location due to {}", connection_error.message());
context->yield();
return;
}
@@ -134,7 +134,7 @@ void ListSmb::onTrigger(const std::shared_ptr<core::ProcessContext> &context, co
state_manager_->storeState(latest_listing_state);
if (files_listed == 0) {
- logger_->log_debug("No new files were found in input directory '%s' to list", dir.string());
+ logger_->log_debug("No new files were found in input directory '{}' to list", dir);
context->yield();
}
}
diff --git a/extensions/smb/PutSmb.cpp b/extensions/smb/PutSmb.cpp
index b2ad64986..8489b8ce0 100644
--- a/extensions/smb/PutSmb.cpp
+++ b/extensions/smb/PutSmb.cpp
@@ -46,7 +46,7 @@ void PutSmb::onTrigger(core::ProcessContext* context, core::ProcessSession* sess
gsl_Expects(context && session && smb_connection_controller_service_);
if (auto connection_error = smb_connection_controller_service_->validateConnection()) {
- logger_->log_error("Couldn't establish connection to the specified network location due to %s", connection_error.message());
+ logger_->log_error("Couldn't establish connection to the specified network location due to {}", connection_error.message());
context->yield();
return;
}
@@ -60,7 +60,7 @@ void PutSmb::onTrigger(core::ProcessContext* context, core::ProcessSession* sess
auto full_file_path = getFilePath(*context, flow_file);
if (utils::file::exists(full_file_path)) {
- logger_->log_warn("Destination file %s exists; applying Conflict Resolution Strategy: %s", full_file_path.string(), std::string(magic_enum::enum_name(conflict_resolution_strategy_)));
+ logger_->log_warn("Destination file {} exists; applying Conflict Resolution Strategy: {}", full_file_path, magic_enum::enum_name(conflict_resolution_strategy_));
if (conflict_resolution_strategy_ == FileExistsResolutionStrategy::fail) {
session->transfer(flow_file, Failure);
return;
@@ -71,7 +71,7 @@ void PutSmb::onTrigger(core::ProcessContext* context, core::ProcessSession* sess
}
if (!utils::file::exists(full_file_path.parent_path()) && create_missing_dirs_) {
- logger_->log_debug("Destination directory does not exist; will attempt to create: %s", full_file_path.parent_path().string());
+ logger_->log_debug("Destination directory does not exist; will attempt to create: {}", full_file_path.parent_path());
utils::file::create_dir(full_file_path.parent_path(), true);
}
@@ -80,7 +80,7 @@ void PutSmb::onTrigger(core::ProcessContext* context, core::ProcessSession* sess
utils::FileWriterCallback file_writer_callback(full_file_path);
auto read_result = session->read(flow_file, std::ref(file_writer_callback));
if (io::isError(read_result)) {
- logger_->log_error("Failed to write to %s", full_file_path.string());
+ logger_->log_error("Failed to write to {}", full_file_path);
success = false;
} else {
success = file_writer_callback.commit();
diff --git a/extensions/sql/data/SociConnectors.cpp b/extensions/sql/data/SociConnectors.cpp
index 58f81ceec..7b6c371e4 100644
--- a/extensions/sql/data/SociConnectors.cpp
+++ b/extensions/sql/data/SociConnectors.cpp
@@ -123,7 +123,7 @@ std::unique_ptr<Rowset> SociStatement::execute(const std::vector<std::string>& a
}
return std::make_unique<SociRowset>(stmt);
} catch (const soci::soci_error& ex) {
- logger_->log_error("Error while evaluating query, type: %s, what: %s", typeid(ex).name(), ex.what());
+ logger_->log_error("Error while evaluating query, type: {}, what: {}", typeid(ex).name(), ex.what());
if (ex.get_error_category() == soci::soci_error::error_category::connection_error
|| ex.get_error_category() == soci::soci_error::error_category::system_error) {
throw sql::ConnectionError(ex.get_error_message());
@@ -131,7 +131,7 @@ std::unique_ptr<Rowset> SociStatement::execute(const std::vector<std::string>& a
throw sql::StatementError(ex.get_error_message());
}
} catch (const std::exception& ex) {
- logger_->log_error("Error while evaluating query, type: %s, what: %s", typeid(ex).name(), ex.what());
+ logger_->log_error("Error while evaluating query, type: {}, what: {}", typeid(ex).name(), ex.what());
throw sql::StatementError(ex.what());
}
}
diff --git a/extensions/sql/processors/ExecuteSQL.cpp b/extensions/sql/processors/ExecuteSQL.cpp
index 69ac57c8e..5c8cfb96c 100644
--- a/extensions/sql/processors/ExecuteSQL.cpp
+++ b/extensions/sql/processors/ExecuteSQL.cpp
@@ -76,7 +76,7 @@ void ExecuteSQL::processOnTrigger(core::ProcessContext& context, core::ProcessSe
try {
row_set = connection_->prepareStatement(query)->execute(collectArguments(input_flow_file));
} catch (const sql::StatementError& ex) {
- logger_->log_error("Error while executing sql statement: %s", ex.what());
+ logger_->log_error("Error while executing sql statement: {}", ex.what());
session.transfer(input_flow_file, Failure);
return;
}
diff --git a/extensions/sql/processors/PutSQL.cpp b/extensions/sql/processors/PutSQL.cpp
index b9c02766b..abdf74bf6 100644
--- a/extensions/sql/processors/PutSQL.cpp
+++ b/extensions/sql/processors/PutSQL.cpp
@@ -61,7 +61,7 @@ void PutSQL::processOnTrigger(core::ProcessContext& context, core::ProcessSessio
connection_->prepareStatement(sql_statement)->execute(collectArguments(flow_file));
session.transfer(flow_file, Success);
} catch (const sql::StatementError& ex) {
- logger_->log_error("Error while executing SQL statement in flow file: %s", ex.what());
+ logger_->log_error("Error while executing SQL statement in flow file: {}", ex.what());
session.transfer(flow_file, Failure);
}
}
diff --git a/extensions/sql/processors/QueryDatabaseTable.cpp b/extensions/sql/processors/QueryDatabaseTable.cpp
index a253a492c..9049cdd78 100644
--- a/extensions/sql/processors/QueryDatabaseTable.cpp
+++ b/extensions/sql/processors/QueryDatabaseTable.cpp
@@ -92,7 +92,7 @@ void QueryDatabaseTable::processOnSchedule(core::ProcessContext& context) {
void QueryDatabaseTable::processOnTrigger(core::ProcessContext& /*context*/, core::ProcessSession& session) {
const auto& selectQuery = buildSelectQuery();
- logger_->log_info("QueryDatabaseTable: selectQuery: '%s'", selectQuery.c_str());
+ logger_->log_info("QueryDatabaseTable: selectQuery: '{}'", selectQuery.c_str());
auto statement = connection_->prepareStatement(selectQuery);
@@ -135,7 +135,7 @@ bool QueryDatabaseTable::loadMaxValuesFromStoredState(const std::unordered_map<s
return false;
}
if (state.at(TABLENAME_KEY) != table_name_) {
- logger_->log_info("Querying new table \"%s\", resetting state.", table_name_);
+ logger_->log_info("Querying new table \"{}\", resetting state.", table_name_);
return false;
}
for (auto& elem : state) {
@@ -145,14 +145,14 @@ bool QueryDatabaseTable::loadMaxValuesFromStoredState(const std::unordered_map<s
if (std::find(max_value_columns_.begin(), max_value_columns_.end(), column_name) != max_value_columns_.end()) {
new_max_values.emplace(column_name, elem.second);
} else {
- logger_->log_info("State contains obsolete maximum-value column \"%s\", resetting state.", column_name.str());
+ logger_->log_info("State contains obsolete maximum-value column \"{}\", resetting state.", column_name.str());
return false;
}
}
}
for (auto& column : max_value_columns_) {
if (new_max_values.find(column) == new_max_values.end()) {
- logger_->log_info("New maximum-value column \"%s\" specified, resetting state.", column.str());
+ logger_->log_info("New maximum-value column \"{}\" specified, resetting state.", column.str());
return false;
}
}
@@ -181,7 +181,7 @@ void QueryDatabaseTable::initializeMaxValues(core::ProcessContext &context) {
void QueryDatabaseTable::loadMaxValuesFromDynamicProperties(core::ProcessContext &context) {
const auto dynamic_prop_keys = context.getDynamicPropertyKeys();
- logger_->log_info("Received %zu dynamic properties", dynamic_prop_keys.size());
+ logger_->log_info("Received {} dynamic properties", dynamic_prop_keys.size());
for (const auto& key : dynamic_prop_keys) {
if (!utils::StringUtils::startsWith(key, InitialMaxValueDynamicPropertyPrefix)) {
@@ -190,7 +190,7 @@ void QueryDatabaseTable::loadMaxValuesFromDynamicProperties(core::ProcessContext
sql::SQLColumnIdentifier column_name(key.substr(InitialMaxValueDynamicPropertyPrefix.length()));
auto it = max_values_.find(column_name);
if (it == max_values_.end()) {
- logger_->log_warn("Initial maximum value specified for column \"%s\", which is not specified as a Maximum-value Column. Ignoring.", column_name.str());
+ logger_->log_warn("Initial maximum value specified for column \"{}\", which is not specified as a Maximum-value Column. Ignoring.", column_name.str());
continue;
}
// do not overwrite existing max value
@@ -200,7 +200,7 @@ void QueryDatabaseTable::loadMaxValuesFromDynamicProperties(core::ProcessContext
std::string value;
if (context.getDynamicProperty(key, value) && !value.empty()) {
it->second = value;
- logger_->log_info("Setting initial maximum value of %s to %s", column_name.str(), value);
+ logger_->log_info("Setting initial maximum value of {} to {}", column_name.str(), value);
}
}
}
diff --git a/extensions/sql/processors/SQLProcessor.cpp b/extensions/sql/processors/SQLProcessor.cpp
index 77278a7aa..caa2732f4 100644
--- a/extensions/sql/processors/SQLProcessor.cpp
+++ b/extensions/sql/processors/SQLProcessor.cpp
@@ -53,7 +53,7 @@ void SQLProcessor::onTrigger(const std::shared_ptr<core::ProcessContext>& contex
}
processOnTrigger(*context, *session);
} catch (const sql::ConnectionError& ex) {
- logger_->log_error("Connection error: %s", ex.what());
+ logger_->log_error("Connection error: {}", ex.what());
// try to reconnect next time
connection_.reset();
throw;
diff --git a/extensions/standard-processors/controllers/InMemoryKeyValueStorage.cpp b/extensions/standard-processors/controllers/InMemoryKeyValueStorage.cpp
index 55bc50dca..6be29c8b4 100644
--- a/extensions/standard-processors/controllers/InMemoryKeyValueStorage.cpp
+++ b/extensions/standard-processors/controllers/InMemoryKeyValueStorage.cpp
@@ -61,7 +61,7 @@ bool InMemoryKeyValueStorage::update(const std::string& key, const std::function
return false;
}
} catch (const std::exception& e) {
- logger_->log_error("update_func failed with an exception: %s", e.what());
+ logger_->log_error("update_func failed with an exception: {}", e.what());
return false;
} catch (...) {
logger_->log_error("update_func failed with an exception");
diff --git a/extensions/standard-processors/controllers/PersistentMapStateStorage.cpp b/extensions/standard-processors/controllers/PersistentMapStateStorage.cpp
index 2d14ceffb..0765fdf78 100644
--- a/extensions/standard-processors/controllers/PersistentMapStateStorage.cpp
+++ b/extensions/standard-processors/controllers/PersistentMapStateStorage.cpp
@@ -83,7 +83,7 @@ bool PersistentMapStateStorage::parseLine(const std::string& line, std::string&
current << '=';
break;
default:
- logger_->log_error(R"(Invalid escape sequence in "%s": "\%c")", line.c_str(), c);
+ logger_->log_error(R"(Invalid escape sequence in "{}": "\{}")", line.c_str(), c);
return false;
}
in_escape_sequence = false;
@@ -92,7 +92,7 @@ bool PersistentMapStateStorage::parseLine(const std::string& line, std::string&
in_escape_sequence = true;
} else if (c == '=') {
if (key_complete) {
- logger_->log_error(R"(Unterminated '=' in line "%s")", line.c_str());
+ logger_->log_error(R"(Unterminated '=' in line "{}")", line.c_str());
return false;
} else {
key_complete = true;
@@ -103,16 +103,16 @@ bool PersistentMapStateStorage::parseLine(const std::string& line, std::string&
}
}
if (in_escape_sequence) {
- logger_->log_error("Unterminated escape sequence in \"%s\"", line.c_str());
+ logger_->log_error("Unterminated escape sequence in \"{}\"", line.c_str());
return false;
}
if (!key_complete) {
- logger_->log_error("Key not found in \"%s\"", line.c_str());
+ logger_->log_error("Key not found in \"{}\"", line.c_str());
return false;
}
key = key_ss.str();
if (key.empty()) {
- logger_->log_error(R"(Line with empty key found in "%s": "%s")", file_.c_str(), line.c_str());
+ logger_->log_error(R"(Line with empty key found in "{}": "{}")", file_.c_str(), line.c_str());
return false;
}
value = value_ss.str();
@@ -132,10 +132,10 @@ void PersistentMapStateStorage::onEnable() {
}
const auto always_persist = getProperty<bool>(AlwaysPersist).value_or(false);
- logger_->log_info("Always Persist property: %s", always_persist ? "true" : "false");
+ logger_->log_info("Always Persist property: {}", always_persist);
const auto auto_persistence_interval = getProperty<core::TimePeriodValue>(AutoPersistenceInterval).value_or(core::TimePeriodValue{}).getMilliseconds();
- logger_->log_info("Auto Persistence Interval property: %" PRId64 " ms", auto_persistence_interval.count());
+ logger_->log_info("Auto Persistence Interval property: {}", auto_persistence_interval);
if (!getProperty(File, file_)) {
logger_->log_error("Invalid or missing property: File");
@@ -205,7 +205,7 @@ bool PersistentMapStateStorage::persistNonVirtual() {
std::lock_guard<std::mutex> lock(mutex_);
std::ofstream ofs(file_);
if (!ofs.is_open()) {
- logger_->log_error("Failed to open file \"%s\" to store state", file_.c_str());
+ logger_->log_error("Failed to open file \"{}\" to store state", file_.c_str());
return false;
}
std::unordered_map<std::string, std::string> storage_copy;
@@ -226,7 +226,7 @@ bool PersistentMapStateStorage::load() {
std::lock_guard<std::mutex> lock(mutex_);
std::ifstream ifs(file_);
if (!ifs.is_open()) {
- logger_->log_debug("Failed to open file \"%s\" to load state", file_.c_str());
+ logger_->log_debug("Failed to open file \"{}\" to load state", file_.c_str());
return false;
}
std::unordered_map<std::string, std::string> map;
@@ -242,11 +242,11 @@ bool PersistentMapStateStorage::load() {
try {
format_version = std::stoi(value);
} catch (...) {
- logger_->log_error(R"(Invalid format version number found in "%s": "%s")", file_.c_str(), value.c_str());
+ logger_->log_error(R"(Invalid format version number found in "{}": "{}")", file_.c_str(), value.c_str());
return false;
}
if (format_version > FORMAT_VERSION) {
- logger_->log_error("\"%s\" has been serialized with a larger format version than currently known: %d > %d", file_.c_str(), format_version, FORMAT_VERSION);
+ logger_->log_error("\"{}\" has been serialized with a larger format version than currently known: {} > {}", file_.c_str(), format_version, FORMAT_VERSION);
return false;
}
} else {
@@ -255,7 +255,7 @@ bool PersistentMapStateStorage::load() {
}
storage_ = InMemoryKeyValueStorage{std::move(map)};
- logger_->log_debug("Loaded state from \"%s\"", file_.c_str());
+ logger_->log_debug("Loaded state from \"{}\"", file_.c_str());
return true;
}
diff --git a/extensions/standard-processors/processors/AttributesToJSON.cpp b/extensions/standard-processors/processors/AttributesToJSON.cpp
index 1a9e39af7..4db226b73 100644
--- a/extensions/standard-processors/processors/AttributesToJSON.cpp
+++ b/extensions/standard-processors/processors/AttributesToJSON.cpp
@@ -115,11 +115,11 @@ void AttributesToJSON::onTrigger(core::ProcessContext* /*context*/, core::Proces
auto json_data = buildAttributeJsonData(*flow_file->getAttributesPtr());
if (write_destination_ == attributes_to_json::WriteDestination::FLOWFILE_ATTRIBUTE) {
- logger_->log_debug("Writing the following attribute data to JSONAttributes attribute: %s", json_data);
+ logger_->log_debug("Writing the following attribute data to JSONAttributes attribute: {}", json_data);
session->putAttribute(flow_file, "JSONAttributes", json_data);
session->transfer(flow_file, Success);
} else {
- logger_->log_debug("Writing the following attribute data to flowfile: %s", json_data);
+ logger_->log_debug("Writing the following attribute data to flowfile: {}", json_data);
session->writeBuffer(flow_file, json_data);
session->transfer(flow_file, Success);
}
diff --git a/extensions/standard-processors/processors/DefragmentText.cpp b/extensions/standard-processors/processors/DefragmentText.cpp
index 0a04770fd..31b202a5d 100644
--- a/extensions/standard-processors/processors/DefragmentText.cpp
+++ b/extensions/standard-processors/processors/DefragmentText.cpp
@@ -44,13 +44,13 @@ void DefragmentText::onSchedule(core::ProcessContext* context, core::ProcessSess
if (auto max_buffer_age = context->getProperty(MaxBufferAge) | utils::andThen(&core::TimePeriodValue::fromString)) {
max_age_ = max_buffer_age->getMilliseconds();
setTriggerWhenEmpty(true);
- logger_->log_trace("The Buffer maximum age is configured to be %" PRId64 " ms", int64_t{max_buffer_age->getMilliseconds().count()});
+ logger_->log_trace("The Buffer maximum age is configured to be {}", max_buffer_age->getMilliseconds());
}
auto max_buffer_size = context->getProperty<core::DataSizeValue>(MaxBufferSize);
if (max_buffer_size.has_value() && max_buffer_size->getValue() > 0) {
max_size_ = max_buffer_size->getValue();
- logger_->log_trace("The Buffer maximum size is configured to be %" PRIu64 " B", max_buffer_size->getValue());
+ logger_->log_trace("The Buffer maximum size is configured to be {} B", max_buffer_size->getValue());
}
pattern_location_ = utils::parseEnumProperty<defragment_text::PatternLocation>(*context, PatternLoc);
@@ -58,7 +58,7 @@ void DefragmentText::onSchedule(core::ProcessContext* context, core::ProcessSess
std::string pattern_str;
if (context->getProperty(Pattern, pattern_str) && !pattern_str.empty()) {
pattern_ = utils::Regex(pattern_str);
- logger_->log_trace("The Pattern is configured to be %s", pattern_str);
+ logger_->log_trace("The Pattern is configured to be {}", pattern_str);
} else {
throw Exception(PROCESS_SCHEDULE_EXCEPTION, "Pattern property missing or invalid");
}
diff --git a/extensions/standard-processors/processors/ExecuteProcess.cpp b/extensions/standard-processors/processors/ExecuteProcess.cpp
index 6a3287d53..7a78ed1b9 100644
--- a/extensions/standard-processors/processors/ExecuteProcess.cpp
+++ b/extensions/standard-processors/processors/ExecuteProcess.cpp
@@ -54,7 +54,7 @@ void ExecuteProcess::onSchedule(core::ProcessContext* context, core::ProcessSess
}
if (auto batch_duration = context->getProperty<core::TimePeriodValue>(BatchDuration)) {
batch_duration_ = batch_duration->getMilliseconds();
- logger_->log_debug("Setting batch duration to %d milliseconds", batch_duration_.count());
+ logger_->log_debug("Setting batch duration to {}", batch_duration_);
}
if (context->getProperty(RedirectErrorStream, value)) {
redirect_error_stream_ = org::apache::nifi::minifi::utils::StringUtils::toBool(value).value_or(false);
@@ -118,7 +118,7 @@ void ExecuteProcess::readOutputInBatches(core::ProcessSession& session) {
if (num_read <= 0) {
break;
}
- logger_->log_debug("Execute Command Respond %zd", num_read);
+ logger_->log_debug("Execute Command Respond {}", num_read);
auto flow_file = session.create();
if (!flow_file) {
logger_->log_error("Flow file could not be created!");
@@ -157,7 +157,7 @@ void ExecuteProcess::readOutput(core::ProcessSession& session) {
while (num_read > 0) {
if (num_read == static_cast<ssize_t>(sizeof(buffer) - read_to_buffer)) {
// we reach the max buffer size
- logger_->log_debug("Execute Command Max Respond %zu", sizeof(buffer));
+ logger_->log_debug("Execute Command Max Respond {}", sizeof(buffer));
if (!writeToFlowFile(session, flow_file, buffer)) {
continue;
}
@@ -172,7 +172,7 @@ void ExecuteProcess::readOutput(core::ProcessSession& session) {
}
if (read_to_buffer > 0) {
- logger_->log_debug("Execute Command Respond %zu", read_to_buffer);
+ logger_->log_debug("Execute Command Respond {}", read_to_buffer);
// child exits and close the pipe
const auto buffer_span = gsl::make_span(buffer, read_to_buffer);
if (!writeToFlowFile(session, flow_file, buffer_span)) {
@@ -196,9 +196,9 @@ void ExecuteProcess::collectChildProcessOutput(core::ProcessSession& session) {
int status = 0;
wait(&status);
if (WIFEXITED(status)) {
- logger_->log_info("Execute Command Complete %s status %d pid %d", full_command_, WEXITSTATUS(status), pid_);
+ logger_->log_info("Execute Command Complete {} status {} pid {}", full_command_, WEXITSTATUS(status), pid_);
} else {
- logger_->log_info("Execute Command Complete %s status %d pid %d", full_command_, WTERMSIG(status), pid_);
+ logger_->log_info("Execute Command Complete {} status {} pid {}", full_command_, WTERMSIG(status), pid_);
}
close(pipefd_[0]);
@@ -217,7 +217,7 @@ void ExecuteProcess::onTrigger(core::ProcessContext *context, core::ProcessSessi
yield();
return;
}
- logger_->log_info("Execute Command %s", full_command_);
+ logger_->log_info("Execute Command {}", full_command_);
if (pipe(pipefd_) == -1) {
yield();
diff --git a/extensions/standard-processors/processors/ExtractText.cpp b/extensions/standard-processors/processors/ExtractText.cpp
index 1ad56ab50..b0629b5f7 100644
--- a/extensions/standard-processors/processors/ExtractText.cpp
+++ b/extensions/standard-processors/processors/ExtractText.cpp
@@ -142,7 +142,7 @@ int64_t ExtractText::ReadCallback::operator()(const std::shared_ptr<io::InputStr
workStr = matches.suffix();
}
} catch (const Exception &e) {
- logger_->log_error("%s error encountered when trying to construct regular expression from property (key: %s) value: %s",
+ logger_->log_error("{} error encountered when trying to construct regular expression from property (key: {}) value: {}",
e.what(), k, value);
continue;
}
diff --git a/extensions/standard-processors/processors/FetchFile.cpp b/extensions/standard-processors/processors/FetchFile.cpp
index 8b0e75005..f7e400611 100644
--- a/extensions/standard-processors/processors/FetchFile.cpp
+++ b/extensions/standard-processors/processors/FetchFile.cpp
@@ -77,14 +77,14 @@ bool FetchFile::moveWouldFailWithDestinationConflict(const std::filesystem::path
void FetchFile::executeMoveConflictStrategy(const std::filesystem::path& file_to_fetch_path, const std::filesystem::path& file_name) {
if (move_confict_strategy_ == fetch_file::MoveConflictStrategyOption::REPLACE_FILE) {
auto moved_path = getMoveAbsolutePath(file_name);
- logger_->log_debug("Due to conflict replacing file '%s' by the Move Completion Strategy", moved_path.string());
+ logger_->log_debug("Due to conflict replacing file '{}' by the Move Completion Strategy", moved_path);
std::filesystem::rename(file_to_fetch_path, moved_path);
} else if (move_confict_strategy_ == fetch_file::MoveConflictStrategyOption::RENAME) {
std::filesystem::path generated_filename{utils::IdGenerator::getIdGenerator()->generate().to_string().view()};
- logger_->log_debug("Due to conflict file '%s' is moved with generated name '%s' by the Move Completion Strategy", file_to_fetch_path.string(), generated_filename.string());
+ logger_->log_debug("Due to conflict file '{}' is moved with generated name '{}' by the Move Completion Strategy", file_to_fetch_path, generated_filename);
std::filesystem::rename(file_to_fetch_path, getMoveAbsolutePath(generated_filename));
} else if (move_confict_strategy_ == fetch_file::MoveConflictStrategyOption::KEEP_EXISTING) {
- logger_->log_debug("Due to conflict file '%s' is deleted by the Move Completion Strategy", file_to_fetch_path.string());
+ logger_->log_debug("Due to conflict file '{}' is deleted by the Move Completion Strategy", file_to_fetch_path);
std::filesystem::remove(file_to_fetch_path);
}
}
@@ -95,7 +95,7 @@ void FetchFile::processMoveCompletion(const std::filesystem::path& file_to_fetch
std::filesystem::create_directories(move_destination_directory_);
}
auto moved_path = getMoveAbsolutePath(file_name);
- logger_->log_debug("'%s' is moved to '%s' by the Move Completion Strategy", file_to_fetch_path.string(), moved_path.string());
+ logger_->log_debug("'{}' is moved to '{}' by the Move Completion Strategy", file_to_fetch_path, moved_path);
std::filesystem::rename(file_to_fetch_path, moved_path);
return;
}
@@ -108,11 +108,11 @@ void FetchFile::executeCompletionStrategy(const std::filesystem::path& file_to_f
if (completion_strategy_ == fetch_file::CompletionStrategyOption::MOVE_FILE) {
processMoveCompletion(file_to_fetch_path, file_name);
} else if (completion_strategy_ == fetch_file::CompletionStrategyOption::DELETE_FILE) {
- logger_->log_debug("File '%s' is deleted by the Delete Completion Strategy", file_to_fetch_path.string());
+ logger_->log_debug("File '{}' is deleted by the Delete Completion Strategy", file_to_fetch_path);
std::filesystem::remove(file_to_fetch_path);
}
} catch(const std::filesystem::filesystem_error& ex) {
- logger_->log_warn("Executing completion strategy failed due to filesystem error: %s", ex.what());
+ logger_->log_warn("Executing completion strategy failed due to filesystem error: {}", ex.what());
}
}
@@ -127,7 +127,7 @@ void FetchFile::onTrigger(const std::shared_ptr<core::ProcessContext> &context,
const auto file_to_fetch_path = getFileToFetch(*context, flow_file);
if (!std::filesystem::is_regular_file(file_to_fetch_path)) {
- utils::LogUtils::logWithLevel(logger_, log_level_when_file_not_found_, "File to fetch was not found: '%s'!", file_to_fetch_path.string());
+ logger_->log_with_level(utils::LogUtils::mapToLogLevel(log_level_when_file_not_found_), "File to fetch was not found: '{}'!", file_to_fetch_path);
session->transfer(flow_file, NotFound);
return;
}
@@ -138,7 +138,7 @@ void FetchFile::onTrigger(const std::shared_ptr<core::ProcessContext> &context,
context->getProperty(MoveDestinationDirectory, move_destination_directory, flow_file);
move_destination_directory_ = move_destination_directory;
if (moveWouldFailWithDestinationConflict(file_name)) {
- logger_->log_error("Move destination (%s) conflicts with an already existing file!", move_destination_directory_.string());
+ logger_->log_error("Move destination ({}) conflicts with an already existing file!", move_destination_directory_);
session->transfer(flow_file, Failure);
return;
}
@@ -146,14 +146,14 @@ void FetchFile::onTrigger(const std::shared_ptr<core::ProcessContext> &context,
try {
utils::FileReaderCallback callback(file_to_fetch_path);
session->write(flow_file, std::move(callback));
- logger_->log_debug("Fetching file '%s' successful!", file_to_fetch_path.string());
+ logger_->log_debug("Fetching file '{}' successful!", file_to_fetch_path);
session->transfer(flow_file, Success);
} catch (const utils::FileReaderCallbackIOError& io_error) {
if (io_error.error_code == EACCES) {
- utils::LogUtils::logWithLevel(logger_, log_level_when_permission_denied_, "Read permission denied for file '%s' to be fetched!", file_to_fetch_path.string());
+ logger_->log_with_level(utils::LogUtils::mapToLogLevel(log_level_when_permission_denied_), "Read permission denied for file '{}' to be fetched!", file_to_fetch_path);
session->transfer(flow_file, PermissionDenied);
} else {
- logger_->log_error("Fetching file '%s' failed! %s", file_to_fetch_path.string(), io_error.what());
+ logger_->log_error("Fetching file '{}' failed! {}", file_to_fetch_path, io_error.what());
session->transfer(flow_file, Failure);
}
return;
diff --git a/extensions/standard-processors/processors/GenerateFlowFile.cpp b/extensions/standard-processors/processors/GenerateFlowFile.cpp
index b00322181..ba204c561 100644
--- a/extensions/standard-processors/processors/GenerateFlowFile.cpp
+++ b/extensions/standard-processors/processors/GenerateFlowFile.cpp
@@ -59,11 +59,11 @@ void generateData(std::vector<char>& data, bool textData = false) {
void GenerateFlowFile::onSchedule(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::ProcessSessionFactory>& /*sessionFactory*/) {
if (context->getProperty(FileSize.name, fileSize_)) {
- logger_->log_trace("File size is configured to be %d", fileSize_);
+ logger_->log_trace("File size is configured to be {}", fileSize_);
}
if (context->getProperty(BatchSize.name, batchSize_)) {
- logger_->log_trace("Batch size is configured to be %d", batchSize_);
+ logger_->log_trace("Batch size is configured to be {}", batchSize_);
}
std::string value;
@@ -71,7 +71,7 @@ void GenerateFlowFile::onSchedule(const std::shared_ptr<core::ProcessContext> &c
textData_ = (value == GenerateFlowFile::DATA_FORMAT_TEXT);
}
if (context->getProperty(UniqueFlowFiles.name, uniqueFlowFile_)) {
- logger_->log_trace("Unique Flow files is configured to be %i", uniqueFlowFile_);
+ logger_->log_trace("Unique Flow files is configured to be {}", uniqueFlowFile_);
}
std::string custom_text;
diff --git a/extensions/standard-processors/processors/GetFile.cpp b/extensions/standard-processors/processors/GetFile.cpp
index 75b7d7cd9..0e248a4b7 100644
--- a/extensions/standard-processors/processors/GetFile.cpp
+++ b/extensions/standard-processors/processors/GetFile.cpp
@@ -88,7 +88,7 @@ void GetFile::onSchedule(core::ProcessContext *context, core::ProcessSessionFact
void GetFile::onTrigger(core::ProcessContext* /*context*/, core::ProcessSession* session) {
const bool is_dir_empty_before_poll = isListingEmpty();
- logger_->log_debug("Listing is %s before polling directory", is_dir_empty_before_poll ? "empty" : "not empty");
+ logger_->log_debug("Listing is {} before polling directory", is_dir_empty_before_poll ? "empty" : "not empty");
if (is_dir_empty_before_poll) {
if (request_.pollInterval == 0ms || (std::chrono::system_clock::now() - last_listing_time_.load()) > request_.pollInterval) {
performListing(request_);
@@ -97,7 +97,7 @@ void GetFile::onTrigger(core::ProcessContext* /*context*/, core::ProcessSession*
}
const bool is_dir_empty_after_poll = isListingEmpty();
- logger_->log_debug("Listing is %s after polling directory", is_dir_empty_after_poll ? "empty" : "not empty");
+ logger_->log_debug("Listing is {} after polling directory", is_dir_empty_after_poll ? "empty" : "not empty");
if (is_dir_empty_after_poll) {
yield();
return;
@@ -112,7 +112,7 @@ void GetFile::onTrigger(core::ProcessContext* /*context*/, core::ProcessSession*
}
void GetFile::getSingleFile(core::ProcessSession& session, const std::filesystem::path& file_path) const {
- logger_->log_info("GetFile process %s", file_path.string());
+ logger_->log_info("GetFile process {}", file_path);
auto flow_file = session.create();
gsl_Expects(flow_file);
@@ -127,11 +127,11 @@ void GetFile::getSingleFile(core::ProcessSession& session, const std::filesystem
if (!request_.keepSourceFile) {
std::error_code remove_error;
if (!std::filesystem::remove(file_path, remove_error)) {
- logger_->log_error("GetFile could not delete file '%s', error: %s", file_path.string(), remove_error.message());
+ logger_->log_error("GetFile could not delete file '{}', error: {}", file_path, remove_error.message());
}
}
} catch (const utils::FileReaderCallbackIOError& io_error) {
- logger_->log_error("IO error while processing file '%s': %s", file_path.string(), io_error.what());
+ logger_->log_error("IO error while processing file '{}': {}", file_path, io_error.what());
flow_file->setDeleted(true);
}
}
@@ -143,7 +143,7 @@ bool GetFile::isListingEmpty() const {
}
void GetFile::putListing(const std::filesystem::path& file_path) {
- logger_->log_trace("Adding file to queue: %s", file_path.string());
+ logger_->log_trace("Adding file to queue: {}", file_path);
std::lock_guard<std::mutex> lock(directory_listing_mutex_);
@@ -162,17 +162,17 @@ std::queue<std::filesystem::path> GetFile::pollListing(uint64_t batch_size) {
}
bool GetFile::fileMatchesRequestCriteria(const std::filesystem::path& full_name, const std::filesystem::path& name, const GetFileRequest &request) {
- logger_->log_trace("Checking file: %s", full_name.string());
+ logger_->log_trace("Checking file: {}", full_name);
std::error_code ec;
uint64_t file_size = std::filesystem::file_size(full_name, ec);
if (ec) {
- logger_->log_error("file_size of %s: %s", full_name.string(), ec.message());
+ logger_->log_error("file_size of {}: {}", full_name, ec.message());
return false;
}
const auto modifiedTime = std::filesystem::last_write_time(full_name, ec);
if (ec) {
- logger_->log_error("last_write_time of %s: %s", full_name.string(), ec.message());
+ logger_->log_error("last_write_time of {}: {}", full_name, ec.message());
return false;
}
diff --git a/extensions/standard-processors/processors/GetTCP.cpp b/extensions/standard-processors/processors/GetTCP.cpp
index 4971e1338..b6ce375a9 100644
--- a/extensions/standard-processors/processors/GetTCP.cpp
+++ b/extensions/standard-processors/processors/GetTCP.cpp
@@ -47,7 +47,7 @@ std::vector<utils::net::ConnectionId> GetTCP::parseEndpointList(core::ProcessCon
for (const auto& endpoint_str : utils::StringUtils::splitAndTrim(*endpoint_list_str, ",")) {
auto hostname_service_pair = utils::StringUtils::splitAndTrim(endpoint_str, ":");
if (hostname_service_pair.size() != 2) {
- logger_->log_error("%s endpoint is invalid, expected {hostname}:{service} format", endpoint_str);
+ logger_->log_error("{} endpoint is invalid, expected {{hostname}}:{{service}} format", endpoint_str);
continue;
}
connections_to_make.emplace_back(hostname_service_pair[0], hostname_service_pair[1]);
@@ -211,7 +211,7 @@ asio::awaitable<std::error_code> GetTCP::TcpClient::readLoop(auto& socket) {
current_doesnt_end_with_delimiter = true;
bytes_read = *max_message_size_;
} else if (read_error) {
- logger_->log_error("Error during read %s", read_error.message());
+ logger_->log_error("Error during read {}", read_error.message());
co_return read_error;
}
@@ -247,7 +247,7 @@ asio::awaitable<void> GetTCP::TcpClient::doReceiveFrom(const utils::net::Connect
auto [resolve_error, resolve_result] = co_await utils::net::asyncOperationWithTimeout( // NOLINT
resolver.async_resolve(connection_id.getHostname(), connection_id.getService(), utils::net::use_nothrow_awaitable), timeout_duration_);
if (resolve_error) {
- logger_->log_error("Error during resolution: %s", resolve_error.message());
+ logger_->log_error("Error during resolution: {}", resolve_error.message());
co_await utils::net::async_wait(reconnection_interval_);
continue;
}
@@ -266,7 +266,7 @@ asio::awaitable<void> GetTCP::TcpClient::doReceiveFrom(const utils::net::Connect
continue;
}
}
- logger_->log_error("Error connecting to %s:%s due to %s", connection_id.getHostname().data(), connection_id.getService().data(), last_error.message());
+ logger_->log_error("Error connecting to {}:{} due to {}", connection_id.getHostname(), connection_id.getService(), last_error.message());
co_await utils::net::async_wait(reconnection_interval_);
}
}
diff --git a/extensions/standard-processors/processors/ListFile.cpp b/extensions/standard-processors/processors/ListFile.cpp
index 130926572..12ad42be9 100644
--- a/extensions/standard-processors/processors/ListFile.cpp
+++ b/extensions/standard-processors/processors/ListFile.cpp
@@ -88,14 +88,14 @@ std::shared_ptr<core::FlowFile> ListFile::createFlowFile(core::ProcessSession& s
if (auto permission_string = utils::file::FileUtils::get_permission_string(listed_file.getPath())) {
session.putAttribute(flow_file, ListFile::FilePermissions.name, *permission_string);
} else {
- logger_->log_warn("Failed to get permissions of file '%s'", listed_file.getPath().string());
+ logger_->log_warn("Failed to get permissions of file '{}'", listed_file.getPath());
session.putAttribute(flow_file, ListFile::FilePermissions.name, "");
}
if (auto owner = utils::file::FileUtils::get_file_owner(listed_file.getPath())) {
session.putAttribute(flow_file, ListFile::FileOwner.name, *owner);
} else {
- logger_->log_warn("Failed to get owner of file '%s'", listed_file.getPath().string());
+ logger_->log_warn("Failed to get owner of file '{}'", listed_file.getPath());
session.putAttribute(flow_file, ListFile::FileOwner.name, "");
}
@@ -103,7 +103,7 @@ std::shared_ptr<core::FlowFile> ListFile::createFlowFile(core::ProcessSession& s
if (auto group = utils::file::FileUtils::get_file_group(listed_file.getPath())) {
session.putAttribute(flow_file, ListFile::FileGroup.name, *group);
} else {
- logger_->log_warn("Failed to get group of file '%s'", listed_file.getPath().string());
+ logger_->log_warn("Failed to get group of file '{}'", listed_file.getPath());
session.putAttribute(flow_file, ListFile::FileGroup.name, "");
}
#else
@@ -137,7 +137,7 @@ void ListFile::onTrigger(const std::shared_ptr<core::ProcessContext> &context, c
state_manager_->storeState(latest_listing_state);
if (files_listed == 0) {
- logger_->log_debug("No new files were found in input directory '%s' to list", input_directory_.string());
+ logger_->log_debug("No new files were found in input directory '{}' to list", input_directory_);
context->yield();
}
}
diff --git a/extensions/standard-processors/processors/LogAttribute.cpp b/extensions/standard-processors/processors/LogAttribute.cpp
index 646e97fbf..376bb07f6 100644
--- a/extensions/standard-processors/processors/LogAttribute.cpp
+++ b/extensions/standard-processors/processors/LogAttribute.cpp
@@ -42,16 +42,16 @@ void LogAttribute::initialize() {
void LogAttribute::onSchedule(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::ProcessSessionFactory>& /*factory*/) {
context->getProperty(FlowFilesToLog, flowfiles_to_log_);
- logger_->log_debug("FlowFiles To Log: %llu", flowfiles_to_log_);
+ logger_->log_debug("FlowFiles To Log: {}", flowfiles_to_log_);
context->getProperty(HexencodePayload, hexencode_);
context->getProperty(MaxPayloadLineLength, max_line_length_);
- logger_->log_debug("Maximum Payload Line Length: %u", max_line_length_);
+ logger_->log_debug("Maximum Payload Line Length: {}", max_line_length_);
}
// OnTrigger method, implemented by NiFi LogAttribute
void LogAttribute::onTrigger(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::ProcessSession> &session) {
- logger_->log_trace("enter log attribute, attempting to retrieve %u flow files", flowfiles_to_log_);
+ logger_->log_trace("enter log attribute, attempting to retrieve {} flow files", flowfiles_to_log_);
std::string dashLine = "--------------------------------------------------";
LogAttrLevel level = LogAttrLevelInfo;
bool logPayload = false;
@@ -120,26 +120,26 @@ void LogAttribute::onTrigger(const std::shared_ptr<core::ProcessContext> &contex
switch (level) {
case LogAttrLevelInfo:
- core::logging::LOG_INFO(logger_) << output;
+ logger_->log_info("{}", output);
break;
case LogAttrLevelDebug:
- core::logging::LOG_DEBUG(logger_) << output;
+ logger_->log_debug("{}", output);
break;
case LogAttrLevelError:
- core::logging::LOG_ERROR(logger_) << output;
+ logger_->log_error("{}", output);
break;
case LogAttrLevelTrace:
- core::logging::LOG_TRACE(logger_) << output;
+ logger_->log_trace("{}", output);
break;
case LogAttrLevelWarn:
- core::logging::LOG_WARN(logger_) << output;
+ logger_->log_warn("{}", output);
break;
default:
break;
}
session->transfer(flow, Success);
}
- logger_->log_debug("Logged %d flow files", i);
+ logger_->log_debug("Logged {} flow files", i);
}
REGISTER_RESOURCE(LogAttribute, Processor);
diff --git a/extensions/standard-processors/processors/NetworkListenerProcessor.cpp b/extensions/standard-processors/processors/NetworkListenerProcessor.cpp
index 9ac1e1f1d..924fdf324 100644
--- a/extensions/standard-processors/processors/NetworkListenerProcessor.cpp
+++ b/extensions/standard-processors/processors/NetworkListenerProcessor.cpp
@@ -54,8 +54,8 @@ NetworkListenerProcessor::ServerOptions NetworkListenerProcessor::readServerOpti
void NetworkListenerProcessor::startServer(const ServerOptions& options, utils::net::IpProtocol protocol) {
server_thread_ = std::thread([this]() { server_->run(); });
- logger_->log_debug("Started %s server on port %d with %s max queue size and %zu max batch size",
- std::string{magic_enum::enum_name(protocol)},
+ logger_->log_debug("Started {} server on port {} with {} max queue size and {} max batch size",
+ magic_enum::enum_name(protocol),
options.port,
options.max_queue_size ? std::to_string(*options.max_queue_size) : "unlimited",
max_batch_size_);
diff --git a/extensions/standard-processors/processors/PutFile.cpp b/extensions/standard-processors/processors/PutFile.cpp
index 9db95e621..4ad5bd0df 100644
--- a/extensions/standard-processors/processors/PutFile.cpp
+++ b/extensions/standard-processors/processors/PutFile.cpp
@@ -84,16 +84,16 @@ void PutFile::onTrigger(core::ProcessContext *context, core::ProcessSession *ses
return session->transfer(flow_file, Failure);
}
- logger_->log_debug("PutFile writing file %s into directory %s", dest_path->filename().string(), dest_path->parent_path().string());
+ logger_->log_debug("PutFile writing file {} into directory {}", dest_path->filename(), dest_path->parent_path());
if (directoryIsFull(dest_path->parent_path())) {
- logger_->log_warn("Routing to failure because the output directory %s has at least %u files, which exceeds the "
- "configured max number of files", dest_path->parent_path().string(), *max_dest_files_);
+ logger_->log_warn("Routing to failure because the output directory {} has at least {} files, which exceeds the "
+ "configured max number of files", dest_path->parent_path(), *max_dest_files_);
return session->transfer(flow_file, Failure);
}
if (utils::file::exists(*dest_path)) {
- logger_->log_warn("Destination file %s exists; applying Conflict Resolution Strategy: %s", dest_path->string(), std::string(magic_enum::enum_name(conflict_resolution_strategy_)));
+ logger_->log_warn("Destination file {} exists; applying Conflict Resolution Strategy: {}", dest_path->string(), magic_enum::enum_name(conflict_resolution_strategy_));
if (conflict_resolution_strategy_ == FileExistsResolutionStrategy::fail) {
return session->transfer(flow_file, Failure);
} else if (conflict_resolution_strategy_ == FileExistsResolutionStrategy::ignore) {
@@ -106,7 +106,7 @@ void PutFile::onTrigger(core::ProcessContext *context, core::ProcessSession *ses
void PutFile::prepareDirectory(const std::filesystem::path& directory_path) const {
if (!utils::file::exists(directory_path) && try_mkdirs_) {
- logger_->log_debug("Destination directory does not exist; will attempt to create: %s", directory_path.string());
+ logger_->log_debug("Destination directory does not exist; will attempt to create: {}", directory_path);
utils::file::create_dir(directory_path, true);
#ifndef WIN32
if (directory_permissions_.valid()) {
@@ -126,7 +126,7 @@ void PutFile::putFile(core::ProcessSession& session,
utils::FileWriterCallback file_writer_callback(dest_file);
auto read_result = session.read(flow_file, std::ref(file_writer_callback));
if (io::isError(read_result)) {
- logger_->log_error("Failed to write to %s", dest_file.string());
+ logger_->log_error("Failed to write to {}", dest_file);
success = false;
} else {
success = file_writer_callback.commit();
diff --git a/extensions/standard-processors/processors/PutTCP.cpp b/extensions/standard-processors/processors/PutTCP.cpp
index 8bef0e0ac..48475378c 100644
--- a/extensions/standard-processors/processors/PutTCP.cpp
+++ b/extensions/standard-processors/processors/PutTCP.cpp
@@ -188,11 +188,11 @@ void ConnectionHandler<SslSocket>::shutdownSocket() {
asio::error_code ec;
socket_->lowest_layer().cancel(ec);
if (ec) {
- logger_->log_error("Cancelling asynchronous operations of SSL socket failed with: %s", ec.message());
+ logger_->log_error("Cancelling asynchronous operations of SSL socket failed with: {}", ec.message());
}
socket_->shutdown(ec);
if (ec) {
- logger_->log_error("Shutdown of SSL socket failed with: %s", ec.message());
+ logger_->log_error("Shutdown of SSL socket failed with: {}", ec.message());
}
}
}
@@ -204,13 +204,13 @@ asio::awaitable<std::error_code> ConnectionHandler<SocketType>::establishNewConn
for (const auto& endpoint : endpoints) {
auto [connection_error] = co_await asyncOperationWithTimeout(socket.lowest_layer().async_connect(endpoint, use_nothrow_awaitable), timeout_duration_);
if (connection_error) {
- core::logging::LOG_DEBUG(logger_) << "Connecting to " << endpoint.endpoint() << " failed due to " << connection_error.message();
+ logger_->log_debug("Connecting to {} failed due to {}", endpoint.endpoint(), connection_error.message());
last_error = connection_error;
continue;
}
auto [handshake_error] = co_await utils::net::handshake(socket, timeout_duration_);
if (handshake_error) {
- core::logging::LOG_DEBUG(logger_) << "Handshake with " << endpoint.endpoint() << " failed due to " << handshake_error.message();
+ logger_->log_debug("Handshake with {} failed due to {}", endpoint.endpoint(), handshake_error.message());
last_error = handshake_error;
continue;
}
@@ -258,13 +258,13 @@ asio::awaitable<std::error_code> ConnectionHandler<SocketType>::send(const std::
asio::async_write(*socket_, asio::buffer(data_chunk, num_read), use_nothrow_awaitable), timeout_duration_);
if (write_error)
co_return write_error;
- logger_->log_trace("Writing flowfile(%zu bytes) to socket succeeded", bytes_written);
+ logger_->log_trace("Writing flowfile({} bytes) to socket succeeded", bytes_written);
}
auto [delimiter_write_error, delimiter_bytes_written] = co_await asyncOperationWithTimeout(
asio::async_write(*socket_, asio::buffer(delimiter), use_nothrow_awaitable), timeout_duration_);
if (delimiter_write_error)
co_return delimiter_write_error;
- logger_->log_trace("Writing delimiter(%zu bytes) to socket succeeded", delimiter_bytes_written);
+ logger_->log_trace("Writing delimiter({} bytes) to socket succeeded", delimiter_bytes_written);
last_used_ = steady_clock::now();
co_return std::error_code();
@@ -285,7 +285,7 @@ void PutTCP::onTrigger(core::ProcessContext* context, core::ProcessSession* cons
auto hostname = context->getProperty(Hostname, flow_file).value_or(std::string{});
auto port = context->getProperty(Port, flow_file).value_or(std::string{});
if (hostname.empty() || port.empty()) {
- logger_->log_error("[%s] invalid target endpoint: hostname: %s, port: %s", flow_file->getUUIDStr(),
+ logger_->log_error("[{}] invalid target endpoint: hostname: {}, port: {}", flow_file->getUUIDStr(),
hostname.empty() ? "(empty)" : hostname.c_str(),
port.empty() ? "(empty)" : port.c_str());
session->transfer(flow_file, Failure);
@@ -344,14 +344,14 @@ void PutTCP::processFlowFile(std::shared_ptr<ConnectionHandlerBase>& connection_
std::error_code operation_error = sendFlowFileContent(connection_handler, flow_file_content_stream);
if (operation_error && connection_handler->hasBeenUsed()) {
- logger_->log_warn("%s with reused connection, retrying...", operation_error.message());
+ logger_->log_warn("{} with reused connection, retrying...", operation_error.message());
connection_handler->reset();
operation_error = sendFlowFileContent(connection_handler, flow_file_content_stream);
}
if (operation_error) {
connection_handler->reset();
- logger_->log_error("%s", operation_error.message());
+ logger_->log_error("{}", operation_error.message());
session.transfer(flow_file, Failure);
} else {
session.transfer(flow_file, Success);
diff --git a/extensions/standard-processors/processors/PutUDP.cpp b/extensions/standard-processors/processors/PutUDP.cpp
index d3702abb1..443c4f74f 100644
--- a/extensions/standard-processors/processors/PutUDP.cpp
+++ b/extensions/standard-processors/processors/PutUDP.cpp
@@ -26,6 +26,7 @@
#include "core/logging/LoggerConfiguration.h"
#include "asio/ip/udp.hpp"
+#include "utils/net/AsioSocketUtils.h"
using asio::ip::udp;
@@ -68,7 +69,7 @@ void PutUDP::onTrigger(core::ProcessContext* context, core::ProcessSession* cons
const auto hostname = context->getProperty(Hostname, flow_file).value_or(std::string{});
const auto port = context->getProperty(Port, flow_file).value_or(std::string{});
if (hostname.empty() || port.empty()) {
- logger_->log_error("[%s] invalid target endpoint: hostname: %s, port: %s", flow_file->getUUIDStr(),
+ logger_->log_error("[{}] invalid target endpoint: hostname: {}, port: {}", flow_file->getUUIDStr(),
hostname.empty() ? "(empty)" : hostname.c_str(),
port.empty() ? "(empty)" : port.c_str());
session->transfer(flow_file, Failure);
@@ -99,15 +100,15 @@ void PutUDP::onTrigger(core::ProcessContext* context, core::ProcessSession* cons
udp::socket socket(io_context);
socket.open(resolver_entry.endpoint().protocol(), error);
if (error) {
- logger->log_debug("opening %s socket failed due to %s ", resolver_entry.endpoint().protocol() == udp::v4() ? "IPv4" : "IPv6", error.message());
+ logger->log_debug("opening {} socket failed due to {} ", resolver_entry.endpoint().protocol() == udp::v4() ? "IPv4" : "IPv6", error.message());
continue;
}
socket.send_to(asio::buffer(data.buffer), resolver_entry.endpoint(), udp::socket::message_flags{}, error);
if (error) {
- core::logging::LOG_DEBUG(logger) << "sending to endpoint " << resolver_entry.endpoint() << " failed due to " << error.message();
+ logger->log_debug("sending to endpoint {} failed due to {}", resolver_entry.endpoint(), error.message());
continue;
}
- core::logging::LOG_DEBUG(logger) << "sending to endpoint " << resolver_entry.endpoint() << " succeeded";
+ logger->log_debug("sending to endpoint {} succeeded", resolver_entry.endpoint());
return {};
}
return nonstd::make_unexpected(error);
@@ -119,7 +120,7 @@ void PutUDP::onTrigger(core::ProcessContext* context, core::ProcessSession* cons
const auto transfer_to_failure = [&session, &flow_file, &logger = this->logger_](std::error_code ec) -> void {
gsl_Expects(ec);
- logger->log_error("%s", ec.message());
+ logger->log_error("{}", ec.message());
session->transfer(flow_file, Failure);
};
diff --git a/extensions/standard-processors/processors/ReplaceText.cpp b/extensions/standard-processors/processors/ReplaceText.cpp
index 6d3ccd3fa..0a26470c4 100644
--- a/extensions/standard-processors/processors/ReplaceText.cpp
+++ b/extensions/standard-processors/processors/ReplaceText.cpp
@@ -42,15 +42,15 @@ void ReplaceText::onSchedule(const std::shared_ptr<core::ProcessContext>& contex
gsl_Expects(context);
evaluation_mode_ = utils::parseEnumProperty<EvaluationModeType>(*context, EvaluationMode);
- logger_->log_debug("the %s property is set to %s", std::string(EvaluationMode.name), std::string{magic_enum::enum_name(evaluation_mode_)});
+ logger_->log_debug("the {} property is set to {}", EvaluationMode.name, magic_enum::enum_name(evaluation_mode_));
if (auto line_by_line_evaluation_mode = utils::parseOptionalEnumProperty<LineByLineEvaluationModeType>(*context, LineByLineEvaluationMode)) {
line_by_line_evaluation_mode_ = *line_by_line_evaluation_mode;
- logger_->log_debug("the %s property is set to %s", std::string(LineByLineEvaluationMode.name), std::string{magic_enum::enum_name(line_by_line_evaluation_mode_)});
+ logger_->log_debug("the {} property is set to {}", LineByLineEvaluationMode.name, magic_enum::enum_name(line_by_line_evaluation_mode_));
}
replacement_strategy_ = utils::parseEnumProperty<ReplacementStrategyType>(*context, ReplacementStrategy);
- logger_->log_debug("the %s property is set to %s", std::string(ReplacementStrategy.name), std::string{magic_enum::enum_name(replacement_strategy_)});
+ logger_->log_debug("the {} property is set to {}", ReplacementStrategy.name, magic_enum::enum_name(replacement_strategy_));
}
void ReplaceText::onTrigger(const std::shared_ptr<core::ProcessContext>& context, const std::shared_ptr<core::ProcessSession>& session) {
@@ -88,7 +88,7 @@ ReplaceText::Parameters ReplaceText::readParameters(const std::shared_ptr<core::
found_search_value = context->getProperty(SearchValue, parameters.search_value_, flow_file);
}
if (found_search_value) {
- logger_->log_debug("the %s property is set to %s", std::string{SearchValue.name}, parameters.search_value_);
+ logger_->log_debug("the {} property is set to {}", SearchValue.name, parameters.search_value_);
if (replacement_strategy_ == ReplacementStrategyType::REGEX_REPLACE) {
parameters.search_regex_ = std::regex{parameters.search_value_};
}
@@ -104,7 +104,7 @@ ReplaceText::Parameters ReplaceText::readParameters(const std::shared_ptr<core::
found_replacement_value = context->getProperty(ReplacementValue, parameters.replacement_value_, flow_file);
}
if (found_replacement_value) {
- logger_->log_debug("the %s property is set to %s", std::string(ReplacementValue.name), parameters.replacement_value_);
+ logger_->log_debug("the {} property is set to {}", ReplacementValue.name, parameters.replacement_value_);
} else {
throw Exception{PROCESSOR_EXCEPTION, utils::StringUtils::join_pack("Missing required property: ", ReplacementValue.name)};
}
@@ -126,7 +126,7 @@ void ReplaceText::replaceTextInEntireFile(const std::shared_ptr<core::FlowFile>&
session->writeBuffer(flow_file, applyReplacements(input, flow_file, parameters));
session->transfer(flow_file, Success);
} catch (const Exception& exception) {
- logger_->log_error("Error in ReplaceText (Entire text mode): %s", exception.what());
+ logger_->log_error("Error in ReplaceText (Entire text mode): {}", exception.what());
session->transfer(flow_file, Failure);
}
}
@@ -154,7 +154,7 @@ void ReplaceText::replaceTextLineByLine(const std::shared_ptr<core::FlowFile>& f
session->readWrite(flow_file, std::move(read_write_callback));
session->transfer(flow_file, Success);
} catch (const Exception& exception) {
- logger_->log_error("Error in ReplaceText (Line-by-Line mode): %s", exception.what());
+ logger_->log_error("Error in ReplaceText (Line-by-Line mode): {}", exception.what());
session->transfer(flow_file, Failure);
}
}
@@ -239,7 +239,7 @@ std::string ReplaceText::getAttributeValue(const std::shared_ptr<core::FlowFile>
if (attribute_value) {
return *attribute_value;
} else {
- logger_->log_debug("Attribute %s not found in the flow file during %s", attribute_key, std::string{magic_enum::enum_name(ReplacementStrategyType::SUBSTITUTE_VARIABLES)});
+ logger_->log_debug("Attribute {} not found in the flow file during {}", attribute_key, magic_enum::enum_name(ReplacementStrategyType::SUBSTITUTE_VARIABLES));
return match[0];
}
}
diff --git a/extensions/standard-processors/processors/RetryFlowFile.cpp b/extensions/standard-processors/processors/RetryFlowFile.cpp
index b38adf53f..01a43d54d 100644
--- a/extensions/standard-processors/processors/RetryFlowFile.cpp
+++ b/extensions/standard-processors/processors/RetryFlowFile.cpp
@@ -53,8 +53,8 @@ void RetryFlowFile::onTrigger(core::ProcessContext* context, core::ProcessSessio
if (flow_file->getAttribute(last_retried_by_property_name, last_retried_by_uuid)) {
if (last_retried_by_uuid != current_processor_uuid) {
if (reuse_mode_ == FAIL_ON_REUSE) {
- logger_->log_error("FlowFile %s was previously retried with the same attribute by a different "
- "processor (uuid: %s, current uuid: %s). Transfering flowfile to 'failure'...",
+ logger_->log_error("FlowFile {} was previously retried with the same attribute by a different "
+ "processor (uuid: {}, current uuid: {}). Transfering flowfile to 'failure'...",
flow_file->getUUIDStr(), last_retried_by_uuid, current_processor_uuid);
session->transfer(flow_file, Failure);
return;
@@ -84,10 +84,10 @@ void RetryFlowFile::onTrigger(core::ProcessContext* context, core::ProcessSessio
void RetryFlowFile::readDynamicPropertyKeys(core::ProcessContext* context) {
exceeded_flowfile_attribute_keys_.clear();
const std::vector<std::string> dynamic_prop_keys = context->getDynamicPropertyKeys();
- logger_->log_info("RetryFlowFile registering %d keys", dynamic_prop_keys.size());
+ logger_->log_info("RetryFlowFile registering {} keys", dynamic_prop_keys.size());
for (const auto& key : dynamic_prop_keys) {
exceeded_flowfile_attribute_keys_.emplace_back(core::PropertyDefinitionBuilder<>::createProperty(key).withDescription("auto generated").supportsExpressionLanguage(true).build());
- logger_->log_info("RetryFlowFile registered attribute '%s'", key);
+ logger_->log_info("RetryFlowFile registered attribute '{}'", key);
}
}
@@ -101,11 +101,11 @@ std::optional<uint64_t> RetryFlowFile::getRetryPropertyValue(const std::shared_p
}
catch(const utils::internal::ParseException&) {
if (fail_on_non_numerical_overwrite_) {
- logger_->log_info("Non-numerical retry property in RetryFlowFile (value: %s). Sending flowfile to failure...", value_as_string);
+ logger_->log_info("Non-numerical retry property in RetryFlowFile (value: {}). Sending flowfile to failure...", value_as_string);
return std::nullopt;
}
}
- logger_->log_info("Non-numerical retry property in RetryFlowFile: overwriting %s with 0.", value_as_string);
+ logger_->log_info("Non-numerical retry property in RetryFlowFile: overwriting {} with 0.", value_as_string);
return 0;
}
@@ -114,7 +114,7 @@ void RetryFlowFile::setRetriesExceededAttributesOnFlowFile(core::ProcessContext*
std::string value;
context->getDynamicProperty(attribute, value, flow_file);
flow_file->setAttribute(attribute.getName(), value);
- logger_->log_info("Set attribute '%s' of flow file '%s' with value '%s'", attribute.getName(), flow_file->getUUIDStr(), value);
+ logger_->log_info("Set attribute '{}' of flow file '{}' with value '{}'", attribute.getName(), flow_file->getUUIDStr(), value);
}
}
diff --git a/extensions/standard-processors/processors/RouteOnAttribute.cpp b/extensions/standard-processors/processors/RouteOnAttribute.cpp
index 1373d028e..cc641a1f6 100644
--- a/extensions/standard-processors/processors/RouteOnAttribute.cpp
+++ b/extensions/standard-processors/processors/RouteOnAttribute.cpp
@@ -44,7 +44,7 @@ void RouteOnAttribute::onDynamicPropertyModified(const core::Property& /*orig_pr
core::RelationshipDefinition route_rel{ route.first, "Dynamic route" };
route_rels_[route.first] = route_rel;
relationships.push_back(route_rel);
- logger_->log_info("RouteOnAttribute registered route '%s' with expression '%s'", route.first, route.second.getValue().to_string());
+ logger_->log_info("RouteOnAttribute registered route '{}' with expression '{}'", route.first, route.second.getValue().to_string());
}
setSupportedRelationships(relationships);
@@ -79,7 +79,7 @@ void RouteOnAttribute::onTrigger(core::ProcessContext *context, core::ProcessSes
session->remove(flow_file);
}
} catch (const std::exception &e) {
- logger_->log_error("Caught exception while updating attributes: type: %s, what: %s", typeid(e).name(), e.what());
+ logger_->log_error("Caught exception while updating attributes: type: {}, what: {}", typeid(e).name(), e.what());
session->transfer(flow_file, Failure);
yield();
}
diff --git a/extensions/standard-processors/processors/RouteText.cpp b/extensions/standard-processors/processors/RouteText.cpp
index 1b93a36d2..5fae92b74 100644
--- a/extensions/standard-processors/processors/RouteText.cpp
+++ b/extensions/standard-processors/processors/RouteText.cpp
@@ -378,7 +378,7 @@ void RouteText::onDynamicPropertyModified(const core::Property& /*orig_property*
core::RelationshipDefinition rel{property_name, "Dynamic Route"};
dynamic_relationships_[property_name] = rel;
relationships.push_back(rel);
- logger_->log_info("RouteText registered dynamic route '%s' with expression '%s'", property_name, prop.getValue().to_string());
+ logger_->log_info("RouteText registered dynamic route '{}' with expression '{}'", property_name, prop.getValue().to_string());
}
setSupportedRelationships(relationships);
diff --git a/extensions/standard-processors/processors/TailFile.cpp b/extensions/standard-processors/processors/TailFile.cpp
index ab0cd17e1..ef8f7b1da 100644
--- a/extensions/standard-processors/processors/TailFile.cpp
+++ b/extensions/standard-processors/processors/TailFile.cpp
@@ -91,7 +91,7 @@ std::map<std::filesystem::path, TailState> update_keys_in_legacy_states(const st
}
void openFile(const std::filesystem::path& file_path, uint64_t offset, std::ifstream &input_stream, const std::shared_ptr<core::logging::Logger> &logger) {
- logger->log_debug("Opening %s", file_path.string());
+ logger->log_debug("Opening {}", file_path);
input_stream.open(file_path, std::fstream::in | std::fstream::binary);
if (!input_stream.is_open() || !input_stream.good()) {
input_stream.close();
@@ -100,7 +100,7 @@ void openFile(const std::filesystem::path& file_path, uint64_t offset, std::ifst
if (offset != 0U) {
input_stream.seekg(offset, std::ifstream::beg);
if (!input_stream.good()) {
- logger->log_error("Seeking to %" PRIu64 " failed for file %s (does file/filesystem support seeking?)", offset, file_path.string());
+ logger->log_error("Seeking to {} failed for file {} (does file/filesystem support seeking?)", offset, file_path);
throw Exception(FILE_OPERATION_EXCEPTION, "Could not seek file " + file_path.string() + " to offset " + std::to_string(offset));
}
}
@@ -130,7 +130,7 @@ class FileReaderCallback {
input_stream_.read(reinterpret_cast<char *>(buffer_.data()), gsl::narrow<std::streamsize>(buffer_.size()));
const auto num_bytes_read = input_stream_.gcount();
- logger_->log_trace("Read %jd bytes of input", std::intmax_t{num_bytes_read});
+ logger_->log_trace("Read {} bytes of input", std::intmax_t{num_bytes_read});
begin_ = buffer_.data();
end_ = begin_ + num_bytes_read;
@@ -203,7 +203,7 @@ class WholeFileReaderCallback {
input_stream_.read(buffer.data(), buffer.size());
const auto num_bytes_read = input_stream_.gcount();
- logger_->log_trace("Read %jd bytes of input", std::intmax_t{num_bytes_read});
+ logger_->log_trace("Read {} bytes of input", std::intmax_t{num_bytes_read});
const int len = gsl::narrow<int>(num_bytes_read);
@@ -255,8 +255,8 @@ void TailFile::onSchedule(const std::shared_ptr<core::ProcessContext> &context,
if (auto parsed_delimiter = utils::StringUtils::parseCharacter(*delimiter_str)) {
delimiter_ = *parsed_delimiter;
} else {
- logger_->log_error("Invalid %s: \"%s\" (it should be a single character, whether escaped or not). Using the first character as the %s",
- std::string(TailFile::Delimiter.name), *delimiter_str, std::string(TailFile::Delimiter.name));
+ logger_->log_error("Invalid {}: \"{}\" (it should be a single character, whether escaped or not). Using the first character as the {}",
+ TailFile::Delimiter.name, *delimiter_str, TailFile::Delimiter.name);
delimiter_ = getDelimiterOld(*delimiter_str);
}
}
@@ -344,7 +344,7 @@ void TailFile::parseAttributeProviderServiceProperty(core::ProcessContext& conte
void TailFile::parseStateFileLine(char *buf, std::map<std::filesystem::path, TailState> &state) const {
char *line = buf;
- logger_->log_trace("Received line %s", buf);
+ logger_->log_trace("Received line {}", buf);
while ((line[0] == ' ') || (line[0] == '\t'))
++line;
@@ -378,7 +378,7 @@ void TailFile::parseStateFileLine(char *buf, std::map<std::filesystem::path, Tai
if (key == "FILENAME") {
std::filesystem::path file_path = value;
if (file_path.has_filename() && file_path.has_parent_path()) {
- logger_->log_debug("State migration received path %s, file %s", file_path.parent_path().string(), file_path.filename().string());
+ logger_->log_debug("State migration received path {}, file {}", file_path.parent_path(), file_path.filename());
state.emplace(file_path.filename(), TailState{file_path.parent_path(), file_path.filename()});
} else {
state.emplace(value, TailState{file_path.parent_path(), value});
@@ -390,7 +390,7 @@ void TailFile::parseStateFileLine(char *buf, std::map<std::filesystem::path, Tai
throw minifi::Exception(ExceptionType::PROCESSOR_EXCEPTION, "Incompatible state file types");
}
const auto position = std::stoull(value);
- logger_->log_debug("Received position %llu", position);
+ logger_->log_debug("Received position {}", position);
state.begin()->second.position_ = gsl::narrow<uint64_t>(position);
}
if (key.find(CURRENT_STR) == 0) {
@@ -456,7 +456,7 @@ bool TailFile::getStateFromStateManager(std::map<std::filesystem::path, TailStat
std::filesystem::path file_path = current;
if (file_path.has_filename() && file_path.has_parent_path()) {
- logger_->log_debug("Received path %s, file %s", file_path.parent_path().string(), file_path.filename().string());
+ logger_->log_debug("Received path {}, file {}", file_path.parent_path(), file_path.filename());
new_tail_states.emplace(current, TailState{file_path.parent_path(), file_path.filename(), position, last_read_time, checksum});
} else {
new_tail_states.emplace(current, TailState{file_path.parent_path(), file_path, position, last_read_time, checksum});
@@ -466,8 +466,8 @@ bool TailFile::getStateFromStateManager(std::map<std::filesystem::path, TailStat
}
}
for (const auto& s : tail_states_) {
- logger_->log_debug("TailState %s: %s, %s, %" PRIu64 ", %" PRIu64,
- s.first.string(), s.second.path_.string(), s.second.file_name_.string(), s.second.position_, s.second.checksum_);
+ logger_->log_debug("TailState {}: {}, {}, {}, {}",
+ s.first.string(), s.second.path_, s.second.file_name_, s.second.position_, s.second.checksum_);
}
return true;
} else {
@@ -484,7 +484,7 @@ bool TailFile::getStateFromLegacyStateFile(const std::shared_ptr<core::ProcessCo
std::ifstream file(state_file.c_str(), std::ifstream::in);
if (!file.good()) {
- logger_->log_info("Legacy state file %s not found (this is OK)", state_file);
+ logger_->log_info("Legacy state file {} not found (this is OK)", state_file);
return false;
}
@@ -499,9 +499,9 @@ bool TailFile::getStateFromLegacyStateFile(const std::shared_ptr<core::ProcessCo
}
void TailFile::logState() {
- logger_->log_info("State of the TailFile processor %s:", name_);
+ logger_->log_info("State of the TailFile processor {}:", name_);
for (const auto& [key, value] : tail_states_) {
- core::logging::LOG_INFO(logger_) << key << " => { " << value << " }";
+ logger_->log_info("key => {{{}}}", value);
}
}
@@ -548,7 +548,7 @@ std::vector<TailState> TailFile::findAllRotatedFiles(const TailState &state) con
if (file_name != state.file_name_ && utils::regexMatch(file_name.string(), pattern_regex)) {
auto full_file_name = path / file_name;
TailStateWithMtime::TimePoint mtime{utils::file::last_write_time_point(full_file_name)};
- logger_->log_debug("File %s with mtime %" PRId64 " matches rolling filename pattern %s, so we are reading it", file_name.string(), int64_t{mtime.time_since_epoch().count()}, pattern);
+ logger_->log_debug("File {} with mtime {} matches rolling filename pattern {}, so we are reading it", file_name, int64_t{mtime.time_since_epoch().count()}, pattern);
matched_files_with_mtime.emplace_back(TailState{path, file_name}, mtime);
}
return true;
@@ -560,7 +560,7 @@ std::vector<TailState> TailFile::findAllRotatedFiles(const TailState &state) con
}
std::vector<TailState> TailFile::findRotatedFilesAfterLastReadTime(const TailState &state) const {
- logger_->log_debug("Searching for files rolled over after last read time: %" PRId64, state.lastReadTimeInMilliseconds());
+ logger_->log_debug("Searching for files rolled over after last read time: {}", state.lastReadTimeInMilliseconds());
std::string pattern = parseRollingFilePattern(state);
@@ -570,9 +570,9 @@ std::vector<TailState> TailFile::findRotatedFilesAfterLastReadTime(const TailSta
if (file_name != state.file_name_ && utils::regexMatch(file_name.string(), pattern_regex)) {
auto full_file_name = path / file_name;
TailStateWithMtime::TimePoint mtime{utils::file::last_write_time_point(full_file_name)};
- logger_->log_debug("File %s with mtime %" PRId64 " matches rolling filename pattern %s", file_name.string(), int64_t{mtime.time_since_epoch().count()}, pattern);
+ logger_->log_debug("File {} with mtime {} matches rolling filename pattern {}", file_name, int64_t{mtime.time_since_epoch().count()}, pattern);
if (mtime >= std::chrono::time_point_cast<std::chrono::seconds>(state.last_read_time_)) {
- logger_->log_debug("File %s has mtime >= last read time, so we are going to read it", file_name.string());
+ logger_->log_debug("File {} has mtime >= last read time, so we are going to read it", file_name);
matched_files_with_mtime.emplace_back(TailState{path, file_name}, mtime);
}
}
@@ -615,7 +615,7 @@ void TailFile::onTrigger(const std::shared_ptr<core::ProcessContext>& context, c
if (tail_mode_ == Mode::MULTIPLE) {
if (last_multifile_lookup_ + lookup_frequency_ < std::chrono::steady_clock::now()) {
- logger_->log_debug("Lookup frequency %" PRId64 " ms have elapsed, doing new multifile lookup", int64_t{lookup_frequency_.count()});
+ logger_->log_debug("Lookup frequency {} have elapsed, doing new multifile lookup", lookup_frequency_);
doMultifileLookup(*context);
} else {
logger_->log_trace("Skipping multifile lookup");
@@ -657,7 +657,7 @@ void TailFile::processFile(const std::shared_ptr<core::ProcessSession> &session,
if (fsize < state.position_) {
processRotatedFilesAfterLastReadTime(session, state);
} else if (fsize == state.position_) {
- logger_->log_trace("Skipping file %s as its size hasn't changed since last read", state.file_name_.string());
+ logger_->log_trace("Skipping file {} as its size hasn't changed since last read", state.file_name_);
return;
}
}
@@ -690,10 +690,10 @@ void TailFile::processSingleFile(const std::shared_ptr<core::ProcessSession> &se
auto fileName = state.file_name_;
if (utils::file::file_size(full_file_name) == 0U) {
- logger_->log_warn("Unable to read file %s as it does not exist or has size zero", full_file_name.string());
+ logger_->log_warn("Unable to read file {} as it does not exist or has size zero", full_file_name);
return;
}
- logger_->log_debug("Tailing file %s from %" PRIu64, full_file_name.string(), state.position_);
+ logger_->log_debug("Tailing file {} from {}", full_file_name, state.position_);
std::string baseName = fileName.stem().string();
std::string extension = fileName.extension().string();
@@ -701,7 +701,7 @@ void TailFile::processSingleFile(const std::shared_ptr<core::ProcessSession> &se
extension.erase(extension.begin());
if (delimiter_) {
- logger_->log_trace("Looking for delimiter 0x%X", *delimiter_);
+ logger_->log_trace("Looking for delimiter 0x{:X}", *delimiter_);
std::size_t num_flow_files = 0;
FileReaderCallback file_reader{full_file_name, state.position_, *delimiter_, state.checksum_};
@@ -724,7 +724,7 @@ void TailFile::processSingleFile(const std::shared_ptr<core::ProcessSession> &se
}
state = state_copy;
- logger_->log_info("%zu flowfiles were received from TailFile input", num_flow_files);
+ logger_->log_info("{} flowfiles were received from TailFile input", num_flow_files);
} else {
WholeFileReaderCallback file_reader{full_file_name, state.position_, state.checksum_};
@@ -741,7 +741,7 @@ void TailFile::updateFlowFileAttributes(const std::filesystem::path& full_file_n
const std::filesystem::path& fileName, const std::string& baseName,
const std::string& extension,
std::shared_ptr<core::FlowFile> &flow_file) const {
- logger_->log_info("TailFile %s for %" PRIu64 " bytes", fileName.string(), flow_file->getSize());
+ logger_->log_info("TailFile {} for {} bytes", fileName, flow_file->getSize());
std::string logName = textfragmentutils::createFileName(baseName, extension, state.position_, flow_file->getSize());
flow_file->setAttribute(core::SpecialFlowAttribute::PATH, state.path_.string());
flow_file->addAttribute(core::SpecialFlowAttribute::ABSOLUTE_PATH, full_file_name.string());
diff --git a/extensions/standard-processors/processors/TailFile.h b/extensions/standard-processors/processors/TailFile.h
index 6e3237047..b20dcaec1 100644
--- a/extensions/standard-processors/processors/TailFile.h
+++ b/extensions/standard-processors/processors/TailFile.h
@@ -299,3 +299,6 @@ class TailFile : public core::Processor {
};
} // namespace org::apache::nifi::minifi::processors
+
+template <>
+struct fmt::formatter<org::apache::nifi::minifi::processors::TailState> : fmt::ostream_formatter {};
diff --git a/extensions/standard-processors/processors/UpdateAttribute.cpp b/extensions/standard-processors/processors/UpdateAttribute.cpp
index 3c11948ab..f5361d0f2 100644
--- a/extensions/standard-processors/processors/UpdateAttribute.cpp
+++ b/extensions/standard-processors/processors/UpdateAttribute.cpp
@@ -36,11 +36,11 @@ void UpdateAttribute::initialize() {
void UpdateAttribute::onSchedule(core::ProcessContext *context, core::ProcessSessionFactory* /*sessionFactory*/) {
attributes_.clear();
const auto &dynamic_prop_keys = context->getDynamicPropertyKeys();
- logger_->log_info("UpdateAttribute registering %d keys", dynamic_prop_keys.size());
+ logger_->log_info("UpdateAttribute registering {} keys", dynamic_prop_keys.size());
for (const auto &key : dynamic_prop_keys) {
attributes_.emplace_back(core::PropertyDefinitionBuilder<>::createProperty(key).withDescription("auto generated").supportsExpressionLanguage(true).build());
- logger_->log_info("UpdateAttribute registered attribute '%s'", key);
+ logger_->log_info("UpdateAttribute registered attribute '{}'", key);
}
}
@@ -57,11 +57,11 @@ void UpdateAttribute::onTrigger(core::ProcessContext *context, core::ProcessSess
std::string value;
context->getDynamicProperty(attribute, value, flow_file);
flow_file->setAttribute(attribute.getName(), value);
- logger_->log_info("Set attribute '%s' of flow file '%s' with value '%s'", attribute.getName(), flow_file->getUUIDStr(), value);
+ logger_->log_info("Set attribute '{}' of flow file '{}' with value '{}'", attribute.getName(), flow_file->getUUIDStr(), value);
}
session->transfer(flow_file, Success);
} catch (const std::exception &e) {
- logger_->log_error("Caught exception while updating attributes: %s", e.what());
+ logger_->log_error("Caught exception while updating attributes: {}", e.what());
session->transfer(flow_file, Failure);
yield();
}
diff --git a/extensions/standard-processors/tests/unit/PutTCPTests.cpp b/extensions/standard-processors/tests/unit/PutTCPTests.cpp
index bcbb90ad0..9a38a146a 100644
--- a/extensions/standard-processors/tests/unit/PutTCPTests.cpp
+++ b/extensions/standard-processors/tests/unit/PutTCPTests.cpp
@@ -62,7 +62,7 @@ class CancellableTcpServer : public utils::net::TcpServer {
while (true) {
auto [accept_error, socket] = co_await acceptor.async_accept(utils::net::use_nothrow_awaitable);
if (accept_error) {
- logger_->log_error("Error during accepting new connection: %s", accept_error.message());
+ logger_->log_error("Error during accepting new connection: {}", accept_error.message());
break;
}
std::error_code error;
diff --git a/extensions/systemd/ConsumeJournald.cpp b/extensions/systemd/ConsumeJournald.cpp
index 7655a91e2..28c9e607b 100644
--- a/extensions/systemd/ConsumeJournald.cpp
+++ b/extensions/systemd/ConsumeJournald.cpp
@@ -100,7 +100,7 @@ void ConsumeJournald::onSchedule(core::ProcessContext* const context, core::Proc
const auto ret = journal_->seekCursor(cursor->c_str());
if (ret < 0) {
const auto error_message = std::generic_category().default_error_condition(-ret).message();
- logger_->log_warn("Failed to seek to cursor: %s. Seeking to tail or head (depending on Process Old Messages property) instead. cursor=\"%s\"", error_message, *cursor);
+ logger_->log_warn("Failed to seek to cursor: {}. Seeking to tail or head (depending on Process Old Messages property) instead. cursor=\"{}\"", error_message, *cursor);
seek_default(*journal_);
}
}
diff --git a/extensions/test-processors/KamikazeProcessor.cpp b/extensions/test-processors/KamikazeProcessor.cpp
index ecceb708f..cc981698f 100644
--- a/extensions/test-processors/KamikazeProcessor.cpp
+++ b/extensions/test-processors/KamikazeProcessor.cpp
@@ -44,18 +44,18 @@ void KamikazeProcessor::onSchedule(core::ProcessContext *context, core::ProcessS
if (utils::StringUtils::toBool(value).value_or(false)) {
throw Exception(PROCESS_SCHEDULE_EXCEPTION, OnScheduleExceptionStr);
}
- logger_->log_error("%s", OnScheduleLogStr);
+ logger_->log_error("{}", OnScheduleLogStr);
}
void KamikazeProcessor::onTrigger(core::ProcessContext *, core::ProcessSession *) {
if (_throwInOnTrigger) {
throw Exception(PROCESSOR_EXCEPTION, OnTriggerExceptionStr);
}
- logger_->log_error("%s", OnTriggerLogStr);
+ logger_->log_error("{}", OnTriggerLogStr);
}
void KamikazeProcessor::onUnSchedule() {
- logger_->log_error("%s", OnUnScheduleLogStr);
+ logger_->log_error("{}", OnUnScheduleLogStr);
}
REGISTER_RESOURCE(KamikazeProcessor, Processor);
diff --git a/extensions/usb-camera/GetUSBCamera.cpp b/extensions/usb-camera/GetUSBCamera.cpp
index f15b4854c..6fbb44f21 100644
--- a/extensions/usb-camera/GetUSBCamera.cpp
+++ b/extensions/usb-camera/GetUSBCamera.cpp
@@ -60,7 +60,7 @@ void GetUSBCamera::onFrame(uvc_frame_t *frame, void *ptr) {
ret = uvc_any2rgb(frame, cb_data->frame_buffer);
if (ret) {
- cb_data->logger->log_error("Failed to convert frame to RGB: %s", uvc_strerror(ret));
+ cb_data->logger->log_error("Failed to convert frame to RGB: {}", uvc_strerror(ret));
return;
}
@@ -69,13 +69,13 @@ void GetUSBCamera::onFrame(uvc_frame_t *frame, void *ptr) {
std::string flow_file_name;
flow_file->getAttribute("filename", flow_file_name);
- cb_data->logger->log_info("Created flow file: %s", flow_file_name);
+ cb_data->logger->log_info("Created flow file: {}", flow_file_name);
if (cb_data->format == "RAW") {
session->writeBuffer(flow_file, gsl::make_span(static_cast<const std::byte*>(cb_data->frame_buffer->data), cb_data->frame_buffer->data_bytes));
} else {
if (cb_data->format != "PNG") {
- cb_data->logger->log_warn("Invalid format specified (%s); defaulting to PNG", cb_data->format);
+ cb_data->logger->log_warn("Invalid format specified ({}); defaulting to PNG", cb_data->format);
}
session->write(flow_file, GetUSBCamera::PNGWriteCallback{
cb_data->png_write_mtx,
@@ -86,7 +86,7 @@ void GetUSBCamera::onFrame(uvc_frame_t *frame, void *ptr) {
session->transfer(flow_file, GetUSBCamera::Success);
session->commit();
} catch (std::exception &exception) {
- cb_data->logger->log_debug("GetUSBCamera Caught Exception %s", exception.what());
+ cb_data->logger->log_debug("GetUSBCamera Caught Exception {}", exception.what());
} catch (...) {
cb_data->logger->log_debug("GetUSBCamera Caught Unknown Exception");
}
@@ -101,12 +101,12 @@ void GetUSBCamera::onSchedule(core::ProcessContext *context, core::ProcessSessio
context->getProperty("FPS", conf_fps_str);
if (conf_fps_str.empty()) {
- logger_->log_info("FPS property was not set; using default %f", default_fps);
+ logger_->log_info("FPS property was not set; using default {}", default_fps);
} else {
try {
target_fps = std::stod(conf_fps_str);
} catch (std::invalid_argument &e) {
- logger_->log_error("Could not parse configured FPS value (will use default %f): %s", default_fps, conf_fps_str);
+ logger_->log_error("Could not parse configured FPS value (will use default {}): {}", default_fps, conf_fps_str);
}
}
@@ -118,11 +118,11 @@ void GetUSBCamera::onSchedule(core::ProcessContext *context, core::ProcessSessio
if (!conf_width_str.empty()) {
auto target_width_ul = std::stoul(conf_width_str);
if (target_width_ul > UINT16_MAX) {
- logger_->log_error("Configured target width %s is out of range", conf_width_str);
+ logger_->log_error("Configured target width {} is out of range", conf_width_str);
} else {
target_width = static_cast<uint16_t>(target_width_ul);
}
- logger_->log_info("Using configured target width: %i", target_width);
+ logger_->log_info("Using configured target width: {}", target_width);
}
std::string conf_height_str;
@@ -131,11 +131,11 @@ void GetUSBCamera::onSchedule(core::ProcessContext *context, core::ProcessSessio
if (!conf_height_str.empty()) {
auto target_height_ul = std::stoul(conf_height_str);
if (target_height_ul > UINT16_MAX) {
- logger_->log_error("Configured target height %s is out of range", conf_height_str);
+ logger_->log_error("Configured target height {} is out of range", conf_height_str);
} else {
target_height = static_cast<uint16_t>(target_height_ul);
}
- logger_->log_info("Using configured target height: %i", target_height);
+ logger_->log_info("Using configured target height: {}", target_height);
}
std::string conf_format_str;
@@ -145,13 +145,13 @@ void GetUSBCamera::onSchedule(core::ProcessContext *context, core::ProcessSessio
std::string conf_vendor_id;
context->getProperty("USB Vendor ID", conf_vendor_id);
std::stringstream(conf_vendor_id) >> std::hex >> usb_vendor_id;
- logger_->log_info("Using USB Vendor ID: %x", usb_vendor_id);
+ logger_->log_info("Using USB Vendor ID: {:#x}", usb_vendor_id);
int usb_product_id;
std::string conf_product_id;
context->getProperty("USB Product ID", conf_product_id);
std::stringstream(conf_product_id) >> std::hex >> usb_product_id;
- logger_->log_info("Using USB Product ID: %x", usb_product_id);
+ logger_->log_info("Using USB Product ID: {:#x}", usb_product_id);
const char *usb_serial_no = nullptr;
std::string conf_serial;
@@ -159,7 +159,7 @@ void GetUSBCamera::onSchedule(core::ProcessContext *context, core::ProcessSessio
if (!conf_serial.empty()) {
usb_serial_no = conf_serial.c_str();
- logger_->log_info("Using USB Serial No.: %s", conf_serial);
+ logger_->log_info("Using USB Serial No.: {}", conf_serial);
}
cleanupUvc();
@@ -181,7 +181,7 @@ void GetUSBCamera::onSchedule(core::ProcessContext *context, core::ProcessSessio
res = uvc_find_device(ctx_, &dev_, usb_vendor_id, usb_product_id, usb_serial_no);
if (res < 0) {
- logger_->log_error("Unable to find device: %s", uvc_strerror(res));
+ logger_->log_error("Unable to find device: {}", uvc_strerror(res));
dev_ = nullptr;
} else {
logger_->log_info("Device found");
@@ -190,7 +190,7 @@ void GetUSBCamera::onSchedule(core::ProcessContext *context, core::ProcessSessio
res = uvc_open(dev_, &devh_);
if (res < 0) {
- logger_->log_error("Unable to open device: %s", uvc_strerror(res));
+ logger_->log_error("Unable to open device: {}", uvc_strerror(res));
devh_ = nullptr;
} else {
logger_->log_info("Device opened");
@@ -213,21 +213,21 @@ void GetUSBCamera::onSchedule(core::ProcessContext *context, core::ProcessSessio
case UVC_VS_FORMAT_FRAME_BASED:
for (frame_desc = fmt_desc->frame_descs; frame_desc; frame_desc = frame_desc->next) {
uint32_t frame_fps = 10000000 / frame_desc->dwDefaultFrameInterval;
- logger_->log_info("Discovered supported format %ix%i @ %i",
+ logger_->log_info("Discovered supported format {}x{} @ {}",
frame_desc->wWidth,
frame_desc->wHeight,
frame_fps);
if (target_height > 0 && target_width > 0) {
if (frame_fps >= target_fps) {
current_width_diff = abs(frame_desc->wWidth - target_width) / static_cast<double>(target_width);
- logger_->log_debug("Current frame format width difference is %f", current_width_diff);
+ logger_->log_debug("Current frame format width difference is {}", current_width_diff);
current_height_diff = abs(frame_desc->wHeight - target_height) / static_cast<double>(target_height);
- logger_->log_debug("Current frame format height difference is %f", current_height_diff);
+ logger_->log_debug("Current frame format height difference is {}", current_height_diff);
current_diff = (current_width_diff + current_height_diff) / 2;
- logger_->log_debug("Current frame format difference is %f", current_diff);
+ logger_->log_debug("Current frame format difference is {}", current_diff);
if (min_diff < 0 || current_diff < min_diff) {
- logger_->log_info("Format %ix%i @ %i is now closest to target",
+ logger_->log_info("Format {}x{} @ {} is now closest to target",
frame_desc->wWidth,
frame_desc->wHeight,
frame_fps);
@@ -264,12 +264,12 @@ void GetUSBCamera::onSchedule(core::ProcessContext *context, core::ProcessSessio
return;
}
- logger_->log_info("Negotiating stream profile (looking for %dx%d @ %d)", width, height, fps);
+ logger_->log_info("Negotiating stream profile (looking for {}x{} @ {})", width, height, fps);
res = uvc_get_stream_ctrl_format_size(devh_, &ctrl, UVC_FRAME_FORMAT_UNCOMPRESSED, width, height, fps);
if (res < 0) {
- logger_->log_error("Failed to find a matching stream profile: %s", uvc_strerror(res));
+ logger_->log_error("Failed to find a matching stream profile: {}", uvc_strerror(res));
} else {
cb_data_.session_factory = session_factory;
@@ -300,7 +300,7 @@ void GetUSBCamera::onSchedule(core::ProcessContext *context, core::ProcessSessio
res = uvc_start_streaming(devh_, &ctrl, onFrame, &cb_data_, 0);
if (res < 0) {
- logger_->log_error("Unable to start streaming: %s", uvc_strerror(res));
+ logger_->log_error("Unable to start streaming: {}", uvc_strerror(res));
} else {
logger_->log_info("Streaming...");
@@ -364,7 +364,7 @@ GetUSBCamera::PNGWriteCallback::PNGWriteCallback(std::shared_ptr<std::mutex> wri
int64_t GetUSBCamera::PNGWriteCallback::operator()(const std::shared_ptr<io::OutputStream>& stream) {
std::lock_guard<std::mutex> lock(*png_write_mtx_);
- logger_->log_info("Writing %d bytes of raw capture data to PNG output", frame_->data_bytes);
+ logger_->log_info("Writing {} bytes of raw capture data to PNG output", frame_->data_bytes);
png_structp png = png_create_write_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr);
if (!png) {
diff --git a/extensions/windows-event-log/Bookmark.cpp b/extensions/windows-event-log/Bookmark.cpp
index dc75fac65..a4a08f53e 100644
--- a/extensions/windows-event-log/Bookmark.cpp
+++ b/extensions/windows-event-log/Bookmark.cpp
@@ -53,7 +53,7 @@ Bookmark::Bookmark(const wel::EventPath& path,
migrated_path += "-migrated";
std::filesystem::rename(filePath_, migrated_path);
} else {
- logger_->log_warn("Could not migrate state from specified State Directory %s", bookmarkRootDir.string());
+ logger_->log_warn("Could not migrate state from specified State Directory {}", bookmarkRootDir);
}
}
} else {
@@ -130,7 +130,7 @@ bool Bookmark::saveBookmarkXml(const std::wstring& bookmarkXml) {
bool Bookmark::saveBookmark(EVT_HANDLE event_handle) {
auto bookmark_xml = getNewBookmarkXml(event_handle);
if (!bookmark_xml) {
- logger_->log_error("%s", bookmark_xml.error());
+ logger_->log_error("{}", bookmark_xml.error());
return false;
}
@@ -139,7 +139,7 @@ bool Bookmark::saveBookmark(EVT_HANDLE event_handle) {
nonstd::expected<std::wstring, std::string> Bookmark::getNewBookmarkXml(EVT_HANDLE hEvent) {
if (!EvtUpdateBookmark(hBookmark_.get(), hEvent)) {
- return nonstd::make_unexpected(fmt::format("EvtUpdateBookmark failed due to %s", utils::OsUtils::windowsErrorToErrorCode(GetLastError()).message()));
+ return nonstd::make_unexpected(fmt::format("EvtUpdateBookmark failed due to {}", utils::OsUtils::windowsErrorToErrorCode(GetLastError()).message()));
}
// Render the bookmark as an XML string that can be persisted.
logger_->log_trace("Rendering new bookmark");
@@ -152,13 +152,13 @@ nonstd::expected<std::wstring, std::string> Bookmark::getNewBookmarkXml(EVT_HAND
auto last_error = GetLastError();
if (last_error != ERROR_INSUFFICIENT_BUFFER)
- return nonstd::make_unexpected(fmt::format("EvtRender failed due to %s", utils::OsUtils::windowsErrorToErrorCode(last_error).message()));
+ return nonstd::make_unexpected(fmt::format("EvtRender failed due to {}", utils::OsUtils::windowsErrorToErrorCode(last_error).message()));
bufferSize = bufferUsed;
std::vector<wchar_t> buf(bufferSize / 2 + 1);
if (!EvtRender(nullptr, hBookmark_.get(), EvtRenderBookmark, bufferSize, buf.data(), &bufferUsed, &propertyCount)) {
- return nonstd::make_unexpected(fmt::format("EvtRender failed due to %s", utils::OsUtils::windowsErrorToErrorCode(GetLastError()).message()));
+ return nonstd::make_unexpected(fmt::format("EvtRender failed due to {}", utils::OsUtils::windowsErrorToErrorCode(GetLastError()).message()));
}
return std::wstring(buf.data());
@@ -192,7 +192,7 @@ bool Bookmark::getBookmarkXmlFromFile(std::wstring& bookmarkXml) {
// '!' should be at the end of bookmark.
auto pos = bookmarkXml.find(L'!');
if (std::wstring::npos == pos) {
- logger_->log_error("No '!' in bookmarXml '%ls'", bookmarkXml.c_str());
+ logger_->log_error("No '!' in bookmarXml '{}'", utils::to_string(bookmarkXml));
bookmarkXml.clear();
return false;
}
diff --git a/extensions/windows-event-log/Bookmark.h b/extensions/windows-event-log/Bookmark.h
index 0d4d6bf4d..832a33f2e 100644
--- a/extensions/windows-event-log/Bookmark.h
+++ b/extensions/windows-event-log/Bookmark.h
@@ -33,7 +33,7 @@
namespace org::apache::nifi::minifi::processors {
-#define LOG_LAST_ERROR(func) logger_->log_error("!"#func" error %x", GetLastError())
+#define LOG_LAST_ERROR(func) logger_->log_error("!"#func" error {:#x}", GetLastError())
class Bookmark {
public:
diff --git a/extensions/windows-event-log/CollectorInitiatedSubscription.cpp b/extensions/windows-event-log/CollectorInitiatedSubscription.cpp
index 6088332d8..1930c3b51 100644
--- a/extensions/windows-event-log/CollectorInitiatedSubscription.cpp
+++ b/extensions/windows-event-log/CollectorInitiatedSubscription.cpp
@@ -34,6 +34,8 @@
#include "core/Resource.h"
#include "utils/gsl.h"
#include "utils/OptionalUtils.h"
+#include "utils/OsUtils.h"
+#include "utils/UnicodeConversion.h"
#pragma comment(lib, "wevtapi.lib")
#pragma comment(lib, "Wecapi.lib")
@@ -113,7 +115,7 @@ void CollectorInitiatedSubscription::onTrigger(const std::shared_ptr<core::Proce
| utils::transform([](const auto& time_period_value) { return time_period_value.getMilliseconds().count(); });
inactive_duration_to_reconnect_ms && *inactive_duration_to_reconnect_ms > 0) {
if ((now - lastActivityTimestamp_) > gsl::narrow<uint64_t>(*inactive_duration_to_reconnect_ms)) {
- logger_->log_info("Exceeds configured 'inactive duration to reconnect' %lld ms. Unsubscribe to reconnect..", *inactive_duration_to_reconnect_ms);
+ logger_->log_info("Exceeds configured 'inactive duration to reconnect' {} ms. Unsubscribe to reconnect..", *inactive_duration_to_reconnect_ms);
unsubscribe();
}
}
@@ -274,7 +276,7 @@ bool CollectorInitiatedSubscription::checkSubscriptionRuntimeStatus() {
const auto lastError = vProperty->UInt32Val;
if (lastError == 0 && (runtimeStatus == EcRuntimeStatusActiveStatusActive || runtimeStatus == EcRuntimeStatusActiveStatusTrying)) {
- logger_->log_info("Subscription '%ws': status '%ws', no error.", subscription_name_.c_str(), strRuntimeStatus.c_str());
+ logger_->log_info("Subscription '{}': status '{}', no error.", utils::to_string(subscription_name_), utils::to_string(strRuntimeStatus));
return true;
}
@@ -293,7 +295,10 @@ bool CollectorInitiatedSubscription::checkSubscriptionRuntimeStatus() {
lastErrorMessage = vProperty->StringVal;
}
- logger_->log_error("Runtime status: %ws, last error: %d, last error message: %ws", strRuntimeStatus.c_str(), lastError, lastErrorMessage.c_str());
+ logger_->log_error("Runtime status: {}, last error: {}, last error message: {}",
+ utils::to_string(strRuntimeStatus),
+ lastError,
+ utils::to_string(lastErrorMessage));
return false;
}
@@ -453,7 +458,7 @@ bool CollectorInitiatedSubscription::createSubscription(const std::shared_ptr<co
bool CollectorInitiatedSubscription::subscribe(const std::shared_ptr<core::ProcessContext> &context) {
gsl_Expects(context);
- logger_->log_debug("CollectorInitiatedSubscription: MaxBufferSize %lld", max_buffer_size_.getValue());
+ logger_->log_debug("CollectorInitiatedSubscription: MaxBufferSize {}", max_buffer_size_.getValue());
const auto channel = context->getProperty(Channel).value();
const auto query = context->getProperty(Query).value();
@@ -471,7 +476,7 @@ bool CollectorInitiatedSubscription::subscribe(const std::shared_ptr<core::Proce
if (ERROR_EVT_QUERY_RESULT_STALE == reinterpret_cast<intptr_t>(hEvent)) {
logger->log_error("Received missing event notification. Consider triggering processor more frequently or increasing queue size.");
} else {
- logger->log_error("Received the following Win32 error: %x", hEvent);
+ logger->log_error("Received the following Win32 error: {:#x}", reinterpret_cast<intptr_t>(hEvent));
}
} else if (action == EvtSubscribeActionDeliver) {
DWORD size = 0;
@@ -481,7 +486,7 @@ bool CollectorInitiatedSubscription::subscribe(const std::shared_ptr<core::Proce
if (!EvtRender(NULL, hEvent, EvtRenderEventXml, size, 0, &used, &propertyCount)) {
if (ERROR_INSUFFICIENT_BUFFER == GetLastError()) {
if (used > pCollectorInitiatedSubscription->max_buffer_size_.getValue()) {
- logger->log_error("Dropping event %p because it couldn't be rendered within %llu bytes.", hEvent, pCollectorInitiatedSubscription->max_buffer_size_.getValue());
+ logger->log_error("Dropping event {} because it couldn't be rendered within {} bytes.", hEvent, pCollectorInitiatedSubscription->max_buffer_size_.getValue());
return 0UL;
}
@@ -492,7 +497,7 @@ bool CollectorInitiatedSubscription::subscribe(const std::shared_ptr<core::Proce
pCollectorInitiatedSubscription->renderedXMLs_.enqueue(std::move(xml));
} else {
- logger->log_error("EvtRender returned the following error code: %d.", GetLastError());
+ logger->log_error("EvtRender returned the following error code: {}.", GetLastError());
}
}
}
@@ -512,7 +517,7 @@ bool CollectorInitiatedSubscription::subscribe(const std::shared_ptr<core::Proce
EvtSubscribeToFutureEvents | EvtSubscribeStrict);
if (!subscriptionHandle_) {
- logger_->log_error("Unable to subscribe with provided parameters, received the following error code: %d", GetLastError());
+ logger_->log_error("Unable to subscribe with provided parameters, received the following error code: {}", GetLastError());
return false;
}
@@ -570,25 +575,12 @@ void CollectorInitiatedSubscription::notifyStop() {
}
void CollectorInitiatedSubscription::logError(int line, const std::string& error) {
- logger_->log_error("Line %d: %s\n", error.c_str());
+ logger_->log_error("Line {}: {}\n", line, error);
}
void CollectorInitiatedSubscription::logWindowsError(int line, const std::string& info) {
- auto error = GetLastError();
-
- LPVOID lpMsg{};
- FormatMessage(
- FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
- NULL,
- error,
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
- (LPTSTR)&lpMsg,
- 0,
- NULL);
-
- logger_->log_error("Line %d: '%s': error %d: %s\n", line, info.c_str(), static_cast<int>(error), reinterpret_cast<char *>(lpMsg));
-
- LocalFree(lpMsg);
+ auto last_error = utils::OsUtils::windowsErrorToErrorCode(GetLastError());
+ logger_->log_error("Line {}: '{}': error {}: {}", line, info, last_error, last_error.message());
}
REGISTER_RESOURCE(CollectorInitiatedSubscription, Processor);
diff --git a/extensions/windows-event-log/ConsumeWindowsEventLog.cpp b/extensions/windows-event-log/ConsumeWindowsEventLog.cpp
index 6fc0c5ff5..fbbd364ed 100644
--- a/extensions/windows-event-log/ConsumeWindowsEventLog.cpp
+++ b/extensions/windows-event-log/ConsumeWindowsEventLog.cpp
@@ -45,11 +45,11 @@
#include "core/Resource.h"
#include "Bookmark.h"
#include "utils/Deleters.h"
-#include "utils/UnicodeConversion.h"
#include "logging/LoggerConfiguration.h"
#include "utils/gsl.h"
#include "utils/OsUtils.h"
+#include "utils/UnicodeConversion.h"
#include "utils/ProcessorConfigUtils.h"
#pragma comment(lib, "wevtapi.lib")
@@ -69,7 +69,8 @@ ConsumeWindowsEventLog::ConsumeWindowsEventLog(const std::string& name, const ut
if (GetComputerName(buff, &size)) {
computerName_ = buff;
} else {
- LogWindowsError();
+ auto last_error = utils::OsUtils::windowsErrorToErrorCode(GetLastError());
+ logger_->log_error("{}: {}", last_error, last_error.message());
}
}
@@ -128,12 +129,12 @@ void ConsumeWindowsEventLog::onSchedule(const std::shared_ptr<core::ProcessConte
auto key = utils::StringUtils::trim(splitKeyAndValue.at(0));
auto value = utils::StringUtils::trim(splitKeyAndValue.at(1));
if (!insertHeaderName(header_names_, key, value)) {
- logger_->log_error("%s is an invalid key for the header map", key);
+ logger_->log_error("{} is an invalid key for the header map", key);
}
} else if (splitKeyAndValue.size() == 1) {
auto key = utils::StringUtils::trim(splitKeyAndValue.at(0));
if (!insertHeaderName(header_names_, key, "")) {
- logger_->log_error("%s is an invalid key for the header map", key);
+ logger_->log_error("{} is an invalid key for the header map", key);
}
}
}
@@ -188,10 +189,10 @@ void ConsumeWindowsEventLog::onSchedule(const std::shared_ptr<core::ProcessConte
}
context->getProperty(MaxBufferSize, max_buffer_size_);
- logger_->log_debug("ConsumeWindowsEventLog: MaxBufferSize %" PRIu64, max_buffer_size_);
+ logger_->log_debug("ConsumeWindowsEventLog: MaxBufferSize {}", max_buffer_size_);
context->getProperty(CacheSidLookups, cache_sid_lookups_);
- logger_->log_debug("ConsumeWindowsEventLog: will%s cache SID to name lookups", cache_sid_lookups_ ? "" : " not");
+ logger_->log_debug("ConsumeWindowsEventLog: will{} cache SID to name lookups", cache_sid_lookups_ ? "" : " not");
provenanceUri_ = "winlog://" + computerName_ + "/" + path_.str() + "?" + query;
logger_->log_trace("Successfully configured CWEL");
@@ -202,7 +203,7 @@ bool ConsumeWindowsEventLog::commitAndSaveBookmark(const std::wstring &bookmark_
const TimeDiff time_diff;
session->commit();
context->getStateManager()->beginTransaction();
- logger_->log_debug("processQueue commit took %" PRId64 " ms", time_diff());
+ logger_->log_debug("processQueue commit took {}", time_diff());
}
if (!bookmark_->saveBookmarkXml(bookmark_xml)) {
@@ -227,7 +228,8 @@ std::tuple<size_t, std::wstring> ConsumeWindowsEventLog::processEventLogs(const
DWORD handles_set_count{};
if (!EvtNext(event_query_results, 1, &next_event, EVT_NEXT_TIMEOUT_MS, 0, &handles_set_count)) {
if (ERROR_NO_MORE_ITEMS != GetLastError()) {
- LogWindowsError("Failed to get next event");
+ auto last_error = utils::OsUtils::windowsErrorToErrorCode(GetLastError());
+ logger_->log_error("Failed to get next event: {}: {}", last_error, last_error.message());
continue;
/* According to MS this iteration should only end when the return value is false AND
the error code is NO_MORE_ITEMS. See the following page for further details:
@@ -240,12 +242,12 @@ std::tuple<size_t, std::wstring> ConsumeWindowsEventLog::processEventLogs(const
logger_->log_trace("Succesfully got the next event, performing event rendering");
auto event_render = createEventRender(next_event);
if (!event_render) {
- logger_->log_error("%s", event_render.error());
+ logger_->log_error("{}", event_render.error());
continue;
}
auto new_bookmark_xml = bookmark_->getNewBookmarkXml(next_event);
if (!new_bookmark_xml) {
- logger_->log_error("%s", new_bookmark_xml.error());
+ logger_->log_error("{}", new_bookmark_xml.error());
continue;
}
bookmark_xml = std::move(*new_bookmark_xml);
@@ -274,7 +276,7 @@ void ConsumeWindowsEventLog::onTrigger(const std::shared_ptr<core::ProcessContex
size_t processed_event_count = 0;
const TimeDiff time_diff;
const auto timeGuard = gsl::finally([&]() {
- logger_->log_debug("processed %zu Events in %" PRId64 " ms", processed_event_count, time_diff());
+ logger_->log_debug("processed {} Events in {}", processed_event_count, time_diff());
});
wel::unique_evt_handle event_query_results{EvtQuery(nullptr, path_.wstr().c_str(), wstr_query_.c_str(), path_.getQueryFlags())};
@@ -284,7 +286,7 @@ void ConsumeWindowsEventLog::onTrigger(const std::shared_ptr<core::ProcessContex
return;
}
- logger_->log_trace("Retrieved results in Channel: %ls with Query: %ls", path_.wstr().c_str(), wstr_query_.c_str());
+ logger_->log_trace("Retrieved results in Channel: {} with Query: {}", utils::to_string(path_.wstr()), utils::to_string(wstr_query_));
auto bookmark_handle = bookmark_->getBookmarkHandleFromXML();
if (!bookmark_handle) {
@@ -312,7 +314,7 @@ void ConsumeWindowsEventLog::onTrigger(const std::shared_ptr<core::ProcessContex
}
wel::WindowsEventLogHandler& ConsumeWindowsEventLog::getEventLogHandler(const std::string & name) {
- logger_->log_trace("Getting Event Log Handler corresponding to %s", name.c_str());
+ logger_->log_trace("Getting Event Log Handler corresponding to {}", name.c_str());
auto provider = providers_.find(name);
if (provider != std::end(providers_)) {
logger_->log_trace("Found the handler");
@@ -324,9 +326,9 @@ wel::WindowsEventLogHandler& ConsumeWindowsEventLog::getEventLogHandler(const st
auto opened_publisher_metadata_provider = EvtOpenPublisherMetadata(nullptr, widechar, nullptr, 0, 0);
if (!opened_publisher_metadata_provider)
- logger_->log_warn("EvtOpenPublisherMetadata failed due to %s", utils::OsUtils::windowsErrorToErrorCode(GetLastError()).message());
+ logger_->log_warn("EvtOpenPublisherMetadata failed due to {}", utils::OsUtils::windowsErrorToErrorCode(GetLastError()).message());
providers_[name] = wel::WindowsEventLogHandler(opened_publisher_metadata_provider);
- logger_->log_info("Handler not found for %s, creating. Number of cached handlers: %zu", name, providers_.size());
+ logger_->log_info("Handler not found for {}, creating. Number of cached handlers: {}", name, providers_.size());
return providers_[name];
}
@@ -387,7 +389,7 @@ void ConsumeWindowsEventLog::substituteXMLPercentageItems(pugi::xml_document& do
// Add "" to xmlPercentageItemsResolutions_ - don't need to call FormaMessage for this 'key' again.
xmlPercentageItemsResolutions_.insert({key, ""});
- logger_->log_error("!FormatMessage error: %x. '%s' is not found in msobjs.dll.", GetLastError(), key.c_str());
+ logger_->log_error("!FormatMessage error: {:#x}. '{}' is not found in msobjs.dll.", GetLastError(), key.c_str());
}
} else {
value = it->second;
@@ -428,11 +430,11 @@ nonstd::expected<std::string, std::string> ConsumeWindowsEventLog::renderEventAs
if (!EvtRender(nullptr, event_handle, EvtRenderEventXml, size, buf.get(), &used, &propertyCount)) {
DWORD last_error = GetLastError();
if (ERROR_INSUFFICIENT_BUFFER != last_error) {
- std::string error_message = fmt::format("EvtRender failed due to %s", utils::OsUtils::windowsErrorToErrorCode(last_error).message());
+ std::string error_message = fmt::format("EvtRender failed due to {}", utils::OsUtils::windowsErrorToErrorCode(last_error).message());
return nonstd::make_unexpected(error_message);
}
if (used > max_buffer_size_) {
- std::string error_message = fmt::format("Dropping event because it couldn't be rendered within %" PRIu64 " bytes.", max_buffer_size_);
+ std::string error_message = fmt::format("Dropping event because it couldn't be rendered within {} bytes.", max_buffer_size_);
return nonstd::make_unexpected(error_message);
}
size = used;
@@ -440,11 +442,11 @@ nonstd::expected<std::string, std::string> ConsumeWindowsEventLog::renderEventAs
if (!buf)
return nonstd::make_unexpected("malloc failed");
if (!EvtRender(nullptr, event_handle, EvtRenderEventXml, size, buf.get(), &used, &propertyCount)) {
- std::string error_message = fmt::format("EvtRender failed due to %s", utils::OsUtils::windowsErrorToErrorCode(GetLastError()).message());
+ std::string error_message = fmt::format("EvtRender failed due to {}", utils::OsUtils::windowsErrorToErrorCode(GetLastError()).message());
return nonstd::make_unexpected(error_message);
}
}
- logger_->log_trace("Event rendered with size %" PRIu32, used);
+ logger_->log_trace("Event rendered with size {}", used);
return utils::to_string(std::wstring{buf.get()});
}
@@ -576,7 +578,7 @@ void ConsumeWindowsEventLog::refreshTimeZoneData() {
timezone_name_ = utils::to_string(tzstr);
timezone_offset_ = tzoffset.str();
- logger_->log_trace("Timezone name: %s, offset: %s", timezone_name_, timezone_offset_);
+ logger_->log_trace("Timezone name: {}, offset: {}", timezone_name_, timezone_offset_);
}
void ConsumeWindowsEventLog::putEventRenderFlowFileToSession(const cwel::EventRender& eventRender, core::ProcessSession& session) const {
@@ -602,7 +604,7 @@ void ConsumeWindowsEventLog::putEventRenderFlowFileToSession(const cwel::EventRe
}
if (output_format_ == cwel::OutputFormat::JSON) {
- logger_->log_trace("Writing rendered %s JSON to a flow file", std::string{magic_enum::enum_name(json_format_)});
+ logger_->log_trace("Writing rendered {} JSON to a flow file", magic_enum::enum_name(json_format_));
commitFlowFile(eventRender.json, "application/json");
}
}
@@ -615,24 +617,6 @@ void ConsumeWindowsEventLog::addMatchedFieldsAsAttributes(const cwel::EventRende
}
}
-void ConsumeWindowsEventLog::LogWindowsError(const std::string& error) const {
- auto error_id = GetLastError();
- LPVOID lpMsg;
-
- FormatMessage(
- FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM,
- nullptr,
- error_id,
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
- (LPTSTR)&lpMsg,
- 0, nullptr);
-
- logger_->log_error((error + " %x: %s\n").c_str(), static_cast<int>(error_id), reinterpret_cast<char *>(lpMsg));
-
- LocalFree(lpMsg);
-}
-
std::function<std::string(const std::string&)> ConsumeWindowsEventLog::userIdToUsernameFunction() const {
static constexpr auto lookup = &utils::OsUtils::userIdToUsername;
if (cache_sid_lookups_) {
diff --git a/extensions/windows-event-log/ConsumeWindowsEventLog.h b/extensions/windows-event-log/ConsumeWindowsEventLog.h
index 5dff6cd9e..a9f8a356d 100644
--- a/extensions/windows-event-log/ConsumeWindowsEventLog.h
+++ b/extensions/windows-event-log/ConsumeWindowsEventLog.h
@@ -216,7 +216,6 @@ class ConsumeWindowsEventLog : public core::Processor {
void putEventRenderFlowFileToSession(const cwel::EventRender& eventRender, core::ProcessSession& session) const;
wel::WindowsEventLogHandler& getEventLogHandler(const std::string& name);
static bool insertHeaderName(wel::METADATA_NAMES& header, const std::string& key, const std::string& value);
- void LogWindowsError(const std::string& error = "Error") const;
nonstd::expected<cwel::EventRender, std::string> createEventRender(EVT_HANDLE eventHandle);
void substituteXMLPercentageItems(pugi::xml_document& doc);
std::function<std::string(const std::string&)> userIdToUsernameFunction() const;
@@ -225,7 +224,7 @@ class ConsumeWindowsEventLog : public core::Processor {
struct TimeDiff {
auto operator()() const {
- return int64_t{ std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now() - time_).count() };
+ return std::chrono::steady_clock::now() - time_;
}
const decltype(std::chrono::steady_clock::now()) time_ = std::chrono::steady_clock::now();
};
diff --git a/extensions/windows-event-log/TailEventLog.cpp b/extensions/windows-event-log/TailEventLog.cpp
index 36f81d696..b28cfa894 100644
--- a/extensions/windows-event-log/TailEventLog.cpp
+++ b/extensions/windows-event-log/TailEventLog.cpp
@@ -30,11 +30,9 @@
#include "core/ProcessSession.h"
#include "core/Resource.h"
-namespace org {
-namespace apache {
-namespace nifi {
-namespace minifi {
-namespace processors {
+#include "utils/OsUtils.h"
+
+namespace org::apache::nifi::minifi::processors {
void TailEventLog::initialize() {
setSupportedProperties(Properties);
@@ -53,12 +51,12 @@ void TailEventLog::onSchedule(const std::shared_ptr<core::ProcessContext> &conte
log_handle_ = OpenEventLog(NULL, log_source_.c_str());
- logger_->log_trace("TailEventLog configured to tail %s", log_source_);
+ logger_->log_trace("TailEventLog configured to tail {}", log_source_);
}
void TailEventLog::onTrigger(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::ProcessSession> &session) {
if (log_handle_ == nullptr) {
- logger_->log_debug("Handle could not be created for %s", log_source_);
+ logger_->log_debug("Handle could not be created for {}", log_source_);
}
BYTE buffer[MAX_RECORD_BUFFER_SIZE];
@@ -71,7 +69,7 @@ void TailEventLog::onTrigger(const std::shared_ptr<core::ProcessContext> &contex
GetNumberOfEventLogRecords(log_handle_, &num_records_);
current_record_ = num_records_-max_events_;
- logger_->log_trace("%d and %d", current_record_, num_records_);
+ logger_->log_trace("{} and {}", current_record_, num_records_);
if (ReadEventLog(log_handle_, EVENTLOG_FORWARDS_READ | EVENTLOG_SEEK_READ, current_record_, event_record, MAX_RECORD_BUFFER_SIZE, &bytes_to_read, &min_bytes)) {
if (bytes_to_read == 0) {
@@ -108,7 +106,8 @@ void TailEventLog::onTrigger(const std::shared_ptr<core::ProcessContext> &contex
event_record = reinterpret_cast<EVENTLOGRECORD*>(&buffer);
logger_->log_trace("All done no more");
} else {
- LogWindowsError();
+ auto last_error = utils::OsUtils::windowsErrorToErrorCode(GetLastError());
+ logger_->log_error("{}: {}", last_error, last_error.message());
logger_->log_trace("Yielding due to error");
context->yield();
}
@@ -116,8 +115,4 @@ void TailEventLog::onTrigger(const std::shared_ptr<core::ProcessContext> &contex
REGISTER_RESOURCE(TailEventLog, Processor);
-} /* namespace processors */
-} /* namespace minifi */
-} /* namespace nifi */
-} /* namespace apache */
-} /* namespace org */
+} // namespace org::apache::nifi::minifi::processors
diff --git a/extensions/windows-event-log/TailEventLog.h b/extensions/windows-event-log/TailEventLog.h
index cf01a4b4b..729bfbc33 100644
--- a/extensions/windows-event-log/TailEventLog.h
+++ b/extensions/windows-event-log/TailEventLog.h
@@ -119,24 +119,6 @@ class TailEventLog : public core::Processor {
return str.str();
}
- void LogWindowsError(void) {
- auto error_id = GetLastError();
- LPVOID lpMsg;
-
- FormatMessage(
- FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM,
- NULL,
- error_id,
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
- (LPTSTR)&lpMsg,
- 0, NULL);
-
- logger_->log_debug("Error %d: %s\n", static_cast<int>(error_id), reinterpret_cast<char *>(lpMsg));
-
- LocalFree(lpMsg);
- }
-
private:
std::mutex log_mutex_;
std::string log_source_;
diff --git a/libminifi/include/RemoteProcessorGroupPort.h b/libminifi/include/RemoteProcessorGroupPort.h
index 09bb18521..eb6f67714 100644
--- a/libminifi/include/RemoteProcessorGroupPort.h
+++ b/libminifi/include/RemoteProcessorGroupPort.h
@@ -165,10 +165,10 @@ class RemoteProcessorGroupPort : public core::Processor {
for (const auto& url : urls) {
utils::URL parsed_url{utils::StringUtils::trim(url)};
if (parsed_url.isValid()) {
- logger_->log_debug("Parsed RPG URL '%s' -> '%s'", url, parsed_url.hostPort());
+ logger_->log_debug("Parsed RPG URL '{}' -> '{}'", url, parsed_url.hostPort());
nifi_instances_.push_back({parsed_url.host(), parsed_url.port(), parsed_url.protocol()});
} else {
- logger_->log_error("Could not parse RPG URL '%s'", url);
+ logger_->log_error("Could not parse RPG URL '{}'", url);
}
}
}
diff --git a/libminifi/include/c2/triggers/FileUpdateTrigger.h b/libminifi/include/c2/triggers/FileUpdateTrigger.h
index 1c75325fb..5831eb5fd 100644
--- a/libminifi/include/c2/triggers/FileUpdateTrigger.h
+++ b/libminifi/include/c2/triggers/FileUpdateTrigger.h
@@ -60,7 +60,7 @@ class FileUpdateTrigger : public C2Trigger {
}
auto update_time = utils::file::last_write_time(file_);
auto last_update_l = getLastUpdate().value().time_since_epoch().count();
- logger_->log_trace("Last Update is %d and update time is %d", last_update_l , update_time.value().time_since_epoch().count());
+ logger_->log_trace("Last Update is {} and update time is {}", last_update_l , update_time.value().time_since_epoch().count());
if (update_time > getLastUpdate()) {
setLastUpdate(update_time);
update_ = true;
diff --git a/libminifi/include/core/ClassLoader.h b/libminifi/include/core/ClassLoader.h
index 9b2bc094c..96cbd1ba8 100644
--- a/libminifi/include/core/ClassLoader.h
+++ b/libminifi/include/core/ClassLoader.h
@@ -72,20 +72,20 @@ class ClassLoader {
void registerClass(const std::string &clazz, std::unique_ptr<ObjectFactory> factory) {
std::lock_guard<std::mutex> lock(internal_mutex_);
if (loaded_factories_.find(clazz) != loaded_factories_.end()) {
- logger_->log_error("Class '%s' is already registered at '%s'", clazz, name_);
+ logger_->log_error("Class '{}' is already registered at '{}'", clazz, name_);
return;
}
- logger_->log_trace("Registering class '%s' at '%s'", clazz, name_);
+ logger_->log_trace("Registering class '{}' at '{}'", clazz, name_);
loaded_factories_.insert(std::make_pair(clazz, std::move(factory)));
}
void unregisterClass(const std::string& clazz) {
std::lock_guard<std::mutex> lock(internal_mutex_);
if (loaded_factories_.erase(clazz) == 0) {
- logger_->log_error("Could not unregister non-registered class '%s' at '%s'", clazz, name_);
+ logger_->log_error("Could not unregister non-registered class '{}' at '{}'", clazz, name_);
return;
} else {
- logger_->log_trace("Unregistered class '%s' at '%s'", clazz, name_);
+ logger_->log_trace("Unregistered class '{}' at '{}'", clazz, name_);
}
}
diff --git a/libminifi/include/core/ConfigurableComponent.h b/libminifi/include/core/ConfigurableComponent.h
index d82ac0ee8..83ec09b82 100644
--- a/libminifi/include/core/ConfigurableComponent.h
+++ b/libminifi/include/core/ConfigurableComponent.h
@@ -228,13 +228,13 @@ bool ConfigurableComponent::getProperty(const std::string& name, T &value) const
if (property.getValue().getValue() == nullptr) {
// empty value
if (property.getRequired()) {
- logger_->log_error("Component %s required property %s is empty", name, property.getName());
+ logger_->log_error("Component {} required property {} is empty", name, property.getName());
throw utils::internal::RequiredPropertyMissingException("Required property is empty: " + property.getName());
}
- logger_->log_debug("Component %s property name %s, empty value", name, property.getName());
+ logger_->log_debug("Component {} property name {}, empty value", name, property.getName());
return false;
}
- logger_->log_debug("Component %s property name %s value %s", name, property.getName(), property.getValue().to_string());
+ logger_->log_debug("Component {} property name {} value {}", name, property.getName(), property.getValue().to_string());
if constexpr (std::is_base_of<TransformableValue, T>::value) {
value = T(property.getValue().operator std::string());
@@ -243,7 +243,7 @@ bool ConfigurableComponent::getProperty(const std::string& name, T &value) const
}
return true;
} else {
- logger_->log_warn("Could not find property %s", name);
+ logger_->log_warn("Could not find property {}", name);
return false;
}
}
diff --git a/libminifi/include/core/ProcessContext.h b/libminifi/include/core/ProcessContext.h
index bb72011e7..8d0547783 100644
--- a/libminifi/include/core/ProcessContext.h
+++ b/libminifi/include/core/ProcessContext.h
@@ -376,7 +376,7 @@ class ProcessContext : public controller::ControllerServiceLookup, public core::
if (configuration != nullptr && configuration->get(minifi::Configure::nifi_state_storage_local, minifi::Configure::nifi_state_storage_local_old, requestedStateStorageName)) {
auto node = controller_service_provider->getControllerServiceNode(requestedStateStorageName);
if (node == nullptr) {
- logger->log_error("Failed to find the StateStorage %s defined by %s", requestedStateStorageName, minifi::Configure::nifi_state_storage_local);
+ logger->log_error("Failed to find the StateStorage {} defined by {}", requestedStateStorageName, minifi::Configure::nifi_state_storage_local);
return nullptr;
}
return std::dynamic_pointer_cast<core::StateStorage>(node->getControllerServiceImplementation());
diff --git a/libminifi/include/core/ThreadedRepository.h b/libminifi/include/core/ThreadedRepository.h
index 7a7c36d9e..2b5ae27a2 100644
--- a/libminifi/include/core/ThreadedRepository.h
+++ b/libminifi/include/core/ThreadedRepository.h
@@ -32,7 +32,7 @@ class ThreadedRepository : public core::Repository, public core::TraceableResour
~ThreadedRepository() override {
if (running_state_.load() != RunningState::Stopped) {
- logger_->log_error("Thread of %s should have been stopped in subclass before ThreadedRepository's destruction", name_);
+ logger_->log_error("Thread of {} should have been stopped in subclass before ThreadedRepository's destruction", name_);
}
}
@@ -56,7 +56,7 @@ class ThreadedRepository : public core::Repository, public core::TraceableResour
running_state_.store(RunningState::Running);
getThread() = std::thread(&ThreadedRepository::run, this);
- logger_->log_debug("%s ThreadedRepository monitor thread start", name_);
+ logger_->log_debug("{} ThreadedRepository monitor thread start", name_);
return true;
}
@@ -71,7 +71,7 @@ class ThreadedRepository : public core::Repository, public core::TraceableResour
getThread().join();
}
running_state_.store(RunningState::Stopped);
- logger_->log_debug("%s ThreadedRepository monitor thread stop", name_);
+ logger_->log_debug("{} ThreadedRepository monitor thread stop", name_);
return true;
}
diff --git a/libminifi/include/core/TypedValues.h b/libminifi/include/core/TypedValues.h
index db237d0a4..5f9c7e3ac 100644
--- a/libminifi/include/core/TypedValues.h
+++ b/libminifi/include/core/TypedValues.h
@@ -134,7 +134,7 @@ class DataSizeValue : public TransformableValue, public state::response::UInt64V
if (auto unit_multiplier = getUnitMultiplier(unit_str)) {
value *= *unit_multiplier;
} else {
- getLogger()->log_warn("Unrecognized data unit: '%s', in the future this will constitute as an error", unit_str);
+ getLogger()->log_warn("Unrecognized data unit: '{}', in the future this will constitute as an error", unit_str);
// backwards compatibility
}
}
diff --git a/libminifi/include/core/controller/StandardControllerServiceProvider.h b/libminifi/include/core/controller/StandardControllerServiceProvider.h
index 8730133fd..34539ed54 100644
--- a/libminifi/include/core/controller/StandardControllerServiceProvider.h
+++ b/libminifi/include/core/controller/StandardControllerServiceProvider.h
@@ -74,29 +74,29 @@ class StandardControllerServiceProvider : public ControllerServiceProvider, publ
}
virtual void enableAllControllerServices() {
- logger_->log_info("Enabling %u controller services", controller_map_->getAllControllerServices().size());
+ logger_->log_info("Enabling {} controller services", controller_map_->getAllControllerServices().size());
for (auto service : controller_map_->getAllControllerServices()) {
- logger_->log_info("Enabling %s", service->getName());
+ logger_->log_info("Enabling {}", service->getName());
if (!service->canEnable()) {
- logger_->log_warn("Service %s cannot be enabled", service->getName());
+ logger_->log_warn("Service {} cannot be enabled", service->getName());
continue;
}
if (!service->enable()) {
- logger_->log_warn("Could not enable %s", service->getName());
+ logger_->log_warn("Could not enable {}", service->getName());
}
}
}
virtual void disableAllControllerServices() {
- logger_->log_info("Disabling %u controller services", controller_map_->getAllControllerServices().size());
+ logger_->log_info("Disabling {} controller services", controller_map_->getAllControllerServices().size());
for (auto service : controller_map_->getAllControllerServices()) {
- logger_->log_info("Disabling %s", service->getName());
+ logger_->log_info("Disabling {}", service->getName());
if (!service->enabled()) {
- logger_->log_warn("Service %s is not enabled", service->getName());
+ logger_->log_warn("Service {} is not enabled", service->getName());
continue;
}
if (!service->disable()) {
- logger_->log_warn("Could not disable %s", service->getName());
+ logger_->log_warn("Could not disable {}", service->getName());
}
}
}
diff --git a/libminifi/include/core/extension/Utils.h b/libminifi/include/core/extension/Utils.h
index 3b6e5b8ce..e5ed814e1 100644
--- a/libminifi/include/core/extension/Utils.h
+++ b/libminifi/include/core/extension/Utils.h
@@ -57,7 +57,7 @@ struct LibraryDescriptor {
throw std::runtime_error{"File not found: " + path.string()};
}
const Timer timer{[&](const std::chrono::milliseconds elapsed) {
- core::logging::LOG_DEBUG(logger) << "Verification for '" << path << "' took " << elapsed.count() << " ms";
+ logger->log_debug("Verification for '{}' took {}", path, elapsed);
}};
const std::string_view begin_marker = "__EXTENSION_BUILD_IDENTIFIER_BEGIN__";
const std::string_view end_marker = "__EXTENSION_BUILD_IDENTIFIER_END__";
diff --git a/libminifi/include/core/logging/Logger.h b/libminifi/include/core/logging/Logger.h
index e35d15555..13a35d54e 100644
--- a/libminifi/include/core/logging/Logger.h
+++ b/libminifi/include/core/logging/Logger.h
@@ -30,8 +30,11 @@
#include "spdlog/common.h"
#include "spdlog/logger.h"
#include "utils/gsl.h"
-#include "utils/SmallString.h"
-#include "utils/meta/detected.h"
+#include "utils/Enum.h"
+#include "utils/GeneralUtils.h"
+#include "fmt/chrono.h"
+#include "fmt/std.h"
+#include "fmt/ostream.h"
namespace org::apache::nifi::minifi::core::logging {
@@ -49,59 +52,6 @@ class LoggerControl {
std::atomic<bool> is_enabled_;
};
-template<typename Arg>
-using has_const_c_str_method = decltype(std::declval<const Arg&>().c_str());
-
-template<typename Arg>
-inline decltype(auto) conditional_stringify(Arg&& arg) {
- if constexpr (utils::meta::is_detected_v<has_const_c_str_method, Arg> || std::is_scalar_v<std::decay_t<Arg>>) {
- return std::forward<Arg>(arg);
- } else if constexpr (std::is_invocable_v<Arg>) {
- return std::forward<Arg>(arg)();
- }
-}
-
-template<typename Arg>
-inline decltype(auto) conditional_convert(const Arg& val) {
- if constexpr (std::is_scalar_v<std::decay_t<Arg>>) {
- return val;
- } else if constexpr (std::is_same_v<decltype(std::declval<const Arg&>().c_str()), const char*>) {
- return val.c_str();
- }
-}
-
-template<typename ...Args>
-std::string format_string(int max_size, char const* format_str, const Args& ...args) {
- // try to use static buffer
- char buf[LOG_BUFFER_SIZE + 1];
- int result = std::snprintf(buf, LOG_BUFFER_SIZE + 1, format_str, conditional_convert(args)...);
- if (result < 0) {
- return "Error while formatting log message";
- }
- const auto buf_size = gsl::narrow<size_t>(result);
- if (buf_size <= LOG_BUFFER_SIZE) {
- // static buffer was large enough
- return {buf, max_size >= 0 ? std::min(buf_size, gsl::narrow<size_t>(max_size)) : buf_size};
- }
-
- // try to use dynamic buffer
- size_t dynamic_buffer_size = max_size < 0 ? buf_size : gsl::narrow<size_t>(std::min(result, max_size));
- std::vector<char> buffer(dynamic_buffer_size + 1); // extra '\0' character
- result = std::snprintf(buffer.data(), buffer.size(), format_str, conditional_convert(args)...);
- if (result < 0) {
- return "Error while formatting log message";
- }
- return {buffer.cbegin(), buffer.cend() - 1}; // -1 to not include the terminating '\0'
-}
-
-inline std::string format_string(int max_size, char const* format_str) {
- std::string return_value(format_str);
- if (max_size >= 0 && return_value.size() > gsl::narrow<size_t>(max_size)) {
- return return_value.substr(0, max_size);
- }
- return return_value;
-}
-
enum LOG_LEVEL {
trace = 0,
debug = 1,
@@ -112,114 +62,97 @@ enum LOG_LEVEL {
off = 6
};
+inline spdlog::level::level_enum mapToSpdLogLevel(LOG_LEVEL level) {
+ switch (level) {
+ case trace: return spdlog::level::trace;
+ case debug: return spdlog::level::debug;
+ case info: return spdlog::level::info;
+ case warn: return spdlog::level::warn;
+ case err: return spdlog::level::err;
+ case critical: return spdlog::level::critical;
+ case off: return spdlog::level::off;
+ }
+ throw std::invalid_argument(fmt::format("Invalid LOG_LEVEL {}", magic_enum::enum_underlying(level)));
+}
+
+inline LOG_LEVEL mapFromSpdLogLevel(spdlog::level::level_enum level) {
+ switch (level) {
+ case spdlog::level::trace: return LOG_LEVEL::trace;
+ case spdlog::level::debug: return LOG_LEVEL::debug;
+ case spdlog::level::info: return LOG_LEVEL::info;
+ case spdlog::level::warn: return LOG_LEVEL::warn;
+ case spdlog::level::err: return LOG_LEVEL::err;
+ case spdlog::level::critical: return LOG_LEVEL::critical;
+ case spdlog::level::off: return LOG_LEVEL::off;
+ case spdlog::level::n_levels: break;
+ }
+ throw std::invalid_argument(fmt::format("Invalid spdlog::level::level_enum {}", magic_enum::enum_underlying(level)));
+}
+
class BaseLogger {
public:
virtual ~BaseLogger();
virtual void log_string(LOG_LEVEL level, std::string str) = 0;
-
- virtual bool should_log(const LOG_LEVEL &level);
+ virtual bool should_log(LOG_LEVEL level) = 0;
+ [[nodiscard]] virtual LOG_LEVEL level() const = 0;
};
-/**
- * LogBuilder is a class to facilitate using the LOG macros below and an associated put-to operator.
- *
- */
-class LogBuilder {
- public:
- LogBuilder(BaseLogger *l, LOG_LEVEL level);
-
- ~LogBuilder();
-
- void setIgnore();
-
- void log_string(LOG_LEVEL level) const;
-
- template<typename T>
- LogBuilder &operator<<(const T &o) {
- if (!ignore)
- str << o;
- return *this;
- }
-
- bool ignore;
- BaseLogger *ptr;
- std::stringstream str;
- LOG_LEVEL level;
+const auto inline map_args = utils::overloaded {
+ [](std::invocable<> auto&& f) { return std::invoke(std::forward<decltype(f)>(f)); },
+ [](auto&& value) { return std::forward<decltype(value)>(value); }
};
+template<typename... Args>
+using log_format_string = fmt::format_string<std::invoke_result_t<decltype(map_args), Args>...>;
+
class Logger : public BaseLogger {
public:
Logger(Logger const&) = delete;
Logger& operator=(Logger const&) = delete;
+ template<typename ...Args>
+ void log_with_level(LOG_LEVEL log_level, log_format_string<Args...> fmt, Args&& ...args) {
+ return log(mapToSpdLogLevel(log_level), std::move(fmt), std::forward<Args>(args)...);
+ }
- /**
- * @brief Log critical message
- * @param format format string ('man printf' for syntax)
- * @warning does not check @p log or @p format for null. Caller must ensure parameters and format string lengths match
- */
template<typename ...Args>
- void log_critical(const char * const format, Args&& ...args) {
- log(spdlog::level::critical, format, std::forward<Args>(args)...);
+ void log_critical(log_format_string<Args...> fmt, Args&& ...args) {
+ log(spdlog::level::critical, std::move(fmt), std::forward<Args>(args)...);
}
- /**
- * @brief Log error message
- * @param format format string ('man printf' for syntax)
- * @warning does not check @p log or @p format for null. Caller must ensure parameters and format string lengths match
- */
+
template<typename ...Args>
- void log_error(const char * const format, Args&& ...args) {
- log(spdlog::level::err, format, std::forward<Args>(args)...);
+ void log_error(log_format_string<Args...> fmt, Args&& ...args) {
+ log(spdlog::level::err, std::move(fmt), std::forward<Args>(args)...);
}
- /**
- * @brief Log warn message
- * @param format format string ('man printf' for syntax)
- * @warning does not check @p log or @p format for null. Caller must ensure parameters and format string lengths match
- */
template<typename ...Args>
- void log_warn(const char * const format, Args&& ...args) {
- log(spdlog::level::warn, format, std::forward<Args>(args)...);
+ void log_warn(log_format_string<Args...> fmt, Args&& ...args) {
+ log(spdlog::level::warn, std::move(fmt), std::forward<Args>(args)...);
}
- /**
- * @brief Log info message
- * @param format format string ('man printf' for syntax)
- * @warning does not check @p log or @p format for null. Caller must ensure parameters and format string lengths match
- */
template<typename ...Args>
- void log_info(const char * const format, Args&& ...args) {
- log(spdlog::level::info, format, std::forward<Args>(args)...);
+ void log_info(log_format_string<Args...> fmt, Args&& ...args) {
+ log(spdlog::level::info, std::move(fmt), std::forward<Args>(args)...);
}
- /**
- * @brief Log debug message
- * @param format format string ('man printf' for syntax)
- * @warning does not check @p log or @p format for null. Caller must ensure parameters and format string lengths match
- */
template<typename ...Args>
- void log_debug(const char * const format, Args&& ...args) {
- log(spdlog::level::debug, format, std::forward<Args>(args)...);
+ void log_debug(log_format_string<Args...> fmt, Args&& ...args) {
+ log(spdlog::level::debug, std::move(fmt), std::forward<Args>(args)...);
}
- /**
- * @brief Log trace message
- * @param format format string ('man printf' for syntax)
- * @warning does not check @p log or @p format for null. Caller must ensure parameters and format string lengths match
- */
template<typename ...Args>
- void log_trace(const char * const format, Args&& ...args) {
- log(spdlog::level::trace, format, std::forward<Args>(args)...);
+ void log_trace(log_format_string<Args...> fmt, Args&& ...args) {
+ log(spdlog::level::trace, std::move(fmt), std::forward<Args>(args)...);
}
void set_max_log_size(int size) {
max_log_size_ = size;
}
- bool should_log(const LOG_LEVEL &level) override;
-
+ bool should_log(LOG_LEVEL level) override;
void log_string(LOG_LEVEL level, std::string str) override;
+ LOG_LEVEL level() const override;
virtual std::optional<std::string> get_id() = 0;
@@ -234,33 +167,34 @@ class Logger : public BaseLogger {
std::mutex mutex_;
private:
+ std::string trimToMaxSizeAndAddId(std::string my_string) {
+ auto max_log_size = max_log_size_.load();
+ if (max_log_size >= 0 && my_string.size() > gsl::narrow<size_t>(max_log_size))
+ my_string = my_string.substr(0, max_log_size);
+ if (auto id = get_id()) {
+ my_string += *id;
+ }
+ return my_string;
+ }
+
+ template<typename ...Args>
+ std::string stringify(fmt::format_string<Args...> fmt, Args&&... args) {
+ auto log_message = fmt::format(std::move(fmt), std::forward<Args>(args)...);
+ return trimToMaxSizeAndAddId(std::move(log_message));
+ }
+
template<typename ...Args>
- inline void log(spdlog::level::level_enum level, const char* const format, Args&& ...args) {
+ inline void log(spdlog::level::level_enum level, log_format_string<Args...> fmt, Args&& ...args) {
if (controller_ && !controller_->is_enabled())
- return;
+ return;
std::lock_guard<std::mutex> lock(mutex_);
if (!delegate_->should_log(level)) {
return;
}
- auto str = format_string(max_log_size_.load(), format, conditional_stringify(std::forward<Args>(args))...);
- if (const auto id = get_id()) {
- str = str + *id;
- }
- delegate_->log(level, str);
+ delegate_->log(level, stringify(std::move(fmt), map_args(std::forward<Args>(args))...));
}
std::atomic<int> max_log_size_{LOG_BUFFER_SIZE};
};
-#define LOG_DEBUG(x) LogBuilder((x).get(), org::apache::nifi::minifi::core::logging::LOG_LEVEL::debug)
-
-#define LOG_INFO(x) LogBuilder((x).get(), org::apache::nifi::minifi::core::logging::LOG_LEVEL::info)
-
-#define LOG_TRACE(x) LogBuilder((x).get(), org::apache::nifi::minifi::core::logging::LOG_LEVEL::trace)
-
-#define LOG_ERROR(x) LogBuilder((x).get(), org::apache::nifi::minifi::core::logging::LOG_LEVEL::err)
-
-#define LOG_WARN(x) LogBuilder((x).get(), org::apache::nifi::minifi::core::logging::LOG_LEVEL::warn)
-
-#define LOG_CRITICAL(x) LogBuilder((x).get(), org::apache::nifi::minifi::core::logging::LOG_LEVEL::critical)
} // namespace org::apache::nifi::minifi::core::logging
diff --git a/libminifi/include/sitetosite/RawSocketProtocol.h b/libminifi/include/sitetosite/RawSocketProtocol.h
index b209f7d27..cf5224d5c 100644
--- a/libminifi/include/sitetosite/RawSocketProtocol.h
+++ b/libminifi/include/sitetosite/RawSocketProtocol.h
@@ -131,7 +131,7 @@ class RawSiteToSiteClient : public sitetosite::SiteToSiteClient {
// read Respond
virtual int readRespond(const std::shared_ptr<Transaction> &transaction, RespondCode &code, std::string &message);
// write respond
- virtual int writeRespond(const std::shared_ptr<Transaction> &transaction, RespondCode code, std::string message);
+ virtual int writeRespond(const std::shared_ptr<Transaction> &transaction, RespondCode code, const std::string& message);
// getRespondCodeContext
RespondCodeContext *getRespondCodeContext(RespondCode code) override {
return SiteToSiteClient::getRespondCodeContext(code);
diff --git a/libminifi/include/utils/LogUtils.h b/libminifi/include/utils/LogUtils.h
index 6dc8df015..c8d852c9b 100644
--- a/libminifi/include/utils/LogUtils.h
+++ b/libminifi/include/utils/LogUtils.h
@@ -33,31 +33,30 @@ enum class LogLevelOption {
LOGGING_OFF
};
-template<typename... Args>
-void logWithLevel(const std::shared_ptr<core::logging::Logger>& logger, LogLevelOption log_level, Args&&... args) {
- switch (log_level) {
- case LogLevelOption::LOGGING_TRACE:
- logger->log_trace(std::forward<Args>(args)...);
- break;
- case LogLevelOption::LOGGING_DEBUG:
- logger->log_debug(std::forward<Args>(args)...);
- break;
- case LogLevelOption::LOGGING_INFO:
- logger->log_info(std::forward<Args>(args)...);
- break;
- case LogLevelOption::LOGGING_WARN:
- logger->log_warn(std::forward<Args>(args)...);
- break;
- case LogLevelOption::LOGGING_ERROR:
- logger->log_error(std::forward<Args>(args)...);
- break;
- case LogLevelOption::LOGGING_CRITICAL:
- logger->log_critical(std::forward<Args>(args)...);
- break;
- case LogLevelOption::LOGGING_OFF:
- default:
- break;
+inline LogLevelOption mapToLogLevelOption(core::logging::LOG_LEVEL level) {
+ switch (level) {
+ case core::logging::trace: return LogLevelOption::LOGGING_TRACE;
+ case core::logging::debug: return LogLevelOption::LOGGING_DEBUG;
+ case core::logging::info: return LogLevelOption::LOGGING_INFO;
+ case core::logging::warn: return LogLevelOption::LOGGING_WARN;
+ case core::logging::err: return LogLevelOption::LOGGING_ERROR;
+ case core::logging::critical: return LogLevelOption::LOGGING_CRITICAL;
+ case core::logging::off: return LogLevelOption::LOGGING_OFF;
+ }
+ throw std::invalid_argument(fmt::format("Invalid LOG_LEVEL {}", magic_enum::enum_underlying(level)));
+}
+
+inline core::logging::LOG_LEVEL mapToLogLevel(LogLevelOption option) {
+ switch (option) {
+ case LogLevelOption::LOGGING_TRACE: return core::logging::trace;
+ case LogLevelOption::LOGGING_DEBUG: return core::logging::debug;
+ case LogLevelOption::LOGGING_INFO: return core::logging::info;
+ case LogLevelOption::LOGGING_WARN: return core::logging::warn;
+ case LogLevelOption::LOGGING_ERROR: return core::logging::err;
+ case LogLevelOption::LOGGING_CRITICAL: return core::logging::critical;
+ case LogLevelOption::LOGGING_OFF: return core::logging::off;
}
+ throw std::invalid_argument(fmt::format("Invalid LogLevelOption {}", magic_enum::enum_underlying(option)));
}
} // namespace org::apache::nifi::minifi::utils::LogUtils
diff --git a/libminifi/include/utils/ResourceQueue.h b/libminifi/include/utils/ResourceQueue.h
index 7385c18c4..5f326a6af 100644
--- a/libminifi/include/utils/ResourceQueue.h
+++ b/libminifi/include/utils/ResourceQueue.h
@@ -74,15 +74,15 @@ class ResourceQueue : public std::enable_shared_from_this<ResourceQueue<Resource
std::unique_ptr<ResourceType> resource;
// Use an existing resource, if one is available
if (internal_queue_.tryDequeue(resource)) {
- logDebug("Using available [%p] resource instance", resource.get());
+ logDebug("Using available [{}] resource instance", static_cast<void*>(resource.get()));
return ResourceWrapper(this->weak_from_this(), std::move(resource));
} else {
const std::lock_guard<std::mutex> lock(counter_mutex_);
if (!maximum_number_of_creatable_resources_ || resources_created_ < maximum_number_of_creatable_resources_) {
++resources_created_;
resource = create_new_resource_();
- logDebug("Created new [%p] resource instance. Number of instances: %d%s.",
- resource.get(),
+ logDebug("Created new [{}] resource instance. Number of instances: {}{}.",
+ static_cast<void*>(resource.get()),
resources_created_,
maximum_number_of_creatable_resources_ ? " / " + std::to_string(*maximum_number_of_creatable_resources_) : "");
return ResourceWrapper(this->weak_from_this(), std::move(resource));
@@ -108,16 +108,16 @@ class ResourceQueue : public std::enable_shared_from_this<ResourceQueue<Resource
private:
void returnResource(std::unique_ptr<ResourceType> resource) {
- logDebug("Returning [%p] resource", resource.get());
+ logDebug("Returning [{}] resource", static_cast<void*>(resource.get()));
if (reset_fn_)
reset_fn_.value()(*resource);
internal_queue_.enqueue(std::move(resource));
}
template<typename ...Args>
- void logDebug(const char * const format, Args&& ...args) {
+ void logDebug(core::logging::log_format_string<Args...> fmt, Args&& ...args) {
if (logger_)
- logger_->log_debug(format, std::forward<Args>(args)...);
+ logger_->log_debug(fmt, std::forward<Args>(args)...);
}
const std::function<std::unique_ptr<ResourceType>()> create_new_resource_;
diff --git a/libminifi/include/utils/SmallString.h b/libminifi/include/utils/SmallString.h
index 31c149e32..2ff5dd9b6 100644
--- a/libminifi/include/utils/SmallString.h
+++ b/libminifi/include/utils/SmallString.h
@@ -20,12 +20,9 @@
#include <ostream>
#include <string>
#include <utility>
+#include "fmt/format.h"
-namespace org {
-namespace apache {
-namespace nifi {
-namespace minifi {
-namespace utils {
+namespace org::apache::nifi::minifi::utils {
template<size_t N>
class SmallString : public std::array<char, N + 1> {
@@ -91,8 +88,19 @@ class SmallString : public std::array<char, N + 1> {
}
};
-} // namespace utils
-} // namespace minifi
-} // namespace nifi
-} // namespace apache
-} // namespace org
+} // namespace org::apache::nifi::minifi::utils
+
+template <size_t N>
+struct fmt::formatter<org::apache::nifi::minifi::utils::SmallString<N>> {
+ formatter<std::string_view> string_view_formatter;
+
+ template <typename ParseContext>
+ constexpr auto parse(ParseContext& ctx) {
+ return string_view_formatter.parse(ctx);
+ }
+
+ template <typename FormatContext>
+ auto format(const org::apache::nifi::minifi::utils::SmallString<N>& small_string, FormatContext& ctx) {
+ return string_view_formatter.format(small_string.view(), ctx);
+ }
+};
diff --git a/libminifi/include/utils/crypto/ciphers/Aes256Ecb.h b/libminifi/include/utils/crypto/ciphers/Aes256Ecb.h
index 688cb2863..0e920afec 100644
--- a/libminifi/include/utils/crypto/ciphers/Aes256Ecb.h
+++ b/libminifi/include/utils/crypto/ciphers/Aes256Ecb.h
@@ -58,10 +58,8 @@ class Aes256EcbCipher {
bool operator==(const Aes256EcbCipher& other) const;
private:
- template<typename ...Args>
- static void handleError(const char* format, Args&& ...args) {
- std::string error_msg = core::logging::format_string(-1, format, core::logging::conditional_stringify(std::forward<Args>(args))...);
- logger_->log_error("%s", error_msg);
+ static void handleError(const std::string& error_msg) {
+ logger_->log_error("{}", error_msg);
throw CipherError(error_msg);
}
diff --git a/libminifi/include/utils/file/FileUtils.h b/libminifi/include/utils/file/FileUtils.h
index 440f57823..5c4d5ea87 100644
--- a/libminifi/include/utils/file/FileUtils.h
+++ b/libminifi/include/utils/file/FileUtils.h
@@ -248,13 +248,13 @@ inline void addFilesMatchingExtension(const std::shared_ptr<core::logging::Logge
const std::filesystem::path& extension,
std::vector<std::filesystem::path>& accruedFiles) {
if (!utils::file::exists(originalPath)) {
- logger->log_warn("Failed to open directory: %s", originalPath.string());
+ logger->log_warn("Failed to open directory: {}", originalPath);
return;
}
if (utils::file::is_directory(originalPath)) {
// only perform a listing while we are not empty
- logger->log_debug("Looking for files with %s extension in %s", extension.string(), originalPath.string());
+ logger->log_debug("Looking for files with {} extension in {}", extension, originalPath);
for (const auto& entry: std::filesystem::directory_iterator(originalPath,
std::filesystem::directory_options::skip_permission_denied)) {
@@ -262,18 +262,18 @@ inline void addFilesMatchingExtension(const std::shared_ptr<core::logging::Logge
addFilesMatchingExtension(logger, entry.path(), extension, accruedFiles);
} else {
if (entry.path().extension() == extension) {
- logger->log_info("Adding %s to paths", entry.path().string());
+ logger->log_info("Adding {} to paths", entry.path());
accruedFiles.push_back(entry.path());
}
}
}
} else if (std::filesystem::is_regular_file(originalPath)) {
if (originalPath.extension() == extension) {
- logger->log_info("Adding %s to paths", originalPath.string());
+ logger->log_info("Adding {} to paths", originalPath);
accruedFiles.push_back(originalPath);
}
} else {
- logger->log_error("Could not access %s", originalPath.string());
+ logger->log_error("Could not access {}", originalPath);
}
}
@@ -290,9 +290,9 @@ inline void list_dir(const std::filesystem::path& dir,
const std::function<bool(const std::filesystem::path&, const std::filesystem::path&)>& callback,
const std::shared_ptr<core::logging::Logger> &logger,
const std::function<bool(const std::filesystem::path&)>& dir_callback) {
- logger->log_debug("Performing file listing against %s", dir.string());
+ logger->log_debug("Performing file listing against {}", dir);
if (!utils::file::exists(dir)) {
- logger->log_warn("Failed to open directory: %s", dir.string());
+ logger->log_warn("Failed to open directory: {}", dir);
return;
}
diff --git a/libminifi/include/utils/net/AsioSocketUtils.h b/libminifi/include/utils/net/AsioSocketUtils.h
index f7f7cbeaf..39b05f322 100644
--- a/libminifi/include/utils/net/AsioSocketUtils.h
+++ b/libminifi/include/utils/net/AsioSocketUtils.h
@@ -127,7 +127,7 @@ class AsioSocketConnection : public io::BaseStream {
}();
if (item_found == nullptr) {
- logger_->log_error("Could not find specified network interface: '%s'", local_network_interface_);
+ logger_->log_error("Could not find specified network interface: '{}'", local_network_interface_);
return;
}
@@ -135,7 +135,7 @@ class AsioSocketConnection : public io::BaseStream {
try {
address = utils::net::sockaddr_ntop(item_found->ifa_addr);
} catch(const std::exception& ex) {
- logger_->log_error("Error occurred while getting network interface address: '%s'", ex.what());
+ logger_->log_error("Error occurred while getting network interface address: '{}'", ex.what());
return;
}
@@ -143,12 +143,12 @@ class AsioSocketConnection : public io::BaseStream {
asio::error_code err;
socket.open(local_endpoint.protocol(), err);
if (err) {
- logger_->log_error("Failed to open socket on network interface '%s' with the following message: '%s'", local_network_interface_, err.message());
+ logger_->log_error("Failed to open socket on network interface '{}' with the following message: '{}'", local_network_interface_, err.message());
return;
}
socket.bind(local_endpoint, err);
if (err) {
- logger_->log_error("Failed to bind to network interface '%s' with the following message: '%s'", local_network_interface_, err.message());
+ logger_->log_error("Failed to bind to network interface '{}' with the following message: '{}'", local_network_interface_, err.message());
return;
}
}
@@ -176,3 +176,9 @@ struct hash<org::apache::nifi::minifi::utils::net::ConnectionId> {
}
};
} // namespace std
+
+template <typename InternetProtocol>
+struct fmt::formatter<asio::ip::basic_endpoint<InternetProtocol>> : fmt::ostream_formatter {};
+
+template <>
+struct fmt::formatter<asio::ip::address> : fmt::ostream_formatter {};
diff --git a/libminifi/src/Configure.cpp b/libminifi/src/Configure.cpp
index 60f27c809..40f227f0e 100644
--- a/libminifi/src/Configure.cpp
+++ b/libminifi/src/Configure.cpp
@@ -41,12 +41,12 @@ bool Configure::get(const std::string& key, const std::string& alternate_key, st
if (get(key, value)) {
if (get(alternate_key)) {
const auto logger = core::logging::LoggerFactory<Configure>::getLogger();
- logger->log_warn("Both the property '%s' and an alternate property '%s' are set. Using '%s'.", key, alternate_key, key);
+ logger->log_warn("Both the property '{}' and an alternate property '{}' are set. Using '{}'.", key, alternate_key, key);
}
return true;
} else if (get(alternate_key, value)) {
const auto logger = core::logging::LoggerFactory<Configure>::getLogger();
- logger->log_warn("%s is an alternate property that may not be supported in future releases. Please use %s instead.", alternate_key, key);
+ logger->log_warn("{} is an alternate property that may not be supported in future releases. Please use {} instead.", alternate_key, key);
return true;
} else {
return false;
diff --git a/libminifi/src/Connection.cpp b/libminifi/src/Connection.cpp
index 74f0a2db1..4f52622ab 100644
--- a/libminifi/src/Connection.cpp
+++ b/libminifi/src/Connection.cpp
@@ -36,14 +36,14 @@ Connection::Connection(std::shared_ptr<core::Repository> flow_repository, std::s
: core::Connectable(name),
flow_repository_(std::move(flow_repository)),
content_repo_(std::move(content_repo)) {
- logger_->log_debug("Connection %s created", name_);
+ logger_->log_debug("Connection {} created", name_);
}
Connection::Connection(std::shared_ptr<core::Repository> flow_repository, std::shared_ptr<core::ContentRepository> content_repo, std::string_view name, const utils::Identifier &uuid)
: core::Connectable(name, uuid),
flow_repository_(std::move(flow_repository)),
content_repo_(std::move(content_repo)) {
- logger_->log_debug("Connection %s created", name_);
+ logger_->log_debug("Connection {} created", name_);
}
Connection::Connection(std::shared_ptr<core::Repository> flow_repository, std::shared_ptr<core::ContentRepository> content_repo, std::string_view name, const utils::Identifier &uuid,
@@ -52,7 +52,7 @@ Connection::Connection(std::shared_ptr<core::Repository> flow_repository, std::s
src_uuid_(srcUUID),
flow_repository_(std::move(flow_repository)),
content_repo_(std::move(content_repo)) {
- logger_->log_debug("Connection %s created", name_);
+ logger_->log_debug("Connection {} created", name_);
}
Connection::Connection(std::shared_ptr<core::Repository> flow_repository, std::shared_ptr<core::ContentRepository> content_repo, std::string_view name, const utils::Identifier &uuid,
@@ -62,7 +62,7 @@ Connection::Connection(std::shared_ptr<core::Repository> flow_repository, std::s
dest_uuid_(destUUID),
flow_repository_(std::move(flow_repository)),
content_repo_(std::move(content_repo)) {
- logger_->log_debug("Connection %s created", name_);
+ logger_->log_debug("Connection {} created", name_);
}
Connection::Connection(std::shared_ptr<core::Repository> flow_repository, std::shared_ptr<core::ContentRepository> content_repo, std::shared_ptr<SwapManager> swap_manager,
@@ -71,7 +71,7 @@ Connection::Connection(std::shared_ptr<core::Repository> flow_repository, std::s
flow_repository_(std::move(flow_repository)),
content_repo_(std::move(content_repo)),
queue_(std::move(swap_manager)) {
- logger_->log_debug("Connection %s created", name_);
+ logger_->log_debug("Connection {} created", name_);
}
bool Connection::isEmpty() const {
@@ -96,7 +96,7 @@ bool Connection::backpressureThresholdReached() const {
void Connection::put(const std::shared_ptr<core::FlowFile>& flow) {
if (drop_empty_ && flow->getSize() == 0) {
- logger_->log_info("Dropping empty flow file: %s", flow->getUUIDStr());
+ logger_->log_info("Dropping empty flow file: {}", flow->getUUIDStr());
return;
}
{
@@ -106,12 +106,12 @@ void Connection::put(const std::shared_ptr<core::FlowFile>& flow) {
queued_data_size_ += flow->getSize();
- logger_->log_debug("Enqueue flow file UUID %s to connection %s", flow->getUUIDStr(), name_);
+ logger_->log_debug("Enqueue flow file UUID {} to connection {}", flow->getUUIDStr(), name_);
}
// Notify receiving processor that work may be available
if (dest_connectable_) {
- logger_->log_debug("Notifying %s that %s was inserted", dest_connectable_->getName(), flow->getUUIDStr());
+ logger_->log_debug("Notifying {} that {} was inserted", dest_connectable_->getName(), flow->getUUIDStr());
dest_connectable_->notifyWork();
}
}
@@ -122,19 +122,19 @@ void Connection::multiPut(std::vector<std::shared_ptr<core::FlowFile>>& flows) {
for (auto &ff : flows) {
if (drop_empty_ && ff->getSize() == 0) {
- logger_->log_info("Dropping empty flow file: %s", ff->getUUIDStr());
+ logger_->log_info("Dropping empty flow file: {}", ff->getUUIDStr());
continue;
}
queue_.push(ff);
queued_data_size_ += ff->getSize();
- logger_->log_debug("Enqueue flow file UUID %s to connection %s", ff->getUUIDStr(), name_);
+ logger_->log_debug("Enqueue flow file UUID {} to connection {}", ff->getUUIDStr(), name_);
}
}
if (dest_connectable_) {
- logger_->log_debug("Notifying %s that flowfiles were inserted", dest_connectable_->getName());
+ logger_->log_debug("Notifying {} that flowfiles were inserted", dest_connectable_->getName());
dest_connectable_->notifyWork();
}
}
@@ -155,15 +155,15 @@ std::shared_ptr<core::FlowFile> Connection::poll(std::set<std::shared_ptr<core::
if (std::chrono::system_clock::now() > (item->getEntryDate() + expired_duration_.load())) {
// Flow record expired
expiredFlowRecords.insert(item);
- logger_->log_debug("Delete flow file UUID %s from connection %s, because it expired", item->getUUIDStr(), name_);
+ logger_->log_debug("Delete flow file UUID {} from connection {}, because it expired", item->getUUIDStr(), name_);
} else {
item->setConnection(this);
- logger_->log_debug("Dequeue flow file UUID %s from connection %s", item->getUUIDStr(), name_);
+ logger_->log_debug("Dequeue flow file UUID {} from connection {}", item->getUUIDStr(), name_);
return item;
}
} else {
item->setConnection(this);
- logger_->log_debug("Dequeue flow file UUID %s from connection %s", item->getUUIDStr(), name_);
+ logger_->log_debug("Dequeue flow file UUID {} from connection {}", item->getUUIDStr(), name_);
return item;
}
}
@@ -192,7 +192,7 @@ void Connection::drain(bool delete_permanently) {
}
queued_data_size_ = 0;
- logger_->log_debug("Drain connection %s", name_);
+ logger_->log_debug("Drain connection {}", name_);
}
} // namespace org::apache::nifi::minifi
diff --git a/libminifi/src/DiskSpaceWatchdog.cpp b/libminifi/src/DiskSpaceWatchdog.cpp
index a8770584e..238197d62 100644
--- a/libminifi/src/DiskSpaceWatchdog.cpp
+++ b/libminifi/src/DiskSpaceWatchdog.cpp
@@ -61,9 +61,9 @@ std::vector<std::uintmax_t> check_available_space(const std::vector<std::string>
std::error_code ec;
const auto result = utils::file::space(path.c_str(), ec);
if (ec && logger) {
- logger->log_info("Couldn't check disk space at %s: %s (ignoring)", path, ec.message());
+ logger->log_info("Couldn't check disk space at {}: {} (ignoring)", path, ec.message());
} else if (logger) {
- logger->log_trace("%s available space: %zu bytes", path, gsl::narrow_cast<size_t>(result.available));
+ logger->log_trace("{} available space: {} bytes", path, gsl::narrow_cast<size_t>(result.available));
}
return result.available;
});
diff --git a/libminifi/src/FlowController.cpp b/libminifi/src/FlowController.cpp
index 59b3b9261..0bda29eed 100644
--- a/libminifi/src/FlowController.cpp
+++ b/libminifi/src/FlowController.cpp
@@ -110,10 +110,10 @@ bool FlowController::applyConfiguration(const std::string &source, const std::st
try {
newRoot = updateFromPayload(source, configurePayload, flow_id);
} catch (const std::exception& ex) {
- logger_->log_error("Invalid configuration payload, type: %s, what: %s", typeid(ex).name(), ex.what());
+ logger_->log_error("Invalid configuration payload, type: {}, what: {}", typeid(ex).name(), ex.what());
return false;
} catch (...) {
- logger_->log_error("Invalid configuration payload, type: %s", getCurrentExceptionTypeName());
+ logger_->log_error("Invalid configuration payload, type: {}", getCurrentExceptionTypeName());
return false;
}
@@ -123,7 +123,7 @@ bool FlowController::applyConfiguration(const std::string &source, const std::st
if (!isRunning())
return false;
- logger_->log_info("Starting to reload Flow Controller with flow control name %s, version %d", newRoot->getName(), newRoot->getVersion());
+ logger_->log_info("Starting to reload Flow Controller with flow control name {}, version {}", newRoot->getName(), newRoot->getVersion());
bool started = false;
{
... 5683 lines suppressed ...