You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by fg...@apache.org on 2021/10/28 12:03:24 UTC
[nifi-minifi-cpp] 01/04: MINIFICPP-1667 Add Azure SDK logging to
Minifi
This is an automated email from the ASF dual-hosted git repository.
fgerlits pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
commit 1b1dc7b593d60969d56feec1b7e7597cb6955b9a
Author: Gabor Gyimesi <ga...@gmail.com>
AuthorDate: Wed Oct 20 11:17:48 2021 +0200
MINIFICPP-1667 Add Azure SDK logging to Minifi
Signed-off-by: Ferenc Gerlits <fg...@gmail.com>
This closes #1202
---
extensions/azure/CMakeLists.txt | 2 +-
extensions/azure/storage/AzureBlobStorage.cpp | 2 +
.../azure/storage/AzureBlobStorageClient.cpp | 6 ++
extensions/azure/storage/AzureBlobStorageClient.h | 1 +
extensions/azure/storage/AzureDataLakeStorage.cpp | 1 +
.../azure/storage/AzureDataLakeStorageClient.cpp | 6 ++
.../azure/storage/AzureDataLakeStorageClient.h | 2 +
extensions/azure/utils/AzureSdkLogger.cpp | 68 ++++++++++++++++++++++
.../AzureSdkLogger.h} | 27 +++------
9 files changed, 96 insertions(+), 19 deletions(-)
diff --git a/extensions/azure/CMakeLists.txt b/extensions/azure/CMakeLists.txt
index 1833007..348b79a 100644
--- a/extensions/azure/CMakeLists.txt
+++ b/extensions/azure/CMakeLists.txt
@@ -19,7 +19,7 @@
include(${CMAKE_SOURCE_DIR}/extensions/ExtensionHeader.txt)
-file(GLOB SOURCES "*.cpp" "storage/*.cpp" "controllerservices/*.cpp" "processors/*.cpp")
+file(GLOB SOURCES "*.cpp" "storage/*.cpp" "controllerservices/*.cpp" "processors/*.cpp" "utils/*.cpp")
add_library(minifi-azure SHARED ${SOURCES})
diff --git a/extensions/azure/storage/AzureBlobStorage.cpp b/extensions/azure/storage/AzureBlobStorage.cpp
index b82b801..9708bed 100644
--- a/extensions/azure/storage/AzureBlobStorage.cpp
+++ b/extensions/azure/storage/AzureBlobStorage.cpp
@@ -34,6 +34,7 @@ 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);
return blob_storage_client_->createContainerIfNotExists(params);
} catch (const std::exception& ex) {
logger_->log_error("An exception occurred while creating container: %s", ex.what());
@@ -43,6 +44,7 @@ std::optional<bool> AzureBlobStorage::createContainerIfNotExists(const PutAzureB
std::optional<UploadBlobResult> AzureBlobStorage::uploadBlob(const PutAzureBlobStorageParameters& params, gsl::span<const uint8_t> buffer) {
try {
+ logger_->log_debug("Uploading Azure blob %s to container %s", params.blob_name, params.container_name);
auto response = blob_storage_client_->uploadBlob(params, buffer);
UploadBlobResult result;
diff --git a/extensions/azure/storage/AzureBlobStorageClient.cpp b/extensions/azure/storage/AzureBlobStorageClient.cpp
index f70b07f..c70511c 100644
--- a/extensions/azure/storage/AzureBlobStorageClient.cpp
+++ b/extensions/azure/storage/AzureBlobStorageClient.cpp
@@ -22,8 +22,14 @@
#include "azure/identity.hpp"
+#include "utils/AzureSdkLogger.h"
+
namespace org::apache::nifi::minifi::azure::storage {
+AzureBlobStorageClient::AzureBlobStorageClient() {
+ utils::AzureSdkLogger::initialize();
+}
+
void AzureBlobStorageClient::resetClientIfNeeded(const AzureStorageCredentials &credentials, const std::string &container_name) {
if (container_client_ && credentials == credentials_ && container_name == container_name_) {
logger_->log_debug("Azure Blob Storage client credentials have not changed, no need to reset client");
diff --git a/extensions/azure/storage/AzureBlobStorageClient.h b/extensions/azure/storage/AzureBlobStorageClient.h
index 7e6c261..386ac01 100644
--- a/extensions/azure/storage/AzureBlobStorageClient.h
+++ b/extensions/azure/storage/AzureBlobStorageClient.h
@@ -33,6 +33,7 @@ namespace org::apache::nifi::minifi::azure::storage {
class AzureBlobStorageClient : public BlobStorageClient {
public:
+ AzureBlobStorageClient();
bool createContainerIfNotExists(const PutAzureBlobStorageParameters& params) override;
Azure::Storage::Blobs::Models::UploadBlockBlobResult uploadBlob(const PutAzureBlobStorageParameters& params, gsl::span<const uint8_t> buffer) override;
std::string getUrl(const PutAzureBlobStorageParameters& params) override;
diff --git a/extensions/azure/storage/AzureDataLakeStorage.cpp b/extensions/azure/storage/AzureDataLakeStorage.cpp
index 82e3d5a..5562933 100644
--- a/extensions/azure/storage/AzureDataLakeStorage.cpp
+++ b/extensions/azure/storage/AzureDataLakeStorage.cpp
@@ -30,6 +30,7 @@ AzureDataLakeStorage::AzureDataLakeStorage(std::unique_ptr<DataLakeStorageClient
UploadDataLakeStorageResult AzureDataLakeStorage::uploadFile(const PutAzureDataLakeStorageParameters& params, gsl::span<const uint8_t> 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);
try {
auto file_created = data_lake_storage_client_->createFile(params);
if (!file_created && !params.replace_file) {
diff --git a/extensions/azure/storage/AzureDataLakeStorageClient.cpp b/extensions/azure/storage/AzureDataLakeStorageClient.cpp
index a974e5b..e56b967 100644
--- a/extensions/azure/storage/AzureDataLakeStorageClient.cpp
+++ b/extensions/azure/storage/AzureDataLakeStorageClient.cpp
@@ -22,8 +22,14 @@
#include "azure/identity.hpp"
+#include "utils/AzureSdkLogger.h"
+
namespace org::apache::nifi::minifi::azure::storage {
+AzureDataLakeStorageClient::AzureDataLakeStorageClient() {
+ utils::AzureSdkLogger::initialize();
+}
+
void AzureDataLakeStorageClient::resetClientIfNeeded(const AzureStorageCredentials& credentials, const std::string& file_system_name) {
if (client_ && credentials_ == credentials && file_system_name_ == file_system_name) {
logger_->log_debug("Azure Data Lake Storge client credentials have not changed, no need to reset client");
diff --git a/extensions/azure/storage/AzureDataLakeStorageClient.h b/extensions/azure/storage/AzureDataLakeStorageClient.h
index 4f398a7..8cb87b9 100644
--- a/extensions/azure/storage/AzureDataLakeStorageClient.h
+++ b/extensions/azure/storage/AzureDataLakeStorageClient.h
@@ -32,6 +32,8 @@ namespace org::apache::nifi::minifi::azure::storage {
class AzureDataLakeStorageClient : public DataLakeStorageClient {
public:
+ AzureDataLakeStorageClient();
+
/**
* Creates a file on Azure Data Lake Storage
* @param params Parameters required for connecting and file creation on Azure
diff --git a/extensions/azure/utils/AzureSdkLogger.cpp b/extensions/azure/utils/AzureSdkLogger.cpp
new file mode 100644
index 0000000..fbbdbc2
--- /dev/null
+++ b/extensions/azure/utils/AzureSdkLogger.cpp
@@ -0,0 +1,68 @@
+/**
+ * @file AzureSdkLogger.cpp
+ * AzureSdkLogger class implementation
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "AzureSdkLogger.h"
+
+#include <string>
+
+#include "azure/core/diagnostics/logger.hpp"
+
+namespace org::apache::nifi::minifi::azure::utils {
+
+void AzureSdkLogger::initialize() {
+ static AzureSdkLogger instance;
+}
+
+void AzureSdkLogger::setLogLevel() {
+ if (logger_->should_log(minifi::core::logging::LOG_LEVEL::trace) || logger_->should_log(minifi::core::logging::LOG_LEVEL::debug)) {
+ Azure::Core::Diagnostics::Logger::SetLevel(Azure::Core::Diagnostics::Logger::Level::Verbose);
+ } else if (logger_->should_log(minifi::core::logging::LOG_LEVEL::info)) {
+ Azure::Core::Diagnostics::Logger::SetLevel(Azure::Core::Diagnostics::Logger::Level::Informational);
+ } else if (logger_->should_log(minifi::core::logging::LOG_LEVEL::warn)) {
+ Azure::Core::Diagnostics::Logger::SetLevel(Azure::Core::Diagnostics::Logger::Level::Warning);
+ } else if (logger_->should_log(minifi::core::logging::LOG_LEVEL::err) || logger_->should_log(minifi::core::logging::LOG_LEVEL::critical)) {
+ Azure::Core::Diagnostics::Logger::SetLevel(Azure::Core::Diagnostics::Logger::Level::Error);
+ }
+}
+
+AzureSdkLogger::AzureSdkLogger() {
+ setLogLevel();
+
+ 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());
+ break;
+ case Azure::Core::Diagnostics::Logger::Level::Informational:
+ logger_->log_info(message.c_str());
+ break;
+ case Azure::Core::Diagnostics::Logger::Level::Warning:
+ logger_->log_warn(message.c_str());
+ break;
+ case Azure::Core::Diagnostics::Logger::Level::Error:
+ logger_->log_error(message.c_str());
+ break;
+ default:
+ break;
+ }
+ });
+}
+
+} // namespace org::apache::nifi::minifi::azure::utils
diff --git a/extensions/azure/storage/AzureBlobStorageClient.h b/extensions/azure/utils/AzureSdkLogger.h
similarity index 50%
copy from extensions/azure/storage/AzureBlobStorageClient.h
copy to extensions/azure/utils/AzureSdkLogger.h
index 7e6c261..dcb1e7b 100644
--- a/extensions/azure/storage/AzureBlobStorageClient.h
+++ b/extensions/azure/utils/AzureSdkLogger.h
@@ -1,6 +1,6 @@
/**
- * @file AzureBlobStorageClient.h
- * AzureBlobStorageClient class declaration
+ * @file AzureSdkLogger.h
+ * AzureSdkLogger class declaration
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
@@ -20,30 +20,21 @@
#pragma once
#include <memory>
-#include <optional>
-#include <string>
-#include <vector>
-#include "BlobStorageClient.h"
-#include "azure/storage/blobs.hpp"
#include "core/logging/Logger.h"
#include "core/logging/LoggerConfiguration.h"
-namespace org::apache::nifi::minifi::azure::storage {
+namespace org::apache::nifi::minifi::azure::utils {
-class AzureBlobStorageClient : public BlobStorageClient {
+class AzureSdkLogger {
public:
- bool createContainerIfNotExists(const PutAzureBlobStorageParameters& params) override;
- Azure::Storage::Blobs::Models::UploadBlockBlobResult uploadBlob(const PutAzureBlobStorageParameters& params, gsl::span<const uint8_t> buffer) override;
- std::string getUrl(const PutAzureBlobStorageParameters& params) override;
+ static void initialize();
private:
- void resetClientIfNeeded(const AzureStorageCredentials& credentials, const std::string &container_name);
+ AzureSdkLogger();
+ void setLogLevel();
- AzureStorageCredentials credentials_;
- std::string container_name_;
- std::unique_ptr<Azure::Storage::Blobs::BlobContainerClient> container_client_;
- std::shared_ptr<logging::Logger> logger_{logging::LoggerFactory<AzureBlobStorageClient>::getLogger()};
+ std::shared_ptr<logging::Logger> logger_{logging::LoggerFactory<AzureSdkLogger>::getLogger()};
};
-} // namespace org::apache::nifi::minifi::azure::storage
+} // namespace org::apache::nifi::minifi::azure::utils