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:23 UTC

[nifi-minifi-cpp] branch main updated (6f2f0b5 -> e8d19cd)

This is an automated email from the ASF dual-hosted git repository.

fgerlits pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git.


    from 6f2f0b5  MINIFICPP-1670 - Move RESTReceiver to civet extension
     new 1b1dc7b  MINIFICPP-1667 Add Azure SDK logging to Minifi
     new 3999a30  MINIFICPP-1614 Cleanup limited permission directories in SFTP tests
     new 0f91507  MINIFICPP-977 MQTT tests added
     new e8d19cd  MINIFICPP-1634 remove namespace aliases from Core.h

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .github/workflows/ci.yml                           |   2 +-
 controller/Controller.h                            | 136 ++++----
 controller/MiNiFiController.cpp                    |  14 +-
 docker/DockerVerify.sh                             |   4 +-
 .../integration/MiNiFi_integration_test_driver.py  |   3 +
 docker/test/integration/features/mqtt.feature      |  66 ++++
 .../integration/minifi/core/DockerTestCluster.py   |   2 +-
 .../minifi/core/DockerTestDirectoryBindings.py     |   2 +-
 docker/test/integration/minifi/core/ImageStore.py  |  78 +++--
 ...ttpProxyContainer.py => MqttBrokerContainer.py} |  10 +-
 .../minifi/core/SingleNodeDockerCluster.py         |   3 +
 .../integration/minifi/processors/ConsumeMQTT.py   |  12 +
 .../integration/minifi/processors/PublishMQTT.py   |  12 +
 docker/test/integration/steps/steps.py             |  22 +-
 encrypt-config/ConfigFile.h                        |   1 -
 encrypt-config/EncryptConfig.cpp                   |   1 +
 encrypt-config/tests/ConfigFileEncryptorTests.cpp  |  22 +-
 encrypt-config/tests/ConfigFileTests.cpp           |   1 +
 extensions/aws/AWSCredentialsProvider.h            |   8 +-
 extensions/aws/processors/DeleteS3Object.h         |   4 +-
 extensions/aws/processors/FetchS3Object.h          |   4 +-
 extensions/aws/processors/ListS3.h                 |   4 +-
 extensions/aws/processors/PutS3Object.h            |   4 +-
 extensions/aws/processors/S3Processor.cpp          |   9 +-
 extensions/aws/processors/S3Processor.h            |   6 +-
 extensions/aws/utils/AWSSdkLogger.h                |   4 +-
 extensions/azure/CMakeLists.txt                    |   2 +-
 .../AzureStorageCredentialsService.h               |   8 +-
 .../azure/processors/AzureStorageProcessorBase.h   |   4 +-
 extensions/azure/processors/PutAzureBlobStorage.h  |   2 +-
 .../azure/processors/PutAzureDataLakeStorage.cpp   |   2 +-
 .../azure/processors/PutAzureDataLakeStorage.h     |   6 +-
 extensions/azure/storage/AzureBlobStorage.cpp      |   2 +
 extensions/azure/storage/AzureBlobStorage.h        |   2 +-
 .../azure/storage/AzureBlobStorageClient.cpp       |   6 +
 extensions/azure/storage/AzureBlobStorageClient.h  |   3 +-
 extensions/azure/storage/AzureDataLakeStorage.cpp  |   1 +
 extensions/azure/storage/AzureDataLakeStorage.h    |   2 +-
 .../azure/storage/AzureDataLakeStorageClient.cpp   |   6 +
 .../azure/storage/AzureDataLakeStorageClient.h     |   4 +-
 extensions/azure/utils/AzureSdkLogger.cpp          |  68 ++++
 .../azure/utils/AzureSdkLogger.h                   |  28 +-
 extensions/bustache/ApplyTemplate.cpp              |   1 -
 extensions/bustache/ApplyTemplate.h                |   7 +-
 extensions/civetweb/processors/ListenHTTP.cpp      |   3 +-
 extensions/civetweb/processors/ListenHTTP.h        |  15 +-
 extensions/civetweb/protocols/RESTReceiver.cpp     |   3 +-
 extensions/civetweb/protocols/RESTReceiver.h       |   2 +-
 extensions/civetweb/tests/ListenHTTPTests.cpp      |   9 +-
 extensions/coap/COAPLoader.cpp                     |   2 +-
 extensions/coap/controllerservice/CoapConnector.h  |   2 +-
 extensions/coap/protocols/CoapC2Protocol.cpp       |   3 +-
 extensions/coap/protocols/CoapC2Protocol.h         |   2 +-
 extensions/coap/tests/CoapC2VerifyHeartbeat.cpp    |   4 +-
 .../tests/ExpressionLanguageTests.cpp              |  25 +-
 .../integration/UpdateAttributeIntegrationTest.cpp |   2 +-
 extensions/gps/GetGPS.h                            |   8 +-
 extensions/http-curl/HTTPCurlLoader.cpp            |   2 +-
 extensions/http-curl/client/HTTPCallback.h         |   7 +-
 extensions/http-curl/client/HTTPClient.cpp         |   4 +-
 extensions/http-curl/client/HTTPClient.h           |   2 +-
 extensions/http-curl/client/HTTPStream.cpp         |   3 +-
 extensions/http-curl/client/HTTPStream.h           |   2 +-
 extensions/http-curl/processors/InvokeHTTP.h       |   2 +-
 extensions/http-curl/protocols/AgentPrinter.cpp    |   3 +-
 extensions/http-curl/protocols/AgentPrinter.h      |   2 +-
 extensions/http-curl/protocols/RESTSender.cpp      |   3 +-
 extensions/http-curl/protocols/RESTSender.h        |   2 +-
 extensions/http-curl/sitetosite/HTTPProtocol.cpp   |   2 +-
 extensions/http-curl/sitetosite/HTTPProtocol.h     |  14 +-
 extensions/http-curl/sitetosite/PeersEntity.h      |   2 +-
 extensions/http-curl/tests/C2NullConfiguration.cpp |   4 +-
 .../http-curl/tests/C2VerifyServeResults.cpp       |   2 +-
 extensions/http-curl/tests/HTTPHandlers.h          |   1 +
 .../http-curl/tests/HttpPostIntegrationTest.cpp    |  10 +-
 .../http-curl/tests/unit/InvokeHTTPTests.cpp       |   4 +-
 extensions/jni/ExecuteJavaControllerService.h      |  11 +-
 extensions/jni/ExecuteJavaProcessor.cpp            |   2 +-
 extensions/jni/ExecuteJavaProcessor.h              |  16 +-
 extensions/jni/JNILoader.cpp                       |   2 +-
 extensions/jni/JVMCreator.h                        |   8 +-
 extensions/jni/jvm/JavaControllerService.h         |  12 +-
 extensions/jni/jvm/JniControllerServiceLookup.cpp  |   2 +
 extensions/jni/jvm/JniFlowFile.cpp                 |   2 +
 extensions/jni/jvm/JniInitializationContext.cpp    |   2 +
 extensions/jni/jvm/JniLogger.cpp                   |  12 +-
 extensions/jni/jvm/JniLogger.h                     |   2 +-
 extensions/jni/jvm/JniProcessContext.cpp           |   2 +
 extensions/jni/jvm/JniProcessSession.cpp           |   6 +-
 extensions/jni/jvm/NarClassLoader.h                |   1 -
 extensions/libarchive/ArchiveMetadata.cpp          |   2 +-
 extensions/libarchive/ArchiveMetadata.h            |   2 +-
 extensions/libarchive/BinFiles.h                   |  42 +--
 extensions/libarchive/CompressContent.h            |  15 +-
 extensions/libarchive/FocusArchiveEntry.cpp        |   5 +-
 extensions/libarchive/FocusArchiveEntry.h          |  23 +-
 extensions/libarchive/ManipulateArchive.cpp        |   2 +-
 extensions/libarchive/ManipulateArchive.h          |  15 +-
 extensions/libarchive/MergeContent.h               |   8 +-
 extensions/libarchive/UnfocusArchiveEntry.cpp      |   3 +-
 extensions/libarchive/UnfocusArchiveEntry.h        |  19 +-
 extensions/librdkafka/ConsumeKafka.cpp             |   2 +-
 extensions/librdkafka/ConsumeKafka.h               |   7 +-
 extensions/librdkafka/KafkaConnection.cpp          |  18 +-
 extensions/librdkafka/KafkaConnection.h            |   6 +-
 extensions/librdkafka/PublishKafka.cpp             |  10 +-
 extensions/librdkafka/PublishKafka.h               |   4 +-
 extensions/librdkafka/rdkafka_utils.cpp            |   6 +-
 extensions/librdkafka/rdkafka_utils.h              |   4 +-
 .../mqtt/controllerservice/MQTTControllerService.h |   8 +-
 extensions/mqtt/processors/AbstractMQTTProcessor.h |   7 +-
 extensions/mqtt/processors/ConsumeMQTT.h           |   5 +-
 extensions/mqtt/processors/ConvertHeartBeat.h      |   6 +-
 extensions/mqtt/processors/ConvertJSONAck.h        |   5 +-
 extensions/mqtt/processors/ConvertUpdate.h         |   6 +-
 extensions/mqtt/processors/PublishMQTT.h           |   7 +-
 extensions/mqtt/protocol/MQTTC2Protocol.cpp        |   3 +-
 extensions/mqtt/protocol/MQTTC2Protocol.h          |   2 +-
 extensions/opc/include/fetchopc.h                  |   4 +-
 extensions/opc/include/opcbase.h                   |   2 +-
 extensions/opc/include/putopc.h                    |   8 +-
 extensions/opencv/CaptureRTSPFrame.h               |   5 +-
 extensions/opencv/MotionDetector.h                 |  13 +-
 .../SourceInitiatedSubscriptionListener.cpp        |  11 +-
 .../SourceInitiatedSubscriptionListener.h          |   2 +-
 extensions/pcap/CapturePacket.h                    |  11 +-
 extensions/pdh/PerformanceDataMonitor.h            |   4 +-
 .../rocksdb-repos/DatabaseContentRepository.cpp    |   1 -
 extensions/rocksdb-repos/ProvenanceRepository.h    |  34 +-
 extensions/rocksdb-repos/RocksDbStream.cpp         |   3 +-
 extensions/rocksdb-repos/RocksDbStream.h           |   2 +-
 .../RocksDbPersistableKeyValueStoreService.cpp     |   3 +-
 .../RocksDbPersistableKeyValueStoreService.h       |   2 +-
 extensions/rocksdb-repos/database/ColumnHandle.cpp |   2 +-
 extensions/script/ExecuteScript.h                  |   6 +-
 .../script/python/ExecutePythonProcessor.cpp       |   2 +-
 extensions/script/python/ExecutePythonProcessor.h  |   5 +-
 extensions/script/python/PythonBindings.h          |   8 +-
 extensions/script/python/PythonCreator.h           |   5 +-
 extensions/script/python/PythonObjectFactory.h     |  34 +-
 extensions/script/pythonloader/PyProcLoader.cpp    |   2 +
 extensions/sensors/GetEnvironmentalSensors.h       |  11 +-
 extensions/sensors/GetMovementSensors.h            |   5 +-
 extensions/sensors/SensorBase.h                    |   5 +-
 extensions/sftp/client/SFTPClient.cpp              |   2 +-
 extensions/sftp/client/SFTPClient.h                |   2 +-
 extensions/sftp/processors/FetchSFTP.cpp           |   5 +-
 extensions/sftp/processors/FetchSFTP.h             |   6 +-
 extensions/sftp/processors/ListSFTP.cpp            |   2 +-
 extensions/sftp/processors/PutSFTP.cpp             |   5 +-
 extensions/sftp/processors/PutSFTP.h               |   6 +-
 extensions/sftp/processors/SFTPProcessorBase.h     |   2 +-
 extensions/sftp/tests/FetchSFTPTests.cpp           |  23 +-
 extensions/sftp/tests/ListSFTPTests.cpp            |  15 +-
 extensions/sftp/tests/ListThenFetchSFTPTests.cpp   |  20 +-
 extensions/sftp/tests/PutSFTPTests.cpp             |  42 +--
 extensions/sftp/tests/tools/SFTPTestServer.cpp     |   9 +-
 extensions/sftp/tests/tools/SFTPTestServer.h       |   2 +-
 extensions/sql/processors/ExecuteSQL.cpp           |   2 +-
 extensions/sql/processors/PutSQL.cpp               |   2 +-
 extensions/sql/processors/QueryDatabaseTable.cpp   |   2 +-
 extensions/sql/processors/SQLProcessor.h           |   4 +-
 extensions/sql/services/DatabaseService.h          |   8 +-
 extensions/sql/services/ODBCConnector.h            |   8 +-
 .../UnorderedMapKeyValueStoreService.cpp           |   6 +-
 .../controllers/UnorderedMapKeyValueStoreService.h |   2 +-
 ...UnorderedMapPersistableKeyValueStoreService.cpp |   6 +-
 .../UnorderedMapPersistableKeyValueStoreService.h  |   2 +-
 .../processors/AppendHostInfo.h                    |   5 +-
 .../processors/AttributesToJSON.h                  |   5 +-
 .../processors/ExecuteProcess.h                    |  11 +-
 .../standard-processors/processors/ExtractText.cpp |   2 +-
 .../standard-processors/processors/ExtractText.h   |  98 +++---
 .../processors/GenerateFlowFile.h                  |   4 +-
 .../standard-processors/processors/GetFile.h       |   7 +-
 extensions/standard-processors/processors/GetTCP.h |   5 +-
 .../standard-processors/processors/HashContent.h   |   9 +-
 .../standard-processors/processors/ListenSyslog.h  |   5 +-
 .../processors/LogAttribute.cpp                    |  10 +-
 .../standard-processors/processors/LogAttribute.h  |   9 +-
 .../standard-processors/processors/PutFile.h       |   7 +-
 .../standard-processors/processors/RetryFlowFile.h |   7 +-
 .../processors/RouteOnAttribute.h                  |   7 +-
 .../standard-processors/processors/TailFile.cpp    |  16 +-
 .../standard-processors/processors/TailFile.h      |   5 +-
 .../processors/UpdateAttribute.h                   |   5 +-
 .../tests/integration/SecureSocketGetTCPTest.cpp   |   2 +-
 .../TLSClientSocketSupportedProtocolsTest.cpp      |  10 +-
 .../TLSServerSocketSupportedProtocolsTest.cpp      |  16 +-
 .../tests/unit/AppendHostInfoTests.cpp             |  12 +-
 .../tests/unit/ExtractTextTests.cpp                |   2 +
 .../tests/unit/GetFileTests.cpp                    |  29 +-
 .../tests/unit/HashContentTest.cpp                 |   3 +-
 .../tests/unit/ProcessorTests.cpp                  |  10 +-
 .../tests/unit/PutFileTests.cpp                    |   8 +-
 .../tests/unit/TailFileTests.cpp                   | 198 +++++------
 .../tests/unit/YamlConnectionParserTest.cpp        |   4 +-
 extensions/usb-camera/GetUSBCamera.cpp             |   6 +-
 extensions/usb-camera/GetUSBCamera.h               |  13 +-
 extensions/windows-event-log/Bookmark.cpp          |   5 +-
 extensions/windows-event-log/Bookmark.h            |   5 +-
 .../CollectorInitiatedSubscription.cpp             |   2 +-
 .../CollectorInitiatedSubscription.h               |   2 +-
 .../windows-event-log/ConsumeWindowsEventLog.cpp   |   9 +-
 .../windows-event-log/ConsumeWindowsEventLog.h     |   2 +-
 extensions/windows-event-log/TailEventLog.h        |   6 +-
 libminifi/include/Connection.h                     |   2 +-
 libminifi/include/FlowControlProtocol.h            |   5 +-
 libminifi/include/FlowController.h                 |   2 +-
 libminifi/include/FlowFileRecord.h                 |   2 +-
 libminifi/include/RemoteProcessorGroupPort.h       |   4 +-
 libminifi/include/ResourceClaim.h                  |   2 +-
 libminifi/include/SchedulingAgent.h                |   4 +-
 libminifi/include/ThreadedSchedulingAgent.h        |  14 +-
 libminifi/include/TimerDrivenSchedulingAgent.h     |   5 +-
 libminifi/include/c2/C2Agent.h                     |   5 +-
 libminifi/include/c2/C2Client.h                    |   4 +-
 libminifi/include/c2/ControllerSocketProtocol.h    |   5 +-
 libminifi/include/c2/HeartbeatLogger.h             |   2 +-
 libminifi/include/c2/protocols/RESTProtocol.h      |   2 +-
 libminifi/include/c2/triggers/FileUpdateTrigger.h  |   5 +-
 .../controllers/LinuxPowerManagementService.h      |   5 +-
 .../controllers/NetworkPrioritizerService.h        |   5 +-
 libminifi/include/controllers/SSLContextService.h  |   6 +-
 .../include/controllers/ThreadManagementService.h  |   6 +-
 .../controllers/UpdatePolicyControllerService.h    |  21 +-
 .../AbstractAutoPersistingKeyValueStoreService.h   |   2 +-
 libminifi/include/core/ConfigurationFactory.h      |  10 +-
 libminifi/include/core/Core.h                      | 102 +-----
 libminifi/include/core/Relationship.h              |  76 +----
 libminifi/include/core/extension/Executable.h      |   2 +-
 libminifi/include/core/logging/Logger.h            |  18 +-
 libminifi/include/io/AtomicEntryStream.h           |   5 +-
 libminifi/include/io/ClientSocket.h                |   2 +-
 libminifi/include/io/DescriptorStream.h            |   2 +-
 libminifi/include/io/FileStream.h                  |   2 +-
 libminifi/include/io/ServerSocket.h                |   2 +-
 libminifi/include/io/tls/SecureDescriptorStream.h  |   2 +-
 libminifi/include/io/tls/TLSServerSocket.h         |   2 +-
 libminifi/include/io/tls/TLSSocket.h               |   2 +-
 libminifi/include/properties/Properties.h          |   2 +-
 libminifi/include/provenance/Provenance.h          |   6 +-
 libminifi/include/sitetosite/Peer.h                |   7 +-
 libminifi/include/sitetosite/RawSocketProtocol.h   |  23 +-
 libminifi/include/sitetosite/SiteToSiteClient.h    |  14 +-
 libminifi/include/utils/ByteArrayCallback.h        |   4 +-
 libminifi/include/utils/HTTPClient.h               |   2 +-
 libminifi/include/utils/HTTPUtils.h                |   2 +
 .../include/utils/OpenTelemetryLogDataModelUtils.h |   1 +
 libminifi/include/utils/TestUtils.h                |   8 +-
 libminifi/include/utils/file/FileSystem.h          |   2 +-
 libminifi/include/utils/file/FileUtils.h           |   8 +-
 libminifi/src/Configure.cpp                        |   4 +-
 libminifi/src/Connection.cpp                       |  13 +-
 libminifi/src/FlowController.cpp                   |   3 +-
 libminifi/src/FlowFileRecord.cpp                   |   4 +-
 libminifi/src/RemoteProcessorGroupPort.cpp         |   2 +-
 libminifi/src/ResourceClaim.cpp                    |   5 +-
 libminifi/src/c2/C2Agent.cpp                       |   1 -
 libminifi/src/c2/C2Client.cpp                      |   2 +-
 libminifi/src/c2/HeartbeatLogger.cpp               |   3 +-
 libminifi/src/c2/protocols/RESTProtocol.cpp        |   2 +-
 .../controllers/LinuxPowerManagementService.cpp    |   2 +-
 libminifi/src/controllers/SSLContextService.cpp    |  26 +-
 .../AbstractAutoPersistingKeyValueStoreService.cpp |   3 +-
 .../keyvalue/PersistableKeyValueStoreService.cpp   |   2 +-
 libminifi/src/core/Core.cpp                        |  23 +-
 libminifi/src/io/ClientSocket.cpp                  |   8 +-
 libminifi/src/io/DescriptorStream.cpp              |   3 +-
 libminifi/src/io/FileStream.cpp                    |  48 ++-
 libminifi/src/io/ServerSocket.cpp                  |   2 +-
 libminifi/src/io/ZlibStream.cpp                    |   6 +-
 libminifi/src/io/tls/SecureDescriptorStream.cpp    |   3 +-
 libminifi/src/io/tls/TLSServerSocket.cpp           |   3 +-
 libminifi/src/io/tls/TLSSocket.cpp                 |   5 +-
 libminifi/src/properties/Properties.cpp            |   3 +-
 libminifi/src/provenance/Provenance.cpp            |   2 +-
 libminifi/src/sitetosite/RawSocketProtocol.cpp     |  10 +-
 libminifi/src/sitetosite/SiteToSiteClient.cpp      |   6 +-
 libminifi/src/utils/HTTPClient.cpp                 |   7 +-
 libminifi/src/utils/Id.cpp                         |  26 +-
 libminifi/src/utils/file/FilePattern.cpp           |   2 +-
 libminifi/test/KamikazeProcessor.h                 |  18 +-
 libminifi/test/RandomServerSocket.cpp              |   2 +-
 libminifi/test/TestBase.cpp                        | 309 ++++++++++++++----
 libminifi/test/TestBase.h                          | 361 +++++++--------------
 .../test/archive-tests/CompressContentTests.cpp    |  88 ++---
 libminifi/test/archive-tests/FocusArchiveTests.cpp |   2 +
 .../test/archive-tests/ManipulateArchiveTests.cpp  |   2 +
 libminifi/test/archive-tests/MergeFileTests.cpp    | 152 ++++-----
 .../test/aws-tests/AWSCredentialsServiceTest.cpp   |   1 +
 libminifi/test/aws-tests/S3TestsFixture.h          |  14 +-
 .../test/azure-tests/PutAzureBlobStorageTests.cpp  |  12 +-
 .../azure-tests/PutAzureDataLakeStorageTests.cpp   |  12 +-
 .../test/bustache-tests/ApplyTemplateTests.cpp     |   2 +
 libminifi/test/flow-tests/SessionTests.cpp         |   9 +
 libminifi/test/flow-tests/TestControllerWithFlow.h |   8 +-
 libminifi/test/integration/IntegrationBase.h       |   4 +
 .../PersistableKeyValueStoreServiceTest.cpp        |   2 +
 .../UnorderedMapKeyValueStoreServiceTest.cpp       |   2 +
 libminifi/test/rocksdb-tests/EncryptionTests.cpp   |   4 +-
 libminifi/test/rocksdb-tests/ProvenanceTests.cpp   |   2 +
 libminifi/test/rocksdb-tests/RocksDBTests.cpp      |   3 +
 .../TestExecuteScriptProcessorWithPythonScript.cpp |  22 +-
 libminifi/test/sql-tests/ExecuteSQLTests.cpp       |  20 +-
 .../test/sql-tests/QueryDatabaseTableTests.cpp     |  72 ++--
 libminifi/test/sql-tests/SQLTestController.h       |  13 +-
 libminifi/test/unit/BackTraceTests.cpp             |   2 +
 libminifi/test/unit/C2MetricsTests.cpp             |   2 +
 libminifi/test/unit/ConnectionTests.cpp            |   1 +
 .../test/unit/ContentRepositoryDependentTests.h    |   1 +
 libminifi/test/unit/FilePatternTests.cpp           |  27 +-
 libminifi/test/unit/FileUtilsTests.cpp             |  11 +-
 libminifi/test/unit/FlowFileQueueTests.cpp         |   4 +
 libminifi/test/unit/FlowFileSerializationTests.cpp |   2 +
 libminifi/test/unit/LoggerConfigurationTests.cpp   |   1 +
 libminifi/test/unit/MockClasses.h                  |  18 +-
 libminifi/test/unit/ProcessSessionTests.cpp        |  29 +-
 libminifi/test/unit/PropertyTests.cpp              |   2 +
 libminifi/test/unit/ProvenanceTestHelper.h         |  52 +--
 libminifi/test/unit/SiteToSiteHelper.h             |   2 +
 main/AgentDocs.cpp                                 |   2 +-
 main/MainHelper.cpp                                |   7 +-
 main/MainHelper.h                                  |   2 +-
 main/MiNiFiMain.cpp                                |  12 +-
 main/MiNiFiWindowsService.cpp                      |   8 +-
 main/MiNiFiWindowsService.h                        |   2 +-
 nanofi/include/cxx/C2CallbackAgent.h               |  16 +-
 nanofi/include/cxx/CallbackProcessor.h             |   6 +-
 nanofi/include/cxx/Plan.h                          |   7 +-
 nanofi/src/api/nanofi.cpp                          |   4 +-
 nanofi/src/cxx/C2CallbackAgent.cpp                 |   3 +-
 nanofi/src/cxx/Plan.cpp                            |   6 +-
 333 files changed, 2064 insertions(+), 1939 deletions(-)
 create mode 100644 docker/test/integration/features/mqtt.feature
 copy docker/test/integration/minifi/core/{HttpProxyContainer.py => MqttBrokerContainer.py} (63%)
 create mode 100644 docker/test/integration/minifi/processors/ConsumeMQTT.py
 create mode 100644 docker/test/integration/minifi/processors/PublishMQTT.py
 create mode 100644 extensions/azure/utils/AzureSdkLogger.cpp
 copy libminifi/include/serialization/PayloadSerializer.h => extensions/azure/utils/AzureSdkLogger.h (64%)

[nifi-minifi-cpp] 04/04: MINIFICPP-1634 remove namespace aliases from Core.h

Posted by fg...@apache.org.
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 e8d19cdefbe77cbd684dee5df59edcf53f5c5efb
Author: Marton Szasz <sz...@apache.org>
AuthorDate: Mon Aug 30 16:17:16 2021 +0200

    MINIFICPP-1634 remove namespace aliases from Core.h
    
    and adapt code that depends on them by using local aliases or
    sufficiently qualified names.
    
    The change started from an effort to move implementations from headers
    to source files, so some unrelated refactoring is included.
    
    Signed-off-by: Ferenc Gerlits <fg...@gmail.com>
    
    This closes #1165
---
 controller/Controller.h                            | 136 ++++----
 controller/MiNiFiController.cpp                    |  14 +-
 encrypt-config/ConfigFile.h                        |   1 -
 encrypt-config/EncryptConfig.cpp                   |   1 +
 encrypt-config/tests/ConfigFileEncryptorTests.cpp  |  22 +-
 encrypt-config/tests/ConfigFileTests.cpp           |   1 +
 extensions/aws/AWSCredentialsProvider.h            |   8 +-
 extensions/aws/processors/DeleteS3Object.h         |   4 +-
 extensions/aws/processors/FetchS3Object.h          |   4 +-
 extensions/aws/processors/ListS3.h                 |   4 +-
 extensions/aws/processors/PutS3Object.h            |   4 +-
 extensions/aws/processors/S3Processor.cpp          |   9 +-
 extensions/aws/processors/S3Processor.h            |   6 +-
 extensions/aws/utils/AWSSdkLogger.h                |   4 +-
 .../AzureStorageCredentialsService.h               |   8 +-
 .../azure/processors/AzureStorageProcessorBase.h   |   4 +-
 extensions/azure/processors/PutAzureBlobStorage.h  |   2 +-
 .../azure/processors/PutAzureDataLakeStorage.cpp   |   2 +-
 .../azure/processors/PutAzureDataLakeStorage.h     |   6 +-
 extensions/azure/storage/AzureBlobStorage.h        |   2 +-
 extensions/azure/storage/AzureBlobStorageClient.h  |   2 +-
 extensions/azure/storage/AzureDataLakeStorage.h    |   2 +-
 .../azure/storage/AzureDataLakeStorageClient.h     |   2 +-
 extensions/azure/utils/AzureSdkLogger.h            |   2 +-
 extensions/bustache/ApplyTemplate.cpp              |   1 -
 extensions/bustache/ApplyTemplate.h                |   7 +-
 extensions/civetweb/processors/ListenHTTP.cpp      |   3 +-
 extensions/civetweb/processors/ListenHTTP.h        |  15 +-
 extensions/civetweb/protocols/RESTReceiver.cpp     |   3 +-
 extensions/civetweb/protocols/RESTReceiver.h       |   2 +-
 extensions/civetweb/tests/ListenHTTPTests.cpp      |   9 +-
 extensions/coap/COAPLoader.cpp                     |   2 +-
 extensions/coap/controllerservice/CoapConnector.h  |   2 +-
 extensions/coap/protocols/CoapC2Protocol.cpp       |   3 +-
 extensions/coap/protocols/CoapC2Protocol.h         |   2 +-
 extensions/coap/tests/CoapC2VerifyHeartbeat.cpp    |   4 +-
 .../tests/ExpressionLanguageTests.cpp              |  25 +-
 .../integration/UpdateAttributeIntegrationTest.cpp |   2 +-
 extensions/gps/GetGPS.h                            |   8 +-
 extensions/http-curl/HTTPCurlLoader.cpp            |   2 +-
 extensions/http-curl/client/HTTPCallback.h         |   7 +-
 extensions/http-curl/client/HTTPClient.cpp         |   4 +-
 extensions/http-curl/client/HTTPClient.h           |   2 +-
 extensions/http-curl/client/HTTPStream.cpp         |   3 +-
 extensions/http-curl/client/HTTPStream.h           |   2 +-
 extensions/http-curl/processors/InvokeHTTP.h       |   2 +-
 extensions/http-curl/protocols/AgentPrinter.cpp    |   3 +-
 extensions/http-curl/protocols/AgentPrinter.h      |   2 +-
 extensions/http-curl/protocols/RESTSender.cpp      |   3 +-
 extensions/http-curl/protocols/RESTSender.h        |   2 +-
 extensions/http-curl/sitetosite/HTTPProtocol.cpp   |   2 +-
 extensions/http-curl/sitetosite/HTTPProtocol.h     |  14 +-
 extensions/http-curl/sitetosite/PeersEntity.h      |   2 +-
 extensions/http-curl/tests/C2NullConfiguration.cpp |   4 +-
 .../http-curl/tests/C2VerifyServeResults.cpp       |   2 +-
 extensions/http-curl/tests/HTTPHandlers.h          |   1 +
 .../http-curl/tests/HttpPostIntegrationTest.cpp    |  10 +-
 .../http-curl/tests/unit/InvokeHTTPTests.cpp       |   4 +-
 extensions/jni/ExecuteJavaControllerService.h      |  11 +-
 extensions/jni/ExecuteJavaProcessor.cpp            |   2 +-
 extensions/jni/ExecuteJavaProcessor.h              |  16 +-
 extensions/jni/JNILoader.cpp                       |   2 +-
 extensions/jni/JVMCreator.h                        |   8 +-
 extensions/jni/jvm/JavaControllerService.h         |  12 +-
 extensions/jni/jvm/JniControllerServiceLookup.cpp  |   2 +
 extensions/jni/jvm/JniFlowFile.cpp                 |   2 +
 extensions/jni/jvm/JniInitializationContext.cpp    |   2 +
 extensions/jni/jvm/JniLogger.cpp                   |  12 +-
 extensions/jni/jvm/JniLogger.h                     |   2 +-
 extensions/jni/jvm/JniProcessContext.cpp           |   2 +
 extensions/jni/jvm/JniProcessSession.cpp           |   6 +-
 extensions/jni/jvm/NarClassLoader.h                |   1 -
 extensions/libarchive/ArchiveMetadata.cpp          |   2 +-
 extensions/libarchive/ArchiveMetadata.h            |   2 +-
 extensions/libarchive/BinFiles.h                   |  42 +--
 extensions/libarchive/CompressContent.h            |  15 +-
 extensions/libarchive/FocusArchiveEntry.cpp        |   5 +-
 extensions/libarchive/FocusArchiveEntry.h          |  23 +-
 extensions/libarchive/ManipulateArchive.cpp        |   2 +-
 extensions/libarchive/ManipulateArchive.h          |  15 +-
 extensions/libarchive/MergeContent.h               |   8 +-
 extensions/libarchive/UnfocusArchiveEntry.cpp      |   3 +-
 extensions/libarchive/UnfocusArchiveEntry.h        |  19 +-
 extensions/librdkafka/ConsumeKafka.cpp             |   2 +-
 extensions/librdkafka/ConsumeKafka.h               |   7 +-
 extensions/librdkafka/KafkaConnection.cpp          |  18 +-
 extensions/librdkafka/KafkaConnection.h            |   6 +-
 extensions/librdkafka/PublishKafka.cpp             |  10 +-
 extensions/librdkafka/PublishKafka.h               |   4 +-
 extensions/librdkafka/rdkafka_utils.cpp            |   6 +-
 extensions/librdkafka/rdkafka_utils.h              |   4 +-
 .../mqtt/controllerservice/MQTTControllerService.h |   8 +-
 extensions/mqtt/processors/AbstractMQTTProcessor.h |   7 +-
 extensions/mqtt/processors/ConsumeMQTT.h           |   5 +-
 extensions/mqtt/processors/ConvertHeartBeat.h      |   6 +-
 extensions/mqtt/processors/ConvertJSONAck.h        |   5 +-
 extensions/mqtt/processors/ConvertUpdate.h         |   6 +-
 extensions/mqtt/processors/PublishMQTT.h           |   7 +-
 extensions/mqtt/protocol/MQTTC2Protocol.cpp        |   3 +-
 extensions/mqtt/protocol/MQTTC2Protocol.h          |   2 +-
 extensions/opc/include/fetchopc.h                  |   4 +-
 extensions/opc/include/opcbase.h                   |   2 +-
 extensions/opc/include/putopc.h                    |   8 +-
 extensions/opencv/CaptureRTSPFrame.h               |   5 +-
 extensions/opencv/MotionDetector.h                 |  13 +-
 .../SourceInitiatedSubscriptionListener.cpp        |  11 +-
 .../SourceInitiatedSubscriptionListener.h          |   2 +-
 extensions/pcap/CapturePacket.h                    |  11 +-
 extensions/pdh/PerformanceDataMonitor.h            |   4 +-
 .../rocksdb-repos/DatabaseContentRepository.cpp    |   1 -
 extensions/rocksdb-repos/ProvenanceRepository.h    |  34 +-
 extensions/rocksdb-repos/RocksDbStream.cpp         |   3 +-
 extensions/rocksdb-repos/RocksDbStream.h           |   2 +-
 .../RocksDbPersistableKeyValueStoreService.cpp     |   3 +-
 .../RocksDbPersistableKeyValueStoreService.h       |   2 +-
 extensions/rocksdb-repos/database/ColumnHandle.cpp |   2 +-
 extensions/script/ExecuteScript.h                  |   6 +-
 .../script/python/ExecutePythonProcessor.cpp       |   2 +-
 extensions/script/python/ExecutePythonProcessor.h  |   5 +-
 extensions/script/python/PythonBindings.h          |   8 +-
 extensions/script/python/PythonCreator.h           |   5 +-
 extensions/script/python/PythonObjectFactory.h     |  34 +-
 extensions/script/pythonloader/PyProcLoader.cpp    |   2 +
 extensions/sensors/GetEnvironmentalSensors.h       |  11 +-
 extensions/sensors/GetMovementSensors.h            |   5 +-
 extensions/sensors/SensorBase.h                    |   5 +-
 extensions/sftp/client/SFTPClient.cpp              |   2 +-
 extensions/sftp/client/SFTPClient.h                |   2 +-
 extensions/sftp/processors/FetchSFTP.cpp           |   5 +-
 extensions/sftp/processors/FetchSFTP.h             |   6 +-
 extensions/sftp/processors/ListSFTP.cpp            |   2 +-
 extensions/sftp/processors/PutSFTP.cpp             |   5 +-
 extensions/sftp/processors/PutSFTP.h               |   6 +-
 extensions/sftp/processors/SFTPProcessorBase.h     |   2 +-
 extensions/sftp/tests/FetchSFTPTests.cpp           |  22 +-
 extensions/sftp/tests/ListSFTPTests.cpp            |  14 +-
 extensions/sftp/tests/ListThenFetchSFTPTests.cpp   |  20 +-
 extensions/sftp/tests/PutSFTPTests.cpp             |  42 +--
 extensions/sftp/tests/tools/SFTPTestServer.cpp     |   9 +-
 extensions/sftp/tests/tools/SFTPTestServer.h       |   2 +-
 extensions/sql/processors/ExecuteSQL.cpp           |   2 +-
 extensions/sql/processors/PutSQL.cpp               |   2 +-
 extensions/sql/processors/QueryDatabaseTable.cpp   |   2 +-
 extensions/sql/processors/SQLProcessor.h           |   4 +-
 extensions/sql/services/DatabaseService.h          |   8 +-
 extensions/sql/services/ODBCConnector.h            |   8 +-
 .../UnorderedMapKeyValueStoreService.cpp           |   6 +-
 .../controllers/UnorderedMapKeyValueStoreService.h |   2 +-
 ...UnorderedMapPersistableKeyValueStoreService.cpp |   6 +-
 .../UnorderedMapPersistableKeyValueStoreService.h  |   2 +-
 .../processors/AppendHostInfo.h                    |   5 +-
 .../processors/AttributesToJSON.h                  |   5 +-
 .../processors/ExecuteProcess.h                    |  11 +-
 .../standard-processors/processors/ExtractText.cpp |   2 +-
 .../standard-processors/processors/ExtractText.h   |  98 +++---
 .../processors/GenerateFlowFile.h                  |   4 +-
 .../standard-processors/processors/GetFile.h       |   7 +-
 extensions/standard-processors/processors/GetTCP.h |   5 +-
 .../standard-processors/processors/HashContent.h   |   9 +-
 .../standard-processors/processors/ListenSyslog.h  |   5 +-
 .../processors/LogAttribute.cpp                    |  10 +-
 .../standard-processors/processors/LogAttribute.h  |   9 +-
 .../standard-processors/processors/PutFile.h       |   7 +-
 .../standard-processors/processors/RetryFlowFile.h |   7 +-
 .../processors/RouteOnAttribute.h                  |   7 +-
 .../standard-processors/processors/TailFile.cpp    |  16 +-
 .../standard-processors/processors/TailFile.h      |   5 +-
 .../processors/UpdateAttribute.h                   |   5 +-
 .../tests/integration/SecureSocketGetTCPTest.cpp   |   2 +-
 .../TLSClientSocketSupportedProtocolsTest.cpp      |  10 +-
 .../TLSServerSocketSupportedProtocolsTest.cpp      |  16 +-
 .../tests/unit/AppendHostInfoTests.cpp             |  12 +-
 .../tests/unit/ExtractTextTests.cpp                |   2 +
 .../tests/unit/GetFileTests.cpp                    |  29 +-
 .../tests/unit/HashContentTest.cpp                 |   3 +-
 .../tests/unit/ProcessorTests.cpp                  |  10 +-
 .../tests/unit/PutFileTests.cpp                    |   8 +-
 .../tests/unit/TailFileTests.cpp                   | 198 +++++------
 .../tests/unit/YamlConnectionParserTest.cpp        |   4 +-
 extensions/usb-camera/GetUSBCamera.cpp             |   6 +-
 extensions/usb-camera/GetUSBCamera.h               |  13 +-
 extensions/windows-event-log/Bookmark.cpp          |   5 +-
 extensions/windows-event-log/Bookmark.h            |   5 +-
 .../CollectorInitiatedSubscription.cpp             |   2 +-
 .../CollectorInitiatedSubscription.h               |   2 +-
 .../windows-event-log/ConsumeWindowsEventLog.cpp   |   9 +-
 .../windows-event-log/ConsumeWindowsEventLog.h     |   2 +-
 extensions/windows-event-log/TailEventLog.h        |   6 +-
 libminifi/include/Connection.h                     |   2 +-
 libminifi/include/FlowControlProtocol.h            |   5 +-
 libminifi/include/FlowController.h                 |   2 +-
 libminifi/include/FlowFileRecord.h                 |   2 +-
 libminifi/include/RemoteProcessorGroupPort.h       |   4 +-
 libminifi/include/ResourceClaim.h                  |   2 +-
 libminifi/include/SchedulingAgent.h                |   4 +-
 libminifi/include/ThreadedSchedulingAgent.h        |  14 +-
 libminifi/include/TimerDrivenSchedulingAgent.h     |   5 +-
 libminifi/include/c2/C2Agent.h                     |   5 +-
 libminifi/include/c2/C2Client.h                    |   4 +-
 libminifi/include/c2/ControllerSocketProtocol.h    |   5 +-
 libminifi/include/c2/HeartbeatLogger.h             |   2 +-
 libminifi/include/c2/protocols/RESTProtocol.h      |   2 +-
 libminifi/include/c2/triggers/FileUpdateTrigger.h  |   5 +-
 .../controllers/LinuxPowerManagementService.h      |   5 +-
 .../controllers/NetworkPrioritizerService.h        |   5 +-
 libminifi/include/controllers/SSLContextService.h  |   6 +-
 .../include/controllers/ThreadManagementService.h  |   6 +-
 .../controllers/UpdatePolicyControllerService.h    |  21 +-
 .../AbstractAutoPersistingKeyValueStoreService.h   |   2 +-
 libminifi/include/core/ConfigurationFactory.h      |  10 +-
 libminifi/include/core/Core.h                      | 102 +-----
 libminifi/include/core/Relationship.h              |  76 +----
 libminifi/include/core/extension/Executable.h      |   2 +-
 libminifi/include/core/logging/Logger.h            |  18 +-
 libminifi/include/io/AtomicEntryStream.h           |   5 +-
 libminifi/include/io/ClientSocket.h                |   2 +-
 libminifi/include/io/DescriptorStream.h            |   2 +-
 libminifi/include/io/FileStream.h                  |   2 +-
 libminifi/include/io/ServerSocket.h                |   2 +-
 libminifi/include/io/tls/SecureDescriptorStream.h  |   2 +-
 libminifi/include/io/tls/TLSServerSocket.h         |   2 +-
 libminifi/include/io/tls/TLSSocket.h               |   2 +-
 libminifi/include/properties/Properties.h          |   2 +-
 libminifi/include/provenance/Provenance.h          |   6 +-
 libminifi/include/sitetosite/Peer.h                |   7 +-
 libminifi/include/sitetosite/RawSocketProtocol.h   |  23 +-
 libminifi/include/sitetosite/SiteToSiteClient.h    |  14 +-
 libminifi/include/utils/ByteArrayCallback.h        |   4 +-
 libminifi/include/utils/HTTPClient.h               |   2 +-
 libminifi/include/utils/HTTPUtils.h                |   2 +
 .../include/utils/OpenTelemetryLogDataModelUtils.h |   1 +
 libminifi/include/utils/TestUtils.h                |   8 +-
 libminifi/include/utils/file/FileSystem.h          |   2 +-
 libminifi/include/utils/file/FileUtils.h           |   8 +-
 libminifi/src/Configure.cpp                        |   4 +-
 libminifi/src/Connection.cpp                       |  13 +-
 libminifi/src/FlowController.cpp                   |   3 +-
 libminifi/src/FlowFileRecord.cpp                   |   4 +-
 libminifi/src/RemoteProcessorGroupPort.cpp         |   2 +-
 libminifi/src/ResourceClaim.cpp                    |   5 +-
 libminifi/src/c2/C2Agent.cpp                       |   1 -
 libminifi/src/c2/C2Client.cpp                      |   2 +-
 libminifi/src/c2/HeartbeatLogger.cpp               |   3 +-
 libminifi/src/c2/protocols/RESTProtocol.cpp        |   2 +-
 .../controllers/LinuxPowerManagementService.cpp    |   2 +-
 libminifi/src/controllers/SSLContextService.cpp    |  26 +-
 .../AbstractAutoPersistingKeyValueStoreService.cpp |   3 +-
 .../keyvalue/PersistableKeyValueStoreService.cpp   |   2 +-
 libminifi/src/core/Core.cpp                        |  23 +-
 libminifi/src/io/ClientSocket.cpp                  |   8 +-
 libminifi/src/io/DescriptorStream.cpp              |   3 +-
 libminifi/src/io/FileStream.cpp                    |  48 ++-
 libminifi/src/io/ServerSocket.cpp                  |   2 +-
 libminifi/src/io/ZlibStream.cpp                    |   6 +-
 libminifi/src/io/tls/SecureDescriptorStream.cpp    |   3 +-
 libminifi/src/io/tls/TLSServerSocket.cpp           |   3 +-
 libminifi/src/io/tls/TLSSocket.cpp                 |   5 +-
 libminifi/src/properties/Properties.cpp            |   3 +-
 libminifi/src/provenance/Provenance.cpp            |   2 +-
 libminifi/src/sitetosite/RawSocketProtocol.cpp     |  10 +-
 libminifi/src/sitetosite/SiteToSiteClient.cpp      |   6 +-
 libminifi/src/utils/HTTPClient.cpp                 |   7 +-
 libminifi/src/utils/Id.cpp                         |  26 +-
 libminifi/src/utils/file/FilePattern.cpp           |   2 +-
 libminifi/test/KamikazeProcessor.h                 |  18 +-
 libminifi/test/RandomServerSocket.cpp              |   2 +-
 libminifi/test/TestBase.cpp                        | 309 ++++++++++++++----
 libminifi/test/TestBase.h                          | 361 +++++++--------------
 .../test/archive-tests/CompressContentTests.cpp    |  88 ++---
 libminifi/test/archive-tests/FocusArchiveTests.cpp |   2 +
 .../test/archive-tests/ManipulateArchiveTests.cpp  |   2 +
 libminifi/test/archive-tests/MergeFileTests.cpp    | 152 ++++-----
 .../test/aws-tests/AWSCredentialsServiceTest.cpp   |   1 +
 libminifi/test/aws-tests/S3TestsFixture.h          |  14 +-
 .../test/azure-tests/PutAzureBlobStorageTests.cpp  |  12 +-
 .../azure-tests/PutAzureDataLakeStorageTests.cpp   |  12 +-
 .../test/bustache-tests/ApplyTemplateTests.cpp     |   2 +
 libminifi/test/flow-tests/SessionTests.cpp         |   9 +
 libminifi/test/flow-tests/TestControllerWithFlow.h |   8 +-
 libminifi/test/integration/IntegrationBase.h       |   4 +
 .../PersistableKeyValueStoreServiceTest.cpp        |   2 +
 .../UnorderedMapKeyValueStoreServiceTest.cpp       |   2 +
 libminifi/test/rocksdb-tests/EncryptionTests.cpp   |   4 +-
 libminifi/test/rocksdb-tests/ProvenanceTests.cpp   |   2 +
 libminifi/test/rocksdb-tests/RocksDBTests.cpp      |   3 +
 .../TestExecuteScriptProcessorWithPythonScript.cpp |  22 +-
 libminifi/test/sql-tests/ExecuteSQLTests.cpp       |  20 +-
 .../test/sql-tests/QueryDatabaseTableTests.cpp     |  72 ++--
 libminifi/test/sql-tests/SQLTestController.h       |  13 +-
 libminifi/test/unit/BackTraceTests.cpp             |   2 +
 libminifi/test/unit/C2MetricsTests.cpp             |   2 +
 libminifi/test/unit/ConnectionTests.cpp            |   1 +
 .../test/unit/ContentRepositoryDependentTests.h    |   1 +
 libminifi/test/unit/FilePatternTests.cpp           |  27 +-
 libminifi/test/unit/FileUtilsTests.cpp             |  11 +-
 libminifi/test/unit/FlowFileQueueTests.cpp         |   4 +
 libminifi/test/unit/FlowFileSerializationTests.cpp |   2 +
 libminifi/test/unit/LoggerConfigurationTests.cpp   |   1 +
 libminifi/test/unit/MockClasses.h                  |  18 +-
 libminifi/test/unit/ProcessSessionTests.cpp        |  29 +-
 libminifi/test/unit/PropertyTests.cpp              |   2 +
 libminifi/test/unit/ProvenanceTestHelper.h         |  52 +--
 libminifi/test/unit/SiteToSiteHelper.h             |   2 +
 main/AgentDocs.cpp                                 |   2 +-
 main/MainHelper.cpp                                |   7 +-
 main/MainHelper.h                                  |   2 +-
 main/MiNiFiMain.cpp                                |  12 +-
 main/MiNiFiWindowsService.cpp                      |   8 +-
 main/MiNiFiWindowsService.h                        |   2 +-
 nanofi/include/cxx/C2CallbackAgent.h               |  16 +-
 nanofi/include/cxx/CallbackProcessor.h             |   6 +-
 nanofi/include/cxx/Plan.h                          |   7 +-
 nanofi/src/api/nanofi.cpp                          |   4 +-
 nanofi/src/cxx/C2CallbackAgent.cpp                 |   3 +-
 nanofi/src/cxx/Plan.cpp                            |   6 +-
 315 files changed, 1797 insertions(+), 1874 deletions(-)

diff --git a/controller/Controller.h b/controller/Controller.h
index 5d8a39a..773d4cf 100644
--- a/controller/Controller.h
+++ b/controller/Controller.h
@@ -18,12 +18,15 @@
 #ifndef CONTROLLER_CONTROLLER_H_
 #define CONTROLLER_CONTROLLER_H_
 
+#include <memory>
+
 #include "core/RepositoryFactory.h"
 #include "core/ConfigurationFactory.h"
 #include "core/extension/ExtensionManager.h"
 #include "io/ClientSocket.h"
 #include "c2/ControllerSocketProtocol.h"
 #include "utils/gsl.h"
+#include "FlowController.h"
 
 /**
  * Sends a single argument comment
@@ -31,10 +34,10 @@
  * @param op operation to perform
  * @param value value to send
  */
-bool sendSingleCommand(std::unique_ptr<minifi::io::Socket> socket, uint8_t op, const std::string value) {
+bool sendSingleCommand(std::unique_ptr<org::apache::nifi::minifi::io::Socket> socket, uint8_t op, const std::string value) {
   socket->initialize();
   std::vector<uint8_t> data;
-  minifi::io::BufferStream stream;
+  org::apache::nifi::minifi::io::BufferStream stream;
   stream.write(&op, 1);
   stream.write(value);
   return socket->write(stream.getBuffer(), stream.size()) == stream.size();
@@ -45,8 +48,8 @@ bool sendSingleCommand(std::unique_ptr<minifi::io::Socket> socket, uint8_t op, c
  * @param socket socket unique ptr.
  * @param op operation to perform
  */
-bool stopComponent(std::unique_ptr<minifi::io::Socket> socket, std::string component) {
-  return sendSingleCommand(std::move(socket), minifi::c2::Operation::STOP, component);
+bool stopComponent(std::unique_ptr<org::apache::nifi::minifi::io::Socket> socket, std::string component) {
+  return sendSingleCommand(std::move(socket), org::apache::nifi::minifi::c2::Operation::STOP, component);
 }
 
 /**
@@ -54,8 +57,8 @@ bool stopComponent(std::unique_ptr<minifi::io::Socket> socket, std::string compo
  * @param socket socket unique ptr.
  * @param op operation to perform
  */
-bool startComponent(std::unique_ptr<minifi::io::Socket> socket, std::string component) {
-  return sendSingleCommand(std::move(socket), minifi::c2::Operation::START, component);
+bool startComponent(std::unique_ptr<org::apache::nifi::minifi::io::Socket> socket, std::string component) {
+  return sendSingleCommand(std::move(socket), org::apache::nifi::minifi::c2::Operation::START, component);
 }
 
 /**
@@ -63,28 +66,28 @@ bool startComponent(std::unique_ptr<minifi::io::Socket> socket, std::string comp
  * @param socket socket unique ptr.
  * @param op operation to perform
  */
-bool clearConnection(std::unique_ptr<minifi::io::Socket> socket, std::string connection) {
-  return sendSingleCommand(std::move(socket), minifi::c2::Operation::CLEAR, connection);
+bool clearConnection(std::unique_ptr<org::apache::nifi::minifi::io::Socket> socket, std::string connection) {
+  return sendSingleCommand(std::move(socket), org::apache::nifi::minifi::c2::Operation::CLEAR, connection);
 }
 
 /**
  * Updates the flow to the provided file
  */
-int updateFlow(std::unique_ptr<minifi::io::Socket> socket, std::ostream &out, std::string file) {
+int updateFlow(std::unique_ptr<org::apache::nifi::minifi::io::Socket> socket, std::ostream &out, std::string file) {
   socket->initialize();
   std::vector<uint8_t> data;
-  uint8_t op = minifi::c2::Operation::UPDATE;
-  minifi::io::BufferStream stream;
+  uint8_t op = org::apache::nifi::minifi::c2::Operation::UPDATE;
+  org::apache::nifi::minifi::io::BufferStream stream;
   stream.write(&op, 1);
   stream.write("flow");
   stream.write(file);
-  if (minifi::io::isError(socket->write(stream.getBuffer(), stream.size()))) {
+  if (org::apache::nifi::minifi::io::isError(socket->write(stream.getBuffer(), stream.size()))) {
     return -1;
   }
   // read the response
   uint8_t resp = 0;
   socket->read(&resp, 1);
-  if (resp == minifi::c2::Operation::DESCRIBE) {
+  if (resp == org::apache::nifi::minifi::c2::Operation::DESCRIBE) {
     uint16_t connections = 0;
     socket->read(connections);
     out << connections << " are full" << std::endl;
@@ -101,20 +104,20 @@ int updateFlow(std::unique_ptr<minifi::io::Socket> socket, std::ostream &out, st
  * Lists connections which are full
  * @param socket socket ptr
  */
-int getFullConnections(std::unique_ptr<minifi::io::Socket> socket, std::ostream &out) {
+int getFullConnections(std::unique_ptr<org::apache::nifi::minifi::io::Socket> socket, std::ostream &out) {
   socket->initialize();
   std::vector<uint8_t> data;
-  uint8_t op = minifi::c2::Operation::DESCRIBE;
-  minifi::io::BufferStream stream;
+  uint8_t op = org::apache::nifi::minifi::c2::Operation::DESCRIBE;
+  org::apache::nifi::minifi::io::BufferStream stream;
   stream.write(&op, 1);
   stream.write("getfull");
-  if (minifi::io::isError(socket->write(stream.getBuffer(), stream.size()))) {
+  if (org::apache::nifi::minifi::io::isError(socket->write(stream.getBuffer(), stream.size()))) {
     return -1;
   }
   // read the response
   uint8_t resp = 0;
   socket->read(&resp, 1);
-  if (resp == minifi::c2::Operation::DESCRIBE) {
+  if (resp == org::apache::nifi::minifi::c2::Operation::DESCRIBE) {
     uint16_t connections = 0;
     socket->read(connections);
     out << connections << " are full" << std::endl;
@@ -127,20 +130,20 @@ int getFullConnections(std::unique_ptr<minifi::io::Socket> socket, std::ostream
   return 0;
 }
 
-int getJstacks(std::unique_ptr<minifi::io::Socket> socket, std::ostream &out) {
+int getJstacks(std::unique_ptr<org::apache::nifi::minifi::io::Socket> socket, std::ostream &out) {
   socket->initialize();
   std::vector<uint8_t> data;
-  uint8_t op = minifi::c2::Operation::DESCRIBE;
-  minifi::io::BufferStream stream;
+  uint8_t op = org::apache::nifi::minifi::c2::Operation::DESCRIBE;
+  org::apache::nifi::minifi::io::BufferStream stream;
   stream.write(&op, 1);
   stream.write("jstack");
-  if (minifi::io::isError(socket->write(stream.getBuffer(), stream.size()))) {
+  if (org::apache::nifi::minifi::io::isError(socket->write(stream.getBuffer(), stream.size()))) {
     return -1;
   }
   // read the response
   uint8_t resp = 0;
   socket->read(&resp, 1);
-  if (resp == minifi::c2::Operation::DESCRIBE) {
+  if (resp == org::apache::nifi::minifi::c2::Operation::DESCRIBE) {
     uint64_t size = 0;
     socket->read(size);
 
@@ -164,21 +167,21 @@ int getJstacks(std::unique_ptr<minifi::io::Socket> socket, std::ostream &out) {
  * @param socket socket ptr
  * @param connection connection whose size will be returned.
  */
-int getConnectionSize(std::unique_ptr<minifi::io::Socket> socket, std::ostream &out, std::string connection) {
+int getConnectionSize(std::unique_ptr<org::apache::nifi::minifi::io::Socket> socket, std::ostream &out, std::string connection) {
   socket->initialize();
   std::vector<uint8_t> data;
-  uint8_t op = minifi::c2::Operation::DESCRIBE;
-  minifi::io::BufferStream stream;
+  uint8_t op = org::apache::nifi::minifi::c2::Operation::DESCRIBE;
+  org::apache::nifi::minifi::io::BufferStream stream;
   stream.write(&op, 1);
   stream.write("queue");
   stream.write(connection);
-  if (minifi::io::isError(socket->write(stream.getBuffer(), stream.size()))) {
+  if (org::apache::nifi::minifi::io::isError(socket->write(stream.getBuffer(), stream.size()))) {
     return -1;
   }
   // read the response
   uint8_t resp = 0;
   socket->read(&resp, 1);
-  if (resp == minifi::c2::Operation::DESCRIBE) {
+  if (resp == org::apache::nifi::minifi::c2::Operation::DESCRIBE) {
     std::string size;
     socket->read(size);
     out << "Size/Max of " << connection << " " << size << std::endl;
@@ -186,13 +189,13 @@ int getConnectionSize(std::unique_ptr<minifi::io::Socket> socket, std::ostream &
   return 0;
 }
 
-int listComponents(std::unique_ptr<minifi::io::Socket> socket, std::ostream &out, bool show_header = true) {
+int listComponents(std::unique_ptr<org::apache::nifi::minifi::io::Socket> socket, std::ostream &out, bool show_header = true) {
   socket->initialize();
-  minifi::io::BufferStream stream;
-  uint8_t op = minifi::c2::Operation::DESCRIBE;
+  org::apache::nifi::minifi::io::BufferStream stream;
+  uint8_t op = org::apache::nifi::minifi::c2::Operation::DESCRIBE;
   stream.write(&op, 1);
   stream.write("components");
-  if (minifi::io::isError(socket->write(stream.getBuffer(), stream.size()))) {
+  if (org::apache::nifi::minifi::io::isError(socket->write(stream.getBuffer(), stream.size()))) {
     return -1;
   }
   uint16_t responses = 0;
@@ -210,13 +213,13 @@ int listComponents(std::unique_ptr<minifi::io::Socket> socket, std::ostream &out
   return 0;
 }
 
-int listConnections(std::unique_ptr<minifi::io::Socket> socket, std::ostream &out, bool show_header = true) {
+int listConnections(std::unique_ptr<org::apache::nifi::minifi::io::Socket> socket, std::ostream &out, bool show_header = true) {
   socket->initialize();
-  minifi::io::BufferStream stream;
-  uint8_t op = minifi::c2::Operation::DESCRIBE;
+  org::apache::nifi::minifi::io::BufferStream stream;
+  uint8_t op = org::apache::nifi::minifi::c2::Operation::DESCRIBE;
   stream.write(&op, 1);
   stream.write("connections");
-  if (minifi::io::isError(socket->write(stream.getBuffer(), stream.size()))) {
+  if (org::apache::nifi::minifi::io::isError(socket->write(stream.getBuffer(), stream.size()))) {
     return -1;
   }
   uint16_t responses = 0;
@@ -233,46 +236,44 @@ int listConnections(std::unique_ptr<minifi::io::Socket> socket, std::ostream &ou
   return 0;
 }
 
-std::shared_ptr<core::controller::ControllerService> getControllerService(const std::shared_ptr<minifi::Configure> &configuration, const std::string &service_name) {
+std::shared_ptr<org::apache::nifi::minifi::core::controller::ControllerService> getControllerService(const std::shared_ptr<org::apache::nifi::minifi::Configure> &configuration, const std::string &service_name) {
   std::string prov_repo_class = "provenancerepository";
   std::string flow_repo_class = "flowfilerepository";
   std::string nifi_configuration_class_name = "yamlconfiguration";
   std::string content_repo_class = "filesystemrepository";
 
-  minifi::core::extension::ExtensionManager::get().initialize(configuration);
+  org::apache::nifi::minifi::core::extension::ExtensionManager::get().initialize(configuration);
 
-  configuration->get(minifi::Configure::nifi_provenance_repository_class_name, prov_repo_class);
+  configuration->get(org::apache::nifi::minifi::Configure::nifi_provenance_repository_class_name, prov_repo_class);
   // Create repos for flow record and provenance
-  std::shared_ptr<core::Repository> prov_repo = core::createRepository(prov_repo_class, true, "provenance");
+  const auto prov_repo = org::apache::nifi::minifi::core::createRepository(prov_repo_class, true, "provenance");
   prov_repo->initialize(configuration);
 
-  configuration->get(minifi::Configure::nifi_flow_repository_class_name, flow_repo_class);
+  configuration->get(org::apache::nifi::minifi::Configure::nifi_flow_repository_class_name, flow_repo_class);
 
-  std::shared_ptr<core::Repository> flow_repo = core::createRepository(flow_repo_class, true, "flowfile");
+  const auto flow_repo = org::apache::nifi::minifi::core::createRepository(flow_repo_class, true, "flowfile");
 
   flow_repo->initialize(configuration);
 
-  configuration->get(minifi::Configure::nifi_content_repository_class_name, content_repo_class);
+  configuration->get(org::apache::nifi::minifi::Configure::nifi_content_repository_class_name, content_repo_class);
 
-  std::shared_ptr<core::ContentRepository> content_repo = core::createContentRepository(content_repo_class, true, "content");
+  const auto content_repo = org::apache::nifi::minifi::core::createContentRepository(content_repo_class, true, "content");
 
   content_repo->initialize(configuration);
 
   std::string content_repo_path;
-  if (configuration->get(minifi::Configure::nifi_dbcontent_repository_directory_default, content_repo_path)) {
+  if (configuration->get(org::apache::nifi::minifi::Configure::nifi_dbcontent_repository_directory_default, content_repo_path)) {
     std::cout << "setting default dir to " << content_repo_path << std::endl;
-    minifi::setDefaultDirectory(content_repo_path);
+    org::apache::nifi::minifi::setDefaultDirectory(content_repo_path);
   }
 
-  configuration->get(minifi::Configure::nifi_configuration_class_name, nifi_configuration_class_name);
+  configuration->get(org::apache::nifi::minifi::Configure::nifi_configuration_class_name, nifi_configuration_class_name);
 
-  std::shared_ptr<minifi::io::StreamFactory> stream_factory = minifi::io::StreamFactory::getInstance(configuration);
+  const auto stream_factory = org::apache::nifi::minifi::io::StreamFactory::getInstance(configuration);
 
-  std::unique_ptr<core::FlowConfiguration> flow_configuration = core::createFlowConfiguration(
-      prov_repo, flow_repo, content_repo, configuration, stream_factory, nifi_configuration_class_name);
+  auto flow_configuration = org::apache::nifi::minifi::core::createFlowConfiguration(prov_repo, flow_repo, content_repo, configuration, stream_factory, nifi_configuration_class_name);
 
-  std::shared_ptr<minifi::FlowController> controller = std::unique_ptr<minifi::FlowController>(
-      new minifi::FlowController(prov_repo, flow_repo, configuration, std::move(flow_configuration), content_repo));
+  const auto controller = std::make_unique<org::apache::nifi::minifi::FlowController>(prov_repo, flow_repo, configuration, std::move(flow_configuration), content_repo);
   controller->load();
   auto service = controller->getControllerService(service_name);
   if (service)
@@ -280,38 +281,38 @@ std::shared_ptr<core::controller::ControllerService> getControllerService(const
   return service;
 }
 
-void printManifest(const std::shared_ptr<minifi::Configure> &configuration) {
+void printManifest(const std::shared_ptr<org::apache::nifi::minifi::Configure> &configuration) {
   std::string prov_repo_class = "volatileprovenancerepository";
   std::string flow_repo_class = "volatileflowfilerepository";
   std::string nifi_configuration_class_name = "yamlconfiguration";
   std::string content_repo_class = "volatilecontentrepository";
 
-  std::shared_ptr<logging::LoggerProperties> log_properties = std::make_shared<logging::LoggerProperties>();
+  const auto log_properties = std::make_shared<org::apache::nifi::minifi::core::logging::LoggerProperties>();
   log_properties->setHome("./");
   log_properties->set("appender.stdout", "stdout");
   log_properties->set("logger.org::apache::nifi::minifi", "OFF,stdout");
-  logging::LoggerConfiguration::getConfiguration().initialize(log_properties);
+  org::apache::nifi::minifi::core::logging::LoggerConfiguration::getConfiguration().initialize(log_properties);
 
-  configuration->get(minifi::Configure::nifi_provenance_repository_class_name, prov_repo_class);
+  configuration->get(org::apache::nifi::minifi::Configure::nifi_provenance_repository_class_name, prov_repo_class);
   // Create repos for flow record and provenance
-  std::shared_ptr<core::Repository> prov_repo = core::createRepository(prov_repo_class, true, "provenance");
+  const auto prov_repo = org::apache::nifi::minifi::core::createRepository(prov_repo_class, true, "provenance");
   prov_repo->initialize(configuration);
 
-  configuration->get(minifi::Configure::nifi_flow_repository_class_name, flow_repo_class);
+  configuration->get(org::apache::nifi::minifi::Configure::nifi_flow_repository_class_name, flow_repo_class);
 
-  std::shared_ptr<core::Repository> flow_repo = core::createRepository(flow_repo_class, true, "flowfile");
+  const auto flow_repo = org::apache::nifi::minifi::core::createRepository(flow_repo_class, true, "flowfile");
 
   flow_repo->initialize(configuration);
 
-  configuration->get(minifi::Configure::nifi_content_repository_class_name, content_repo_class);
+  configuration->get(org::apache::nifi::minifi::Configure::nifi_content_repository_class_name, content_repo_class);
 
-  std::shared_ptr<core::ContentRepository> content_repo = core::createContentRepository(content_repo_class, true, "content");
+  const auto content_repo = org::apache::nifi::minifi::core::createContentRepository(content_repo_class, true, "content");
 
   content_repo->initialize(configuration);
 
   std::string content_repo_path;
-  if (configuration->get(minifi::Configure::nifi_dbcontent_repository_directory_default, content_repo_path)) {
-    minifi::setDefaultDirectory(content_repo_path);
+  if (configuration->get(org::apache::nifi::minifi::Configure::nifi_dbcontent_repository_directory_default, content_repo_path)) {
+    org::apache::nifi::minifi::setDefaultDirectory(content_repo_path);
   }
 
   configuration->set("nifi.c2.agent.heartbeat.period", "25");
@@ -321,15 +322,14 @@ void printManifest(const std::shared_ptr<minifi::Configure> &configuration) {
   configuration->set("c2.agent.listen", "true");
   configuration->set("nifi.c2.agent.heartbeat.reporter.classes", "AgentPrinter");
 
-  configuration->get(minifi::Configure::nifi_configuration_class_name, nifi_configuration_class_name);
+  configuration->get(org::apache::nifi::minifi::Configure::nifi_configuration_class_name, nifi_configuration_class_name);
 
-  std::shared_ptr<minifi::io::StreamFactory> stream_factory = minifi::io::StreamFactory::getInstance(configuration);
+  const auto stream_factory = org::apache::nifi::minifi::io::StreamFactory::getInstance(configuration);
 
-  std::unique_ptr<core::FlowConfiguration> flow_configuration = core::createFlowConfiguration(
+  auto flow_configuration = org::apache::nifi::minifi::core::createFlowConfiguration(
       prov_repo, flow_repo, content_repo, configuration, stream_factory, nifi_configuration_class_name);
 
-  std::shared_ptr<minifi::FlowController> controller = std::unique_ptr<minifi::FlowController>(
-      new minifi::FlowController(prov_repo, flow_repo, configuration, std::move(flow_configuration), content_repo, "manifest"));
+  const auto controller = std::make_unique<org::apache::nifi::minifi::FlowController>(prov_repo, flow_repo, configuration, std::move(flow_configuration), content_repo, "manifest");
   controller->load();
   controller->start();
   std::this_thread::sleep_for(std::chrono::milliseconds(10000));
diff --git a/controller/MiNiFiController.cpp b/controller/MiNiFiController.cpp
index f5901be..82b6382 100644
--- a/controller/MiNiFiController.cpp
+++ b/controller/MiNiFiController.cpp
@@ -38,8 +38,10 @@
 
 #include "cxxopts.hpp"
 
+namespace minifi = org::apache::nifi::minifi;
+
 int main(int argc, char **argv) {
-  std::shared_ptr<logging::Logger> logger = logging::LoggerConfiguration::getConfiguration().getLogger("controller");
+  const auto logger = minifi::core::logging::LoggerConfiguration::getConfiguration().getLogger("controller");
 
   const std::string minifiHome = determineMinifiHome(logger);
   if (minifiHome.empty()) {
@@ -47,14 +49,14 @@ int main(int argc, char **argv) {
     return -1;
   }
 
-  std::shared_ptr<minifi::Configure> configuration = std::make_shared<minifi::Configure>();
+  const auto configuration = std::make_shared<minifi::Configure>();
   configuration->setHome(minifiHome);
   configuration->loadConfigureFile(DEFAULT_NIFI_PROPERTIES_FILE);
 
-  std::shared_ptr<logging::LoggerProperties> log_properties = std::make_shared<logging::LoggerProperties>();
+  const auto log_properties = std::make_shared<minifi::core::logging::LoggerProperties>();
   log_properties->setHome(minifiHome);
   log_properties->loadConfigureFile(DEFAULT_LOG_PROPERTIES_FILE);
-  logging::LoggerConfiguration::getConfiguration().initialize(log_properties);
+  minifi::core::logging::LoggerConfiguration::getConfiguration().initialize(log_properties);
 
   std::string context_name;
 
@@ -62,7 +64,7 @@ int main(int argc, char **argv) {
 
   // if the user wishes to use a controller service we need to instantiate the flow
   if (configuration->get("controller.ssl.context.service", context_name)) {
-    std::shared_ptr<core::controller::ControllerService> service = getControllerService(configuration, context_name);
+    const auto service = getControllerService(configuration, context_name);
     if (nullptr != service) {
       secure_context = std::static_pointer_cast<minifi::controllers::SSLContextService>(service);
     }
@@ -70,7 +72,7 @@ int main(int argc, char **argv) {
 
   if (nullptr == secure_context) {
     std::string secureStr;
-    if (configuration->get(minifi::Configure::nifi_remote_input_secure, secureStr) && org::apache::nifi::minifi::utils::StringUtils::toBool(secureStr).value_or(false)) {
+    if (configuration->get(minifi::Configure::nifi_remote_input_secure, secureStr) && minifi::utils::StringUtils::toBool(secureStr).value_or(false)) {
       secure_context = std::make_shared<minifi::controllers::SSLContextService>("ControllerSocketProtocolSSL", configuration);
       secure_context->onEnable();
     }
diff --git a/encrypt-config/ConfigFile.h b/encrypt-config/ConfigFile.h
index 0fed2c8..53b7e58 100644
--- a/encrypt-config/ConfigFile.h
+++ b/encrypt-config/ConfigFile.h
@@ -16,7 +16,6 @@
  */
 #pragma once
 
-#include <istream>
 #include <string>
 #include <vector>
 
diff --git a/encrypt-config/EncryptConfig.cpp b/encrypt-config/EncryptConfig.cpp
index 61354bc..367a71e 100644
--- a/encrypt-config/EncryptConfig.cpp
+++ b/encrypt-config/EncryptConfig.cpp
@@ -19,6 +19,7 @@
 
 #include <sodium.h>
 
+#include <fstream>
 #include <optional>
 #include <stdexcept>
 
diff --git a/encrypt-config/tests/ConfigFileEncryptorTests.cpp b/encrypt-config/tests/ConfigFileEncryptorTests.cpp
index a87be88..9277e62 100644
--- a/encrypt-config/tests/ConfigFileEncryptorTests.cpp
+++ b/encrypt-config/tests/ConfigFileEncryptorTests.cpp
@@ -15,9 +15,10 @@
  * limitations under the License.
  */
 
+#include <fstream>
 #include <optional>
-#include <string>
 #include <regex>
+#include <string>
 
 #include "ConfigFileEncryptor.h"
 
@@ -25,6 +26,7 @@
 
 using org::apache::nifi::minifi::encrypt_config::ConfigFile;
 using org::apache::nifi::minifi::encrypt_config::encryptSensitivePropertiesInFile;
+namespace utils = org::apache::nifi::minifi::utils;
 
 namespace {
 size_t base64_length(size_t unencoded_length) {
@@ -32,17 +34,17 @@ size_t base64_length(size_t unencoded_length) {
 }
 
 bool check_encryption(const ConfigFile& test_file, const std::string& property_name, size_t original_value_length) {
-    const auto encrypted_value = test_file.getValue(property_name);
-    if (!encrypted_value) { return false; }
+  const auto encrypted_value = test_file.getValue(property_name);
+  if (!encrypted_value) { return false; }
 
-    const auto encryption_type = test_file.getValue(property_name + ".protected");
-    if (!encryption_type || *encryption_type != utils::crypto::EncryptionType::name()) { return false; }
+  const auto encryption_type = test_file.getValue(property_name + ".protected");
+  if (!encryption_type || *encryption_type != utils::crypto::EncryptionType::name()) { return false; }
 
-    auto length = base64_length(utils::crypto::EncryptionType::nonceLength()) +
-        utils::crypto::EncryptionType::separator().size() +
-        base64_length(original_value_length + utils::crypto::EncryptionType::macLength());
-    std::regex pattern("[0-9A-Za-z/+=|]{" + std::to_string(length) + "}");
-    return std::regex_match(*encrypted_value, pattern);
+  auto length = base64_length(utils::crypto::EncryptionType::nonceLength()) +
+      utils::crypto::EncryptionType::separator().size() +
+      base64_length(original_value_length + utils::crypto::EncryptionType::macLength());
+  std::regex pattern("[0-9A-Za-z/+=|]{" + std::to_string(length) + "}");
+  return std::regex_match(*encrypted_value, pattern);
 }
 }  // namespace
 
diff --git a/encrypt-config/tests/ConfigFileTests.cpp b/encrypt-config/tests/ConfigFileTests.cpp
index d962b90..e6d09d6 100644
--- a/encrypt-config/tests/ConfigFileTests.cpp
+++ b/encrypt-config/tests/ConfigFileTests.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+#include <fstream>
 #include <optional>
 #include <string>
 #include <vector>
diff --git a/extensions/aws/AWSCredentialsProvider.h b/extensions/aws/AWSCredentialsProvider.h
index a3aa1e7..0a9a5a0 100644
--- a/extensions/aws/AWSCredentialsProvider.h
+++ b/extensions/aws/AWSCredentialsProvider.h
@@ -37,7 +37,7 @@ namespace aws {
 
 class AWSCredentialsProvider {
  public:
-  AWSCredentialsProvider(
+  explicit AWSCredentialsProvider(
     bool use_default_credentials = false,
     const std::string &access_key = "",
     const std::string &secret_key = "",
@@ -46,8 +46,8 @@ class AWSCredentialsProvider {
   void setAccessKey(const std::string &access_key);
   void setSecretKey(const std::string &secret_key);
   void setCredentialsFile(const std::string &credentials_file);
-  bool getUseDefaultCredentials() const;
-  std::optional<Aws::Auth::AWSCredentials> getAWSCredentials();
+  [[nodiscard]] bool getUseDefaultCredentials() const;
+  [[nodiscard]] std::optional<Aws::Auth::AWSCredentials> getAWSCredentials();
 
  private:
   const utils::AWSInitializer& AWS_INITIALIZER = utils::AWSInitializer::get();
@@ -55,7 +55,7 @@ class AWSCredentialsProvider {
   std::string access_key_;
   std::string secret_key_;
   std::string credentials_file_;
-  std::shared_ptr<logging::Logger> logger_{logging::LoggerFactory<AWSCredentialsProvider>::getLogger()};
+  std::shared_ptr<core::logging::Logger> logger_{core::logging::LoggerFactory<AWSCredentialsProvider>::getLogger()};
 };
 
 }  // namespace aws
diff --git a/extensions/aws/processors/DeleteS3Object.h b/extensions/aws/processors/DeleteS3Object.h
index e59b9f3..55c69cd 100644
--- a/extensions/aws/processors/DeleteS3Object.h
+++ b/extensions/aws/processors/DeleteS3Object.h
@@ -52,7 +52,7 @@ class DeleteS3Object : public S3Processor {
   static const core::Relationship Success;
 
   explicit DeleteS3Object(const std::string& name, const minifi::utils::Identifier& uuid = minifi::utils::Identifier())
-    : S3Processor(name, uuid, logging::LoggerFactory<DeleteS3Object>::getLogger()) {
+    : S3Processor(name, uuid, core::logging::LoggerFactory<DeleteS3Object>::getLogger()) {
   }
 
   ~DeleteS3Object() override = default;
@@ -72,7 +72,7 @@ class DeleteS3Object : public S3Processor {
   friend class ::S3TestsFixture<DeleteS3Object>;
 
   explicit DeleteS3Object(const std::string& name, const minifi::utils::Identifier& uuid, std::unique_ptr<aws::s3::S3RequestSender> s3_request_sender)
-    : S3Processor(name, uuid, logging::LoggerFactory<DeleteS3Object>::getLogger(), std::move(s3_request_sender)) {
+    : S3Processor(name, uuid, core::logging::LoggerFactory<DeleteS3Object>::getLogger(), std::move(s3_request_sender)) {
   }
 
   std::optional<aws::s3::DeleteObjectRequestParameters> buildDeleteS3RequestParams(
diff --git a/extensions/aws/processors/FetchS3Object.h b/extensions/aws/processors/FetchS3Object.h
index 14b1e98..7e0d79c 100644
--- a/extensions/aws/processors/FetchS3Object.h
+++ b/extensions/aws/processors/FetchS3Object.h
@@ -54,7 +54,7 @@ class FetchS3Object : public S3Processor {
   static const core::Relationship Success;
 
   explicit FetchS3Object(const std::string& name, const minifi::utils::Identifier& uuid = minifi::utils::Identifier())
-    : S3Processor(name, uuid, logging::LoggerFactory<FetchS3Object>::getLogger()) {
+    : S3Processor(name, uuid, core::logging::LoggerFactory<FetchS3Object>::getLogger()) {
   }
 
   ~FetchS3Object() override = default;
@@ -101,7 +101,7 @@ class FetchS3Object : public S3Processor {
   friend class ::S3TestsFixture<FetchS3Object>;
 
   explicit FetchS3Object(const std::string& name, const minifi::utils::Identifier& uuid, std::unique_ptr<aws::s3::S3RequestSender> s3_request_sender)
-    : S3Processor(name, uuid, logging::LoggerFactory<FetchS3Object>::getLogger(), std::move(s3_request_sender)) {
+    : S3Processor(name, uuid, core::logging::LoggerFactory<FetchS3Object>::getLogger(), std::move(s3_request_sender)) {
   }
 
   std::optional<aws::s3::GetObjectRequestParameters> buildFetchS3RequestParams(
diff --git a/extensions/aws/processors/ListS3.h b/extensions/aws/processors/ListS3.h
index 8646ac2..d8c2e3b 100644
--- a/extensions/aws/processors/ListS3.h
+++ b/extensions/aws/processors/ListS3.h
@@ -55,11 +55,11 @@ class ListS3 : public S3Processor {
   static const core::Relationship Success;
 
   explicit ListS3(const std::string& name, const minifi::utils::Identifier& uuid = minifi::utils::Identifier())
-    : S3Processor(name, uuid, logging::LoggerFactory<ListS3>::getLogger()) {
+    : S3Processor(name, uuid, core::logging::LoggerFactory<ListS3>::getLogger()) {
   }
 
   explicit ListS3(const std::string& name, minifi::utils::Identifier uuid, std::unique_ptr<aws::s3::S3RequestSender> s3_request_sender)
-    : S3Processor(name, uuid, logging::LoggerFactory<ListS3>::getLogger(), std::move(s3_request_sender)) {
+    : S3Processor(name, uuid, core::logging::LoggerFactory<ListS3>::getLogger(), std::move(s3_request_sender)) {
   }
 
   ~ListS3() override = default;
diff --git a/extensions/aws/processors/PutS3Object.h b/extensions/aws/processors/PutS3Object.h
index b434bef..5c601b2 100644
--- a/extensions/aws/processors/PutS3Object.h
+++ b/extensions/aws/processors/PutS3Object.h
@@ -68,7 +68,7 @@ class PutS3Object : public S3Processor {
   static const core::Relationship Success;
 
   explicit PutS3Object(const std::string& name, const minifi::utils::Identifier& uuid = minifi::utils::Identifier())
-    : S3Processor(name, uuid, logging::LoggerFactory<PutS3Object>::getLogger()) {
+    : S3Processor(name, uuid, core::logging::LoggerFactory<PutS3Object>::getLogger()) {
   }
 
   ~PutS3Object() override = default;
@@ -131,7 +131,7 @@ class PutS3Object : public S3Processor {
   friend class ::S3TestsFixture<PutS3Object>;
 
   explicit PutS3Object(const std::string& name, const minifi::utils::Identifier& uuid, std::unique_ptr<aws::s3::S3RequestSender> s3_request_sender)
-    : S3Processor(name, uuid, logging::LoggerFactory<PutS3Object>::getLogger(), std::move(s3_request_sender)) {
+    : S3Processor(name, uuid, core::logging::LoggerFactory<PutS3Object>::getLogger(), std::move(s3_request_sender)) {
   }
 
   void fillUserMetadata(const std::shared_ptr<core::ProcessContext> &context);
diff --git a/extensions/aws/processors/S3Processor.cpp b/extensions/aws/processors/S3Processor.cpp
index 5bc0b27..7ea8005 100644
--- a/extensions/aws/processors/S3Processor.cpp
+++ b/extensions/aws/processors/S3Processor.cpp
@@ -23,6 +23,7 @@
 #include <string>
 #include <set>
 #include <memory>
+#include <utility>
 
 #include "S3Wrapper.h"
 #include "AWSCredentialsService.h"
@@ -114,14 +115,14 @@ const core::Property S3Processor::UseDefaultCredentials(
     ->isRequired(true)
     ->build());
 
-S3Processor::S3Processor(const std::string& name, const minifi::utils::Identifier& uuid, const std::shared_ptr<logging::Logger> &logger)
+S3Processor::S3Processor(const std::string& name, const minifi::utils::Identifier& uuid, std::shared_ptr<core::logging::Logger> logger)
   : core::Processor(name, uuid),
-    logger_(logger) {
+    logger_(std::move(logger)) {
 }
 
-S3Processor::S3Processor(const std::string& name, const minifi::utils::Identifier& uuid, const std::shared_ptr<logging::Logger> &logger, std::unique_ptr<aws::s3::S3RequestSender> s3_request_sender)
+S3Processor::S3Processor(const std::string& name, const minifi::utils::Identifier& uuid, std::shared_ptr<core::logging::Logger> logger, std::unique_ptr<aws::s3::S3RequestSender> s3_request_sender)
   : core::Processor(name, uuid),
-    logger_(logger),
+    logger_(std::move(logger)),
     s3_wrapper_(std::move(s3_request_sender)) {
 }
 
diff --git a/extensions/aws/processors/S3Processor.h b/extensions/aws/processors/S3Processor.h
index eaad8fb..c22738f 100644
--- a/extensions/aws/processors/S3Processor.h
+++ b/extensions/aws/processors/S3Processor.h
@@ -100,20 +100,20 @@ class S3Processor : public core::Processor {
   static const core::Property ProxyPassword;
   static const core::Property UseDefaultCredentials;
 
-  explicit S3Processor(const std::string& name, const minifi::utils::Identifier& uuid, const std::shared_ptr<logging::Logger> &logger);
+  explicit S3Processor(const std::string& name, const minifi::utils::Identifier& uuid, std::shared_ptr<core::logging::Logger> logger);
 
   bool supportsDynamicProperties() override { return true; }
   void onSchedule(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::ProcessSessionFactory> &sessionFactory) override;
 
  protected:
-  explicit S3Processor(const std::string& name, const minifi::utils::Identifier& uuid, const std::shared_ptr<logging::Logger> &logger, std::unique_ptr<aws::s3::S3RequestSender> s3_request_sender);
+  explicit S3Processor(const std::string& name, const minifi::utils::Identifier& uuid, std::shared_ptr<core::logging::Logger> logger, std::unique_ptr<aws::s3::S3RequestSender> s3_request_sender);
 
   std::optional<Aws::Auth::AWSCredentials> getAWSCredentialsFromControllerService(const std::shared_ptr<core::ProcessContext> &context) const;
   std::optional<Aws::Auth::AWSCredentials> getAWSCredentials(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::FlowFile> &flow_file);
   std::optional<aws::s3::ProxyOptions> getProxy(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::FlowFile> &flow_file);
   std::optional<CommonProperties> getCommonELSupportedProperties(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::FlowFile> &flow_file);
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_;
   aws::s3::S3Wrapper s3_wrapper_;
   Aws::Client::ClientConfiguration client_config_;
 };
diff --git a/extensions/aws/utils/AWSSdkLogger.h b/extensions/aws/utils/AWSSdkLogger.h
index 1365648..87f764a 100644
--- a/extensions/aws/utils/AWSSdkLogger.h
+++ b/extensions/aws/utils/AWSSdkLogger.h
@@ -34,13 +34,13 @@ namespace utils {
 
 class AWSSdkLogger : public Aws::Utils::Logging::LogSystemInterface {
  public:
-  Aws::Utils::Logging::LogLevel GetLogLevel() const override;
+  [[nodiscard]] Aws::Utils::Logging::LogLevel GetLogLevel() const override;
   void Log(Aws::Utils::Logging::LogLevel log_level, const char* tag, const char* format_str, ...) override;
   void LogStream(Aws::Utils::Logging::LogLevel log_level, const char* tag, const Aws::OStringStream &message_stream) override;
   void Flush() override;
 
  private:
-  std::shared_ptr<logging::Logger> logger_{logging::LoggerFactory<AWSSdkLogger>::getLogger()};
+  std::shared_ptr<core::logging::Logger> logger_{core::logging::LoggerFactory<AWSSdkLogger>::getLogger()};
 };
 
 } /* namespace utils */
diff --git a/extensions/azure/controllerservices/AzureStorageCredentialsService.h b/extensions/azure/controllerservices/AzureStorageCredentialsService.h
index 04887ae..14928e5 100644
--- a/extensions/azure/controllerservices/AzureStorageCredentialsService.h
+++ b/extensions/azure/controllerservices/AzureStorageCredentialsService.h
@@ -38,13 +38,11 @@ class AzureStorageCredentialsService : public core::controller::ControllerServic
   EXTENSIONAPI static const core::Property UseManagedIdentityCredentials;
 
   explicit AzureStorageCredentialsService(const std::string& name, const minifi::utils::Identifier& uuid = {})
-      : ControllerService(name, uuid),
-        logger_(logging::LoggerFactory<AzureStorageCredentialsService>::getLogger()) {
+      : ControllerService(name, uuid) {
   }
 
   explicit AzureStorageCredentialsService(const std::string& name, const std::shared_ptr<Configure>& /*configuration*/)
-      : ControllerService(name),
-        logger_(logging::LoggerFactory<AzureStorageCredentialsService>::getLogger()) {
+      : ControllerService(name) {
   }
 
   void initialize() override;
@@ -68,7 +66,7 @@ class AzureStorageCredentialsService : public core::controller::ControllerServic
 
  private:
   storage::AzureStorageCredentials credentials_;
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<AzureStorageCredentialsService>::getLogger();
 };
 
 }  // namespace org::apache::nifi::minifi::azure::controllers
diff --git a/extensions/azure/processors/AzureStorageProcessorBase.h b/extensions/azure/processors/AzureStorageProcessorBase.h
index 6017b85..f87e827 100644
--- a/extensions/azure/processors/AzureStorageProcessorBase.h
+++ b/extensions/azure/processors/AzureStorageProcessorBase.h
@@ -37,7 +37,7 @@ class AzureStorageProcessorBase : public core::Processor {
   // Supported Properties
   EXTENSIONAPI static const core::Property AzureStorageCredentialsService;
 
-  AzureStorageProcessorBase(const std::string& name, const minifi::utils::Identifier& uuid, const std::shared_ptr<logging::Logger>& logger)
+  AzureStorageProcessorBase(const std::string& name, const minifi::utils::Identifier& uuid, const std::shared_ptr<core::logging::Logger>& logger)
     : core::Processor(name, uuid),
       logger_(logger) {
   }
@@ -51,7 +51,7 @@ class AzureStorageProcessorBase : public core::Processor {
 
   std::tuple<GetCredentialsFromControllerResult, std::optional<storage::AzureStorageCredentials>> getCredentialsFromControllerService(const std::shared_ptr<core::ProcessContext> &context) const;
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_;
 };
 
 }  // namespace org::apache::nifi::minifi::azure::processors
diff --git a/extensions/azure/processors/PutAzureBlobStorage.h b/extensions/azure/processors/PutAzureBlobStorage.h
index 6de322f..51914e7 100644
--- a/extensions/azure/processors/PutAzureBlobStorage.h
+++ b/extensions/azure/processors/PutAzureBlobStorage.h
@@ -96,7 +96,7 @@ class PutAzureBlobStorage final : public AzureStorageProcessorBase {
   friend class ::PutAzureBlobStorageTestsFixture;
 
   explicit PutAzureBlobStorage(const std::string& name, const minifi::utils::Identifier& uuid, std::unique_ptr<storage::BlobStorageClient> blob_storage_client)
-    : AzureStorageProcessorBase(name, uuid, logging::LoggerFactory<PutAzureBlobStorage>::getLogger())
+    : AzureStorageProcessorBase(name, uuid, core::logging::LoggerFactory<PutAzureBlobStorage>::getLogger())
     , azure_blob_storage_(std::move(blob_storage_client)) {
   }
 
diff --git a/extensions/azure/processors/PutAzureDataLakeStorage.cpp b/extensions/azure/processors/PutAzureDataLakeStorage.cpp
index d48998e..5620737 100644
--- a/extensions/azure/processors/PutAzureDataLakeStorage.cpp
+++ b/extensions/azure/processors/PutAzureDataLakeStorage.cpp
@@ -156,7 +156,7 @@ void PutAzureDataLakeStorage::onTrigger(const std::shared_ptr<core::ProcessConte
 }
 
 PutAzureDataLakeStorage::ReadCallback::ReadCallback(
-      uint64_t flow_size, storage::AzureDataLakeStorage& azure_data_lake_storage, const storage::PutAzureDataLakeStorageParameters& params, std::shared_ptr<logging::Logger> logger)
+      uint64_t flow_size, storage::AzureDataLakeStorage& azure_data_lake_storage, const storage::PutAzureDataLakeStorageParameters& params, std::shared_ptr<core::logging::Logger> logger)
   : flow_size_(flow_size),
     azure_data_lake_storage_(azure_data_lake_storage),
     params_(params),
diff --git a/extensions/azure/processors/PutAzureDataLakeStorage.h b/extensions/azure/processors/PutAzureDataLakeStorage.h
index c924cd6..67ae6c9 100644
--- a/extensions/azure/processors/PutAzureDataLakeStorage.h
+++ b/extensions/azure/processors/PutAzureDataLakeStorage.h
@@ -69,7 +69,7 @@ class PutAzureDataLakeStorage final : public AzureStorageProcessorBase {
 
   class ReadCallback : public InputStreamCallback {
    public:
-    ReadCallback(uint64_t flow_size, storage::AzureDataLakeStorage& azure_data_lake_storage, const storage::PutAzureDataLakeStorageParameters& params, std::shared_ptr<logging::Logger> logger);
+    ReadCallback(uint64_t flow_size, storage::AzureDataLakeStorage& azure_data_lake_storage, const storage::PutAzureDataLakeStorageParameters& params, std::shared_ptr<core::logging::Logger> logger);
     int64_t process(const std::shared_ptr<io::BaseStream>& stream) override;
 
     storage::UploadDataLakeStorageResult getResult() const {
@@ -81,7 +81,7 @@ class PutAzureDataLakeStorage final : public AzureStorageProcessorBase {
     storage::AzureDataLakeStorage& azure_data_lake_storage_;
     const storage::PutAzureDataLakeStorageParameters& params_;
     storage::UploadDataLakeStorageResult result_;
-    std::shared_ptr<logging::Logger> logger_;
+    std::shared_ptr<core::logging::Logger> logger_;
   };
 
   core::annotation::Input getInputRequirement() const override {
@@ -93,7 +93,7 @@ class PutAzureDataLakeStorage final : public AzureStorageProcessorBase {
   }
 
   explicit PutAzureDataLakeStorage(const std::string& name, const minifi::utils::Identifier& uuid, std::unique_ptr<storage::DataLakeStorageClient> data_lake_storage_client)
-    : AzureStorageProcessorBase(name, uuid, logging::LoggerFactory<PutAzureDataLakeStorage>::getLogger()),
+    : AzureStorageProcessorBase(name, uuid, core::logging::LoggerFactory<PutAzureDataLakeStorage>::getLogger()),
       azure_data_lake_storage_(std::move(data_lake_storage_client)) {
   }
 
diff --git a/extensions/azure/storage/AzureBlobStorage.h b/extensions/azure/storage/AzureBlobStorage.h
index 74d7ab5..5b84663 100644
--- a/extensions/azure/storage/AzureBlobStorage.h
+++ b/extensions/azure/storage/AzureBlobStorage.h
@@ -45,7 +45,7 @@ class AzureBlobStorage {
   std::optional<UploadBlobResult> uploadBlob(const PutAzureBlobStorageParameters& params, gsl::span<const uint8_t> buffer);
 
  private:
-  std::shared_ptr<logging::Logger> logger_{logging::LoggerFactory<AzureBlobStorage>::getLogger()};
+  std::shared_ptr<core::logging::Logger> logger_{core::logging::LoggerFactory<AzureBlobStorage>::getLogger()};
   gsl::not_null<std::unique_ptr<BlobStorageClient>> blob_storage_client_;
 };
 
diff --git a/extensions/azure/storage/AzureBlobStorageClient.h b/extensions/azure/storage/AzureBlobStorageClient.h
index 386ac01..30b7912 100644
--- a/extensions/azure/storage/AzureBlobStorageClient.h
+++ b/extensions/azure/storage/AzureBlobStorageClient.h
@@ -44,7 +44,7 @@ class AzureBlobStorageClient : public BlobStorageClient {
   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<core::logging::Logger> logger_{core::logging::LoggerFactory<AzureBlobStorageClient>::getLogger()};
 };
 
 }  // namespace org::apache::nifi::minifi::azure::storage
diff --git a/extensions/azure/storage/AzureDataLakeStorage.h b/extensions/azure/storage/AzureDataLakeStorage.h
index f4b67e7..a1ec8f6 100644
--- a/extensions/azure/storage/AzureDataLakeStorage.h
+++ b/extensions/azure/storage/AzureDataLakeStorage.h
@@ -49,7 +49,7 @@ class AzureDataLakeStorage {
   storage::UploadDataLakeStorageResult uploadFile(const storage::PutAzureDataLakeStorageParameters& params, gsl::span<const uint8_t> buffer);
 
  private:
-  std::shared_ptr<logging::Logger> logger_{logging::LoggerFactory<AzureDataLakeStorage>::getLogger()};
+  std::shared_ptr<core::logging::Logger> logger_{core::logging::LoggerFactory<AzureDataLakeStorage>::getLogger()};
   std::unique_ptr<DataLakeStorageClient> data_lake_storage_client_;
 };
 
diff --git a/extensions/azure/storage/AzureDataLakeStorageClient.h b/extensions/azure/storage/AzureDataLakeStorageClient.h
index 8cb87b9..3f13fe6 100644
--- a/extensions/azure/storage/AzureDataLakeStorageClient.h
+++ b/extensions/azure/storage/AzureDataLakeStorageClient.h
@@ -56,7 +56,7 @@ class AzureDataLakeStorageClient : public DataLakeStorageClient {
   AzureStorageCredentials credentials_;
   std::string file_system_name_;
   std::unique_ptr<Azure::Storage::Files::DataLake::DataLakeFileSystemClient> client_;
-  std::shared_ptr<logging::Logger> logger_{logging::LoggerFactory<AzureDataLakeStorageClient>::getLogger()};
+  std::shared_ptr<core::logging::Logger> logger_{core::logging::LoggerFactory<AzureDataLakeStorageClient>::getLogger()};
 };
 
 }  // namespace org::apache::nifi::minifi::azure::storage
diff --git a/extensions/azure/utils/AzureSdkLogger.h b/extensions/azure/utils/AzureSdkLogger.h
index dcb1e7b..45107e7 100644
--- a/extensions/azure/utils/AzureSdkLogger.h
+++ b/extensions/azure/utils/AzureSdkLogger.h
@@ -34,7 +34,7 @@ class AzureSdkLogger {
   AzureSdkLogger();
   void setLogLevel();
 
-  std::shared_ptr<logging::Logger> logger_{logging::LoggerFactory<AzureSdkLogger>::getLogger()};
+  std::shared_ptr<core::logging::Logger> logger_{core::logging::LoggerFactory<AzureSdkLogger>::getLogger()};
 };
 
 }  // namespace org::apache::nifi::minifi::azure::utils
diff --git a/extensions/bustache/ApplyTemplate.cpp b/extensions/bustache/ApplyTemplate.cpp
index 8b6c2b3..cb6d74c 100644
--- a/extensions/bustache/ApplyTemplate.cpp
+++ b/extensions/bustache/ApplyTemplate.cpp
@@ -67,7 +67,6 @@ void ApplyTemplate::onTrigger(const std::shared_ptr<core::ProcessContext> &conte
 }
 
 ApplyTemplate::WriteCallback::WriteCallback(const std::string &path, const std::shared_ptr<core::FlowFile> &flow_file) {
-  logger_ = logging::LoggerFactory<ApplyTemplate::WriteCallback>::getLogger();
   template_file_ = path;
   flow_file_ = flow_file;
 }
diff --git a/extensions/bustache/ApplyTemplate.h b/extensions/bustache/ApplyTemplate.h
index f55264e..595c2f2 100644
--- a/extensions/bustache/ApplyTemplate.h
+++ b/extensions/bustache/ApplyTemplate.h
@@ -41,8 +41,7 @@ class ApplyTemplate : public core::Processor {
    * Create a new processor
    */
   explicit ApplyTemplate(const std::string& name, const utils::Identifier& uuid = {})
-      : Processor(name, uuid),
-        logger_(logging::LoggerFactory<ApplyTemplate>::getLogger()) {}
+      : Processor(name, uuid) {}
   ~ApplyTemplate() = default;
   static constexpr char const *ProcessorName = "ApplyTemplate";
 
@@ -63,13 +62,13 @@ class ApplyTemplate : public core::Processor {
     int64_t process(const std::shared_ptr<io::BaseStream>& stream);
 
    private:
-    std::shared_ptr<logging::Logger> logger_;
+    std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<ApplyTemplate::WriteCallback>::getLogger();
     std::string template_file_;
     std::shared_ptr<core::FlowFile> flow_file_;
   };
 
  private:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<ApplyTemplate>::getLogger();
 };
 
 } /* namespace processors */
diff --git a/extensions/civetweb/processors/ListenHTTP.cpp b/extensions/civetweb/processors/ListenHTTP.cpp
index b5b6eeb..430c0b1 100644
--- a/extensions/civetweb/processors/ListenHTTP.cpp
+++ b/extensions/civetweb/processors/ListenHTTP.cpp
@@ -296,8 +296,7 @@ ListenHTTP::Handler::Handler(std::string base_uri, core::ProcessContext *context
     : base_uri_(std::move(base_uri)),
       auth_dn_regex_(std::move(auth_dn_regex)),
       headers_as_attrs_regex_(std::move(header_as_attrs_regex)),
-      process_context_(context),
-      logger_(logging::LoggerFactory<ListenHTTP::Handler>::getLogger()) {
+      process_context_(context) {
   context->getProperty(BufferSize.getName(), buffer_size_);
   logger_->log_debug("ListenHTTP using %s: %zu", BufferSize.getName(), buffer_size_);
 }
diff --git a/extensions/civetweb/processors/ListenHTTP.h b/extensions/civetweb/processors/ListenHTTP.h
index 8dda26b..e85a77a 100644
--- a/extensions/civetweb/processors/ListenHTTP.h
+++ b/extensions/civetweb/processors/ListenHTTP.h
@@ -53,7 +53,6 @@ class ListenHTTP : public core::Processor {
    */
   explicit ListenHTTP(const std::string& name, const utils::Identifier& uuid = {})
       : Processor(name, uuid),
-        logger_(logging::LoggerFactory<ListenHTTP>::getLogger()),
         batch_size_(0) {
     callbacks_.log_message = &logMessage;
     callbacks_.log_access = &logAccess;
@@ -120,7 +119,7 @@ class ListenHTTP : public core::Processor {
     std::regex auth_dn_regex_;
     std::regex headers_as_attrs_regex_;
     core::ProcessContext *process_context_;
-    std::shared_ptr<logging::Logger> logger_;
+    std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<ListenHTTP>::getLogger();
     std::map<std::string, ResponseBody> response_uri_map_;
     std::mutex uri_map_mutex_;
     uint64_t buffer_size_;
@@ -164,11 +163,11 @@ class ListenHTTP : public core::Processor {
       if (server == nullptr) {
         return 0;
       }
-      auto* const logger = static_cast<std::shared_ptr<logging::Logger>*>(const_cast<void*>(server->getUserContext()));
+      auto* const logger = static_cast<std::shared_ptr<core::logging::Logger>*>(const_cast<void*>(server->getUserContext()));
       if (logger == nullptr) {
         return 0;
       }
-      logging::LOG_ERROR((*logger)) << "CivetWeb error: " << message;
+      core::logging::LOG_ERROR((*logger)) << "CivetWeb error: " << message;
     } catch (...) {
     }
     return 0;
@@ -178,15 +177,15 @@ class ListenHTTP : public core::Processor {
     try {
       struct mg_context* ctx = mg_get_context(conn);
       /* CivetServer stores 'this' as the userdata when calling mg_start */
-      CivetServer* server = static_cast<CivetServer*>(mg_get_user_data(ctx));
+      auto* server = static_cast<CivetServer*>(mg_get_user_data(ctx));
       if (server == nullptr) {
         return 0;
       }
-      std::shared_ptr<logging::Logger>* logger = static_cast<std::shared_ptr<logging::Logger>*>(const_cast<void*>(server->getUserContext()));
+      auto* logger = static_cast<std::shared_ptr<core::logging::Logger>*>(const_cast<void*>(server->getUserContext()));
       if (logger == nullptr) {
         return 0;
       }
-      logging::LOG_DEBUG((*logger)) << "CivetWeb access: " << message;
+      core::logging::LOG_DEBUG((*logger)) << "CivetWeb access: " << message;
     } catch (...) {
     }
     return 0;
@@ -205,7 +204,7 @@ class ListenHTTP : public core::Processor {
   void processIncomingFlowFile(core::ProcessSession *session);
   void processRequestBuffer(core::ProcessSession *session);
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<ListenHTTP>::getLogger();
   CivetCallbacks callbacks_;
   std::unique_ptr<CivetServer> server_;
   std::unique_ptr<Handler> handler_;
diff --git a/extensions/civetweb/protocols/RESTReceiver.cpp b/extensions/civetweb/protocols/RESTReceiver.cpp
index e693a32..305ea36 100644
--- a/extensions/civetweb/protocols/RESTReceiver.cpp
+++ b/extensions/civetweb/protocols/RESTReceiver.cpp
@@ -43,8 +43,7 @@ int ssl_protocol_en(void* /*ssl_context*/, void* /*user_data*/) {
 }
 
 RESTReceiver::RESTReceiver(const std::string& name, const utils::Identifier& uuid)
-    : HeartbeatReporter(name, uuid),
-      logger_(logging::LoggerFactory<RESTReceiver>::getLogger()) {
+    : HeartbeatReporter(name, uuid) {
 }
 
 void RESTReceiver::initialize(core::controller::ControllerServiceProvider* controller, const std::shared_ptr<state::StateMonitor> &updateSink, const std::shared_ptr<Configure> &configure) {
diff --git a/extensions/civetweb/protocols/RESTReceiver.h b/extensions/civetweb/protocols/RESTReceiver.h
index 159af7a..903c3bb 100644
--- a/extensions/civetweb/protocols/RESTReceiver.h
+++ b/extensions/civetweb/protocols/RESTReceiver.h
@@ -88,7 +88,7 @@ class RESTReceiver : public RESTProtocol, public HeartbeatReporter {
   std::unique_ptr<ListeningProtocol> handler;
 
  private:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<RESTReceiver>::getLogger();
 };
 
 } /* namespace c2 */
diff --git a/extensions/civetweb/tests/ListenHTTPTests.cpp b/extensions/civetweb/tests/ListenHTTPTests.cpp
index 5f95b2d..63ae15c 100644
--- a/extensions/civetweb/tests/ListenHTTPTests.cpp
+++ b/extensions/civetweb/tests/ListenHTTPTests.cpp
@@ -32,6 +32,9 @@
 #include "client/HTTPClient.h"
 #include "controllers/SSLContextService.h"
 #include "properties/Configure.h"
+#include "FlowController.h"
+#include "SchedulingAgent.h"
+#include "core/ProcessGroup.h"
 
 class ListenHTTPTestsFixture {
  public:
@@ -50,9 +53,9 @@ class ListenHTTPTestsFixture {
     LogTestController::getInstance().setDebug<minifi::core::ProcessGroup>();
     LogTestController::getInstance().setDebug<minifi::core::Processor>();
     LogTestController::getInstance().setTrace<minifi::core::ProcessSession>();
-    LogTestController::getInstance().setTrace<processors::ListenHTTP>();
-    LogTestController::getInstance().setTrace<processors::ListenHTTP::Handler>();
-    LogTestController::getInstance().setDebug<processors::LogAttribute>();
+    LogTestController::getInstance().setTrace<minifi::processors::ListenHTTP>();
+    LogTestController::getInstance().setTrace<minifi::processors::ListenHTTP::Handler>();
+    LogTestController::getInstance().setDebug<minifi::processors::LogAttribute>();
     LogTestController::getInstance().setDebug<utils::HTTPClient>();
     LogTestController::getInstance().setDebug<minifi::controllers::SSLContextService>();
 
diff --git a/extensions/coap/COAPLoader.cpp b/extensions/coap/COAPLoader.cpp
index ae26bf5..306f19f 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) {
-    logging::LoggerFactory<COAPObjectFactoryInitializer>::getLogger()->log_error("WSAStartup failed with error %d", iWinSockInitResult);
+    core::logging::LoggerFactory<COAPObjectFactoryInitializer>::getLogger()->log_error("WSAStartup failed with error %d", iWinSockInitResult);
     return false;
   } else {
     return true;
diff --git a/extensions/coap/controllerservice/CoapConnector.h b/extensions/coap/controllerservice/CoapConnector.h
index f8fa7dd..ac023ea 100644
--- a/extensions/coap/controllerservice/CoapConnector.h
+++ b/extensions/coap/controllerservice/CoapConnector.h
@@ -105,7 +105,7 @@ class CoapConnectorService : public core::controller::ControllerService {
   // port connecting to
   unsigned int port_{ 0 };
 
-  std::shared_ptr<logging::Logger> logger_{ logging::LoggerFactory<CoapConnectorService>::getLogger() };
+  std::shared_ptr<core::logging::Logger> logger_{ core::logging::LoggerFactory<CoapConnectorService>::getLogger() };
 };
 
 } /* namespace controllers */
diff --git a/extensions/coap/protocols/CoapC2Protocol.cpp b/extensions/coap/protocols/CoapC2Protocol.cpp
index fb94510..2d1f95d 100644
--- a/extensions/coap/protocols/CoapC2Protocol.cpp
+++ b/extensions/coap/protocols/CoapC2Protocol.cpp
@@ -34,8 +34,7 @@ uint8_t CoapProtocol::REGISTRATION_MSG[8] = { 0x72, 0x65, 0x67, 0x69, 0x73, 0x74
 
 CoapProtocol::CoapProtocol(const std::string &name, const utils::Identifier &uuid)
     : RESTSender(name, uuid),
-      require_registration_(false),
-      logger_(logging::LoggerFactory<CoapProtocol>::getLogger()) {
+      require_registration_(false) {
 }
 
 CoapProtocol::~CoapProtocol() = default;
diff --git a/extensions/coap/protocols/CoapC2Protocol.h b/extensions/coap/protocols/CoapC2Protocol.h
index e23280e..3c7d2ba 100644
--- a/extensions/coap/protocols/CoapC2Protocol.h
+++ b/extensions/coap/protocols/CoapC2Protocol.h
@@ -129,7 +129,7 @@ class CoapProtocol : public minifi::c2::RESTSender {
  private:
   static uint8_t REGISTRATION_MSG[8];
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<CoapProtocol>::getLogger();
 };
 
 } /* namespace c2 */
diff --git a/extensions/coap/tests/CoapC2VerifyHeartbeat.cpp b/extensions/coap/tests/CoapC2VerifyHeartbeat.cpp
index 181a57b..5e80802 100644
--- a/extensions/coap/tests/CoapC2VerifyHeartbeat.cpp
+++ b/extensions/coap/tests/CoapC2VerifyHeartbeat.cpp
@@ -64,11 +64,11 @@ class VerifyCoAPServer : public CoapIntegrationBase {
 
   void testSetup() override {
     LogTestController::getInstance().setDebug<utils::HTTPClient>();
-    LogTestController::getInstance().setOff<processors::InvokeHTTP>();
+    LogTestController::getInstance().setOff<minifi::processors::InvokeHTTP>();
     LogTestController::getInstance().setDebug<minifi::c2::RESTReceiver>();
     LogTestController::getInstance().setDebug<minifi::c2::C2Agent>();
     LogTestController::getInstance().setTrace<minifi::coap::c2::CoapProtocol>();
-    LogTestController::getInstance().setOff<processors::LogAttribute>();
+    LogTestController::getInstance().setOff<minifi::processors::LogAttribute>();
     LogTestController::getInstance().setOff<minifi::core::ProcessSession>();
     std::fstream file;
     ss << dir << "/" << "tstFile.ext";
diff --git a/extensions/expression-language/tests/ExpressionLanguageTests.cpp b/extensions/expression-language/tests/ExpressionLanguageTests.cpp
index 28bdc0b..23f55f4 100644
--- a/extensions/expression-language/tests/ExpressionLanguageTests.cpp
+++ b/extensions/expression-language/tests/ExpressionLanguageTests.cpp
@@ -38,6 +38,7 @@
 #include <LogAttribute.h>
 #include "utils/gsl.h"
 #include "TestBase.h"
+#include "unit/ProvenanceTestHelper.h"
 
 namespace expression = org::apache::nifi::minifi::expression;
 
@@ -179,12 +180,12 @@ TEST_CASE("GetFile PutFile dynamic attribute", "[expressionLanguageTestGetFilePu
   TestController testController;
 
   LogTestController::getInstance().setTrace<TestPlan>();
-  LogTestController::getInstance().setTrace<processors::PutFile>();
-  LogTestController::getInstance().setTrace<processors::ExtractText>();
-  LogTestController::getInstance().setTrace<processors::GetFile>();
-  LogTestController::getInstance().setTrace<processors::PutFile>();
-  LogTestController::getInstance().setTrace<processors::LogAttribute>();
-  LogTestController::getInstance().setTrace<processors::UpdateAttribute>();
+  LogTestController::getInstance().setTrace<minifi::processors::PutFile>();
+  LogTestController::getInstance().setTrace<minifi::processors::ExtractText>();
+  LogTestController::getInstance().setTrace<minifi::processors::GetFile>();
+  LogTestController::getInstance().setTrace<minifi::processors::PutFile>();
+  LogTestController::getInstance().setTrace<minifi::processors::LogAttribute>();
+  LogTestController::getInstance().setTrace<minifi::processors::UpdateAttribute>();
 
   auto conf = std::make_shared<minifi::Configure>();
 
@@ -206,18 +207,18 @@ TEST_CASE("GetFile PutFile dynamic attribute", "[expressionLanguageTestGetFilePu
 
   // Build MiNiFi processing graph
   auto get_file = plan->addProcessor("GetFile", "GetFile");
-  plan->setProperty(get_file, processors::GetFile::Directory.getName(), in_dir);
-  plan->setProperty(get_file, processors::GetFile::KeepSourceFile.getName(), "false");
+  plan->setProperty(get_file, minifi::processors::GetFile::Directory.getName(), in_dir);
+  plan->setProperty(get_file, minifi::processors::GetFile::KeepSourceFile.getName(), "false");
   auto update = plan->addProcessor("UpdateAttribute", "UpdateAttribute", core::Relationship("success", "description"), true);
   update->setDynamicProperty("prop_attr", "${'nifi.my.own.property'}_added");
   plan->addProcessor("LogAttribute", "LogAttribute", core::Relationship("success", "description"), true);
   auto extract_text = plan->addProcessor("ExtractText", "ExtractText", core::Relationship("success", "description"), true);
-  plan->setProperty(extract_text, processors::ExtractText::Attribute.getName(), "extracted_attr_name");
+  plan->setProperty(extract_text, minifi::processors::ExtractText::Attribute.getName(), "extracted_attr_name");
   plan->addProcessor("LogAttribute", "LogAttribute", core::Relationship("success", "description"), true);
   auto put_file = plan->addProcessor("PutFile", "PutFile", core::Relationship("success", "description"), true);
-  plan->setProperty(put_file, processors::PutFile::Directory.getName(), out_dir + "/${extracted_attr_name}");
-  plan->setProperty(put_file, processors::PutFile::ConflictResolution.getName(), processors::PutFile::CONFLICT_RESOLUTION_STRATEGY_REPLACE);
-  plan->setProperty(put_file, processors::PutFile::CreateDirs.getName(), "true");
+  plan->setProperty(put_file, minifi::processors::PutFile::Directory.getName(), out_dir + "/${extracted_attr_name}");
+  plan->setProperty(put_file, minifi::processors::PutFile::ConflictResolution.getName(), minifi::processors::PutFile::CONFLICT_RESOLUTION_STRATEGY_REPLACE);
+  plan->setProperty(put_file, minifi::processors::PutFile::CreateDirs.getName(), "true");
 
   // Write test input
   {
diff --git a/extensions/expression-language/tests/integration/UpdateAttributeIntegrationTest.cpp b/extensions/expression-language/tests/integration/UpdateAttributeIntegrationTest.cpp
index 5237394..9a51cc6 100644
--- a/extensions/expression-language/tests/integration/UpdateAttributeIntegrationTest.cpp
+++ b/extensions/expression-language/tests/integration/UpdateAttributeIntegrationTest.cpp
@@ -34,7 +34,7 @@ class TestHarness : public IntegrationBase {
     LogTestController::getInstance().setTrace<minifi::FlowController>();
     LogTestController::getInstance().setTrace<core::ProcessSession>();
     LogTestController::getInstance().setTrace<core::ProcessContextExpr>();
-    LogTestController::getInstance().setInfo<processors::LogAttribute>();
+    LogTestController::getInstance().setInfo<minifi::processors::LogAttribute>();
   }
 
   void runAssertions() override {
diff --git a/extensions/gps/GetGPS.h b/extensions/gps/GetGPS.h
index 815fd2b..73f61d7 100644
--- a/extensions/gps/GetGPS.h
+++ b/extensions/gps/GetGPS.h
@@ -34,12 +34,12 @@ namespace processors {
 class GetGPS : public core::Processor {
  public:
   explicit GetGPS(const std::string& name, const utils::Identifier& uuid = {})
-      : core::Processor(name, uuid), logger_(logging::LoggerFactory<GetGPS>::getLogger()) {
+      : core::Processor(name, uuid) {
     gpsdHost_ = "localhost";
     gpsdPort_ = "2947";
     gpsdWaitTime_ = 50000000;
   }
-  virtual ~GetGPS() = default;
+  ~GetGPS() override = default;
   static const std::string ProcessorName;
   // Supported Properties
   static core::Property GPSDHost;
@@ -60,14 +60,14 @@ class GetGPS : public core::Processor {
   //! OnTrigger method, implemented by NiFi GetGPS
   void onTrigger(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::ProcessSession> &session) override;
   //! Initialize, over write by NiFi GetGPS
-  void initialize(void) override;
+  void initialize() override;
 
  private:
   std::string gpsdHost_;
   std::string gpsdPort_;
   int64_t gpsdWaitTime_;
   // Logger
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<GetGPS>::getLogger();
 };
 
 } /* namespace processors */
diff --git a/extensions/http-curl/HTTPCurlLoader.cpp b/extensions/http-curl/HTTPCurlLoader.cpp
index 449fa16..c404342 100644
--- a/extensions/http-curl/HTTPCurlLoader.cpp
+++ b/extensions/http-curl/HTTPCurlLoader.cpp
@@ -28,7 +28,7 @@
 
 #include "client/HTTPClient.h"
 
-static bool init(const core::extension::ExtensionConfig& /*config*/) {
+static bool init(const org::apache::nifi::minifi::core::extension::ExtensionConfig& /*config*/) {
   return curl_global_init(CURL_GLOBAL_DEFAULT) == CURLE_OK;
 }
 
diff --git a/extensions/http-curl/client/HTTPCallback.h b/extensions/http-curl/client/HTTPCallback.h
index 60ed3b3..f4eb770 100644
--- a/extensions/http-curl/client/HTTPCallback.h
+++ b/extensions/http-curl/client/HTTPCallback.h
@@ -56,15 +56,14 @@ namespace utils {
 class HttpStreamingCallback : public ByteInputCallBack {
  public:
   HttpStreamingCallback()
-      : logger_(logging::LoggerFactory<HttpStreamingCallback>::getLogger()),
-        is_alive_(true),
+      : is_alive_(true),
         total_bytes_loaded_(0U),
         current_buffer_start_(0U),
         current_pos_(0U),
         ptr_(nullptr) {
   }
 
-  virtual ~HttpStreamingCallback() = default;
+  ~HttpStreamingCallback() override = default;
 
   void close() {
     logger_->log_trace("close() called");
@@ -209,7 +208,7 @@ class HttpStreamingCallback : public ByteInputCallBack {
     }
   }
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<HttpStreamingCallback>::getLogger();
 
   std::mutex mutex_;
   std::condition_variable cv;
diff --git a/extensions/http-curl/client/HTTPClient.cpp b/extensions/http-curl/client/HTTPClient.cpp
index 9d4e26c..1e9c6db 100644
--- a/extensions/http-curl/client/HTTPClient.cpp
+++ b/extensions/http-curl/client/HTTPClient.cpp
@@ -80,12 +80,12 @@ void HTTPClient::forceClose() {
 }
 
 int HTTPClient::debug_callback(CURL *handle, curl_infotype type, char *data, size_t size, void *userptr) {
-  std::shared_ptr<logging::Logger>* logger = static_cast<std::shared_ptr<logging::Logger>*>(userptr);
+  auto* const logger = static_cast<std::shared_ptr<core::logging::Logger>*>(userptr);
   if (logger == nullptr) {
     return 0;
   }
   if (type == CURLINFO_TEXT) {
-    logging::LOG_DEBUG((*logger)) << "CURL(" << reinterpret_cast<void*>(handle) << "): " << std::string(data, size);
+    core::logging::LOG_DEBUG((*logger)) << "CURL(" << reinterpret_cast<void*>(handle) << "): " << std::string(data, size);
   }
   return 0;
 }
diff --git a/extensions/http-curl/client/HTTPClient.h b/extensions/http-curl/client/HTTPClient.h
index 15c89bf..d7d3a40 100644
--- a/extensions/http-curl/client/HTTPClient.h
+++ b/extensions/http-curl/client/HTTPClient.h
@@ -293,7 +293,7 @@ class HTTPClient : public BaseHTTPClient, public core::Connectable {
 
   std::chrono::milliseconds keep_alive_idle_{-1};
 
-  std::shared_ptr<logging::Logger> logger_{logging::LoggerFactory<HTTPClient>::getLogger()};
+  std::shared_ptr<core::logging::Logger> logger_{core::logging::LoggerFactory<HTTPClient>::getLogger()};
 };
 
 }  // namespace utils
diff --git a/extensions/http-curl/client/HTTPStream.cpp b/extensions/http-curl/client/HTTPStream.cpp
index 178c117..690fccf 100644
--- a/extensions/http-curl/client/HTTPStream.cpp
+++ b/extensions/http-curl/client/HTTPStream.cpp
@@ -38,8 +38,7 @@ HttpStream::HttpStream(std::shared_ptr<utils::HTTPClient> client)
       // given the nature of the stream we don't want to slow libCURL, we will produce
       // a warning instead allowing us to adjust it server side or through the local configuration.
       http_read_callback_(66560, true),
-      started_(false),
-      logger_(logging::LoggerFactory<HttpStream>::getLogger()) {
+      started_(false) {
   // submit early on
 }
 
diff --git a/extensions/http-curl/client/HTTPStream.h b/extensions/http-curl/client/HTTPStream.h
index 947b319..bdd8cca 100644
--- a/extensions/http-curl/client/HTTPStream.h
+++ b/extensions/http-curl/client/HTTPStream.h
@@ -154,7 +154,7 @@ class HttpStream : public io::BaseStream {
   std::atomic<bool> started_;
 
  private:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<HttpStream>::getLogger();
 };
 } /* namespace io */
 } /* namespace minifi */
diff --git a/extensions/http-curl/processors/InvokeHTTP.h b/extensions/http-curl/processors/InvokeHTTP.h
index 789f5c0..08c89c6 100644
--- a/extensions/http-curl/processors/InvokeHTTP.h
+++ b/extensions/http-curl/processors/InvokeHTTP.h
@@ -159,7 +159,7 @@ class InvokeHTTP : public core::Processor {
   bool send_body_{true};
 
  private:
-  std::shared_ptr<logging::Logger> logger_{logging::LoggerFactory<InvokeHTTP>::getLogger()};
+  std::shared_ptr<core::logging::Logger> logger_{core::logging::LoggerFactory<InvokeHTTP>::getLogger()};
 };
 
 } /* namespace processors */
diff --git a/extensions/http-curl/protocols/AgentPrinter.cpp b/extensions/http-curl/protocols/AgentPrinter.cpp
index 1183f11..c0ecaf5 100644
--- a/extensions/http-curl/protocols/AgentPrinter.cpp
+++ b/extensions/http-curl/protocols/AgentPrinter.cpp
@@ -32,8 +32,7 @@ namespace minifi {
 namespace c2 {
 
 AgentPrinter::AgentPrinter(const std::string& name, const utils::Identifier& uuid)
-    : HeartbeatReporter(name, uuid),
-      logger_(logging::LoggerFactory<AgentPrinter>::getLogger()) {
+    : HeartbeatReporter(name, uuid) {
 }
 
 void AgentPrinter::initialize(core::controller::ControllerServiceProvider* controller, const std::shared_ptr<state::StateMonitor> &updateSink,
diff --git a/extensions/http-curl/protocols/AgentPrinter.h b/extensions/http-curl/protocols/AgentPrinter.h
index 2054a0a..67d57ca 100644
--- a/extensions/http-curl/protocols/AgentPrinter.h
+++ b/extensions/http-curl/protocols/AgentPrinter.h
@@ -55,7 +55,7 @@ class AgentPrinter : public HeartbeatJsonSerializer, public HeartbeatReporter {
   rapidjson::Value serializeJsonPayload(const C2Payload &payload, rapidjson::Document::AllocatorType &alloc) override;
 
  private:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<AgentPrinter>::getLogger();
 };
 
 } /* namespace c2 */
diff --git a/extensions/http-curl/protocols/RESTSender.cpp b/extensions/http-curl/protocols/RESTSender.cpp
index d4a487c..7b408e4 100644
--- a/extensions/http-curl/protocols/RESTSender.cpp
+++ b/extensions/http-curl/protocols/RESTSender.cpp
@@ -33,8 +33,7 @@ namespace minifi {
 namespace c2 {
 
 RESTSender::RESTSender(const std::string &name, const utils::Identifier &uuid)
-    : C2Protocol(name, uuid),
-      logger_(logging::LoggerFactory<RESTSender>::getLogger()) {
+    : C2Protocol(name, uuid) {
 }
 
 void RESTSender::initialize(core::controller::ControllerServiceProvider* controller, const std::shared_ptr<Configure> &configure) {
diff --git a/extensions/http-curl/protocols/RESTSender.h b/extensions/http-curl/protocols/RESTSender.h
index 9189ebe..2df138f 100644
--- a/extensions/http-curl/protocols/RESTSender.h
+++ b/extensions/http-curl/protocols/RESTSender.h
@@ -68,7 +68,7 @@ class RESTSender : public RESTProtocol, public C2Protocol {
   std::string ack_uri_;
 
  private:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<RESTSender>::getLogger();
 };
 
 }  // namespace c2
diff --git a/extensions/http-curl/sitetosite/HTTPProtocol.cpp b/extensions/http-curl/sitetosite/HTTPProtocol.cpp
index d6902e5..e1683f4 100644
--- a/extensions/http-curl/sitetosite/HTTPProtocol.cpp
+++ b/extensions/http-curl/sitetosite/HTTPProtocol.cpp
@@ -288,7 +288,7 @@ void HttpSiteToSiteClient::closeTransaction(const utils::Identifier &transaction
   if (client->getResponseCode() == 400) {
     std::string error(client->getResponseBody().data(), client->getResponseBody().size());
 
-    logging::LOG_WARN(logger_) << "400 received: " << error;
+    core::logging::LOG_WARN(logger_) << "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 1cabd54..118b979 100644
--- a/extensions/http-curl/sitetosite/HTTPProtocol.h
+++ b/extensions/http-curl/sitetosite/HTTPProtocol.h
@@ -57,8 +57,7 @@ class HttpSiteToSiteClient : public sitetosite::SiteToSiteClient {
    */
   explicit HttpSiteToSiteClient(const std::string& /*name*/, const utils::Identifier& /*uuid*/ = {})
       : SiteToSiteClient(),
-        current_code(UNRECOGNIZED_RESPONSE_CODE),
-        logger_(logging::LoggerFactory<HttpSiteToSiteClient>::getLogger()) {
+        current_code(UNRECOGNIZED_RESPONSE_CODE) {
     peer_state_ = READY;
   }
 
@@ -67,13 +66,12 @@ class HttpSiteToSiteClient : public sitetosite::SiteToSiteClient {
    */
   explicit HttpSiteToSiteClient(std::unique_ptr<SiteToSitePeer> peer)
       : SiteToSiteClient(),
-        current_code(UNRECOGNIZED_RESPONSE_CODE),
-        logger_(logging::LoggerFactory<HttpSiteToSiteClient>::getLogger()) {
+        current_code(UNRECOGNIZED_RESPONSE_CODE) {
     peer_ = std::move(peer);
     peer_state_ = READY;
   }
   // Destructor
-  virtual ~HttpSiteToSiteClient() = default;
+  ~HttpSiteToSiteClient() override = default;
 
   void setPeer(std::unique_ptr<SiteToSitePeer> peer) override {
     peer_ = std::move(peer);
@@ -134,7 +132,7 @@ class HttpSiteToSiteClient : public sitetosite::SiteToSiteClient {
    */
   std::shared_ptr<minifi::utils::HTTPClient> openConnectionForReceive(const std::shared_ptr<HttpTransaction> &transaction);
 
-  const std::string getBaseURI() {
+  std::string getBaseURI() {
     std::string uri = ssl_context_service_ != nullptr ? "https://" : "http://";
     uri.append(peer_->getHostName());
     uri.append(":");
@@ -148,7 +146,7 @@ class HttpSiteToSiteClient : public sitetosite::SiteToSiteClient {
   std::optional<utils::Identifier> parseTransactionId(const std::string &uri);
 
   std::unique_ptr<utils::HTTPClient> create_http_client(const std::string &uri, const std::string &method = "POST", bool setPropertyHeaders = false) {
-    std::unique_ptr<utils::HTTPClient> http_client_ = std::unique_ptr<utils::HTTPClient>(new minifi::utils::HTTPClient(uri, ssl_context_service_));
+    std::unique_ptr<utils::HTTPClient> http_client_ = std::make_unique<utils::HTTPClient>(uri, ssl_context_service_);
     http_client_->initialize(method, uri, ssl_context_service_);
     if (setPropertyHeaders) {
       if (_currentVersion >= 5) {
@@ -169,7 +167,7 @@ class HttpSiteToSiteClient : public sitetosite::SiteToSiteClient {
 
  private:
   RespondCode current_code;
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<HttpSiteToSiteClient>::getLogger();
   // Prevent default copy constructor and assignment operation
   // Only support pass by reference or pointer
   HttpSiteToSiteClient(const HttpSiteToSiteClient &parent);
diff --git a/extensions/http-curl/sitetosite/PeersEntity.h b/extensions/http-curl/sitetosite/PeersEntity.h
index 4f55dc9..34135da 100644
--- a/extensions/http-curl/sitetosite/PeersEntity.h
+++ b/extensions/http-curl/sitetosite/PeersEntity.h
@@ -40,7 +40,7 @@ namespace sitetosite {
  */
 class PeersEntity {
  public:
-  static bool parse(const std::shared_ptr<logging::Logger> &logger, const std::string &entity, const utils::Identifier &id, std::vector<PeerStatus> &peer_statuses) {
+  static bool parse(const std::shared_ptr<core::logging::Logger> &logger, const std::string &entity, const utils::Identifier &id, std::vector<PeerStatus> &peer_statuses) {
     try {
       rapidjson::Document root;
       rapidjson::ParseResult ok = root.Parse(entity.c_str());
diff --git a/extensions/http-curl/tests/C2NullConfiguration.cpp b/extensions/http-curl/tests/C2NullConfiguration.cpp
index 0a47efa..2972cc0 100644
--- a/extensions/http-curl/tests/C2NullConfiguration.cpp
+++ b/extensions/http-curl/tests/C2NullConfiguration.cpp
@@ -41,10 +41,10 @@ class VerifyC2Server : public HTTPIntegrationBase {
 
   void testSetup() override {
     LogTestController::getInstance().setDebug<utils::HTTPClient>();
-    LogTestController::getInstance().setDebug<processors::InvokeHTTP>();
+    LogTestController::getInstance().setDebug<minifi::processors::InvokeHTTP>();
     LogTestController::getInstance().setDebug<minifi::c2::RESTReceiver>();
     LogTestController::getInstance().setDebug<minifi::c2::C2Agent>();
-    LogTestController::getInstance().setDebug<processors::LogAttribute>();
+    LogTestController::getInstance().setDebug<minifi::processors::LogAttribute>();
     LogTestController::getInstance().setDebug<minifi::core::ProcessSession>();
     std::fstream file;
     ss << dir << "/" << "tstFile.ext";
diff --git a/extensions/http-curl/tests/C2VerifyServeResults.cpp b/extensions/http-curl/tests/C2VerifyServeResults.cpp
index 250dbdf..32e8094 100644
--- a/extensions/http-curl/tests/C2VerifyServeResults.cpp
+++ b/extensions/http-curl/tests/C2VerifyServeResults.cpp
@@ -36,7 +36,7 @@ class VerifyC2Server : public HTTPIntegrationBase {
   }
 
   void testSetup() override {
-    LogTestController::getInstance().setDebug<processors::InvokeHTTP>();
+    LogTestController::getInstance().setDebug<minifi::processors::InvokeHTTP>();
     LogTestController::getInstance().setDebug<minifi::core::ProcessSession>();
     std::fstream file;
     ss << dir << "/" << "tstFile.ext";
diff --git a/extensions/http-curl/tests/HTTPHandlers.h b/extensions/http-curl/tests/HTTPHandlers.h
index de3f362..55d1651 100644
--- a/extensions/http-curl/tests/HTTPHandlers.h
+++ b/extensions/http-curl/tests/HTTPHandlers.h
@@ -36,6 +36,7 @@
 #include "HTTPUtils.h"
 #include "ServerAwareHandler.h"
 #include "utils/gsl.h"
+#include "agent/build_description.h"
 
 static std::atomic<int> transaction_id;
 static std::atomic<int> transaction_id_output;
diff --git a/extensions/http-curl/tests/HttpPostIntegrationTest.cpp b/extensions/http-curl/tests/HttpPostIntegrationTest.cpp
index a296bea..7d9d3dc 100644
--- a/extensions/http-curl/tests/HttpPostIntegrationTest.cpp
+++ b/extensions/http-curl/tests/HttpPostIntegrationTest.cpp
@@ -42,12 +42,12 @@ class HttpTestHarness : public HTTPIntegrationBase {
     LogTestController::getInstance().setDebug<core::ProcessGroup>();
     LogTestController::getInstance().setDebug<minifi::SchedulingAgent>();
     LogTestController::getInstance().setDebug<core::ProcessContext>();
-    LogTestController::getInstance().setTrace<processors::InvokeHTTP>();
+    LogTestController::getInstance().setTrace<minifi::processors::InvokeHTTP>();
     LogTestController::getInstance().setDebug<utils::HTTPClient>();
-    LogTestController::getInstance().setDebug<processors::ListenHTTP>();
-    LogTestController::getInstance().setDebug<processors::ListenHTTP::WriteCallback>();
-    LogTestController::getInstance().setDebug<processors::ListenHTTP::Handler>();
-    LogTestController::getInstance().setDebug<processors::LogAttribute>();
+    LogTestController::getInstance().setDebug<minifi::processors::ListenHTTP>();
+    LogTestController::getInstance().setDebug<minifi::processors::ListenHTTP::WriteCallback>();
+    LogTestController::getInstance().setDebug<minifi::processors::ListenHTTP::Handler>();
+    LogTestController::getInstance().setDebug<minifi::processors::LogAttribute>();
     LogTestController::getInstance().setDebug<core::Processor>();
     LogTestController::getInstance().setDebug<minifi::ThreadedSchedulingAgent>();
     LogTestController::getInstance().setDebug<minifi::TimerDrivenSchedulingAgent>();
diff --git a/extensions/http-curl/tests/unit/InvokeHTTPTests.cpp b/extensions/http-curl/tests/unit/InvokeHTTPTests.cpp
index 41e9ce6..00f76f5 100644
--- a/extensions/http-curl/tests/unit/InvokeHTTPTests.cpp
+++ b/extensions/http-curl/tests/unit/InvokeHTTPTests.cpp
@@ -258,7 +258,7 @@ TEST_CASE("HTTPTestsPostNoResourceClaim", "[httptest1]") {
 }
 
 TEST_CASE("HTTPTestsPenalizeNoRetry", "[httptest1]") {
-  using processors::InvokeHTTP;
+  using minifi::processors::InvokeHTTP;
 
   TestController testController;
   TestHTTPServer http_server;
@@ -289,7 +289,7 @@ TEST_CASE("HTTPTestsPenalizeNoRetry", "[httptest1]") {
 }
 
 TEST_CASE("HTTPTestsPutResponseBodyinAttribute", "[httptest1]") {
-  using processors::InvokeHTTP;
+  using minifi::processors::InvokeHTTP;
 
   TestController testController;
   TestHTTPServer http_server;
diff --git a/extensions/jni/ExecuteJavaControllerService.h b/extensions/jni/ExecuteJavaControllerService.h
index 1178af2..89ca9b2 100644
--- a/extensions/jni/ExecuteJavaControllerService.h
+++ b/extensions/jni/ExecuteJavaControllerService.h
@@ -59,10 +59,7 @@ class ExecuteJavaControllerService : public ConfigurationContext, public std::en
    * Create a new processor
    */
   explicit ExecuteJavaControllerService(const std::string& name, const utils::Identifier& uuid = {})
-      : ConfigurationContext(name, uuid),
-        contextInstance(nullptr),
-        clazzInstance(nullptr),
-        logger_(logging::LoggerFactory<ExecuteJavaControllerService>::getLogger()) {
+      : ConfigurationContext(name, uuid) {
   }
   // Destructor
   virtual ~ExecuteJavaControllerService();
@@ -137,17 +134,17 @@ class ExecuteJavaControllerService : public ConfigurationContext, public std::en
  private:
   minifi::jni::JniConfigurationContext config_context_;
 
-  jobject contextInstance;
+  jobject contextInstance = nullptr;
 
   JavaClass current_cs_class;
 
-  jobject clazzInstance;
+  jobject clazzInstance = nullptr;
 
   std::shared_ptr<controllers::JavaControllerService> java_servicer_;
 
   std::string class_name_;
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<ExecuteJavaControllerService>::getLogger();
 };
 
 } /* namespace controllers */
diff --git a/extensions/jni/ExecuteJavaProcessor.cpp b/extensions/jni/ExecuteJavaProcessor.cpp
index 30e9237..2f09213 100644
--- a/extensions/jni/ExecuteJavaProcessor.cpp
+++ b/extensions/jni/ExecuteJavaProcessor.cpp
@@ -99,7 +99,7 @@ void ExecuteJavaProcessor::onSchedule(const std::shared_ptr<core::ProcessContext
     throw std::runtime_error("NiFi Processor must be defined");
   }
 
-  nifi_logger_ = logging::LoggerFactory<ExecuteJavaProcessor>::getAliasedLogger(class_name_);
+  nifi_logger_ = core::logging::LoggerFactory<ExecuteJavaProcessor>::getAliasedLogger(class_name_);
 
   jni_logger_ref_.logger_reference_ = nifi_logger_;
 
diff --git a/extensions/jni/ExecuteJavaProcessor.h b/extensions/jni/ExecuteJavaProcessor.h
index 86e3e1b..af17bb7 100644
--- a/extensions/jni/ExecuteJavaProcessor.h
+++ b/extensions/jni/ExecuteJavaProcessor.h
@@ -57,11 +57,7 @@ class ExecuteJavaProcessor : public core::Processor {
    * Create a new processor
    */
   explicit ExecuteJavaProcessor(const std::string& name, const utils::Identifier& uuid = {})
-      : Processor(name, uuid),
-        logger_instance_(nullptr),
-        context_instance_(nullptr),
-        logger_(logging::LoggerFactory<ExecuteJavaProcessor>::getLogger()),
-        nifi_logger_(nullptr) {
+      : Processor(name, uuid) {
   }
   // Destructor
   virtual ~ExecuteJavaProcessor();
@@ -262,7 +258,7 @@ class ExecuteJavaProcessor : public core::Processor {
 
   JavaClass jni_logger_class_;
 
-  jobject logger_instance_;
+  jobject logger_instance_ = nullptr;
 
   std::mutex local_mutex_;
 
@@ -278,17 +274,17 @@ class ExecuteJavaProcessor : public core::Processor {
 
   JavaClass current_processor_class;
 
-  jobject context_instance_;
+  jobject context_instance_ = nullptr;
 
-  jobject clazzInstance;
+  jobject clazzInstance = nullptr;
 
   std::shared_ptr<controllers::JavaControllerService> java_servicer_;
 
   std::string class_name_;
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<ExecuteJavaProcessor>::getLogger();
 
-  std::shared_ptr<logging::Logger> nifi_logger_;
+  std::shared_ptr<core::logging::Logger> nifi_logger_;
 
   JniControllerServiceLookup csl_;
 
diff --git a/extensions/jni/JNILoader.cpp b/extensions/jni/JNILoader.cpp
index ec15661..aba3d8c 100644
--- a/extensions/jni/JNILoader.cpp
+++ b/extensions/jni/JNILoader.cpp
@@ -26,7 +26,7 @@ static minifi::jni::JVMCreator& getJVMCreator() {
   return instance;
 }
 
-static bool init(const std::shared_ptr<org::apache::nifi::minifi::Configure>& config) {
+static bool init(const std::shared_ptr<minifi::Configure>& config) {
   getJVMCreator().configure(config);
   return true;
 }
diff --git a/extensions/jni/JVMCreator.h b/extensions/jni/JVMCreator.h
index c64dcfa..2120191 100644
--- a/extensions/jni/JVMCreator.h
+++ b/extensions/jni/JVMCreator.h
@@ -39,9 +39,7 @@ namespace jni {
 class JVMCreator : public minifi::core::CoreComponent {
  public:
   explicit JVMCreator(const std::string &name, const utils::Identifier &uuid = {})
-      : minifi::core::CoreComponent(name, uuid),
-        loader_(nullptr),
-        logger_(logging::LoggerFactory<JVMCreator>::getLogger()) {
+      : minifi::core::CoreComponent(name, uuid) {
   }
 
   virtual ~JVMCreator();
@@ -92,13 +90,13 @@ class JVMCreator : public minifi::core::CoreComponent {
   }
 
  private:
-  minifi::jni::JVMLoader *loader_;
+  minifi::jni::JVMLoader *loader_ = nullptr;
 
   std::vector<std::string> jvm_options_;
 
   std::vector<std::string> classpaths_;
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<JVMCreator>::getLogger();
 };
 
 } /* namespace jni */
diff --git a/extensions/jni/jvm/JavaControllerService.h b/extensions/jni/jvm/JavaControllerService.h
index 9fec2df..0a42683 100644
--- a/extensions/jni/jvm/JavaControllerService.h
+++ b/extensions/jni/jvm/JavaControllerService.h
@@ -47,16 +47,12 @@ namespace controllers {
 class JavaControllerService : public core::controller::ControllerService, public std::enable_shared_from_this<JavaControllerService>, public JavaServicer {
  public:
   explicit JavaControllerService(const std::string &name, const utils::Identifier &uuid = {})
-      : ControllerService(name, uuid),
-        loader(nullptr),
-        logger_(logging::LoggerFactory<JavaControllerService>::getLogger()) {
+      : ControllerService(name, uuid) {
     initialized_ = false;
   }
 
   explicit JavaControllerService(const std::string &name, const std::shared_ptr<Configure> &configuration)
-      : ControllerService(name),
-        loader(nullptr),
-        logger_(logging::LoggerFactory<JavaControllerService>::getLogger()) {
+      : ControllerService(name) {
     initialized_ = false;
     setConfiguration(configuration);
     initialize();
@@ -154,9 +150,9 @@ class JavaControllerService : public core::controller::ControllerService, public
 
   std::unique_ptr<NarClassLoader> nar_loader_;
 
-  JVMLoader *loader;
+  JVMLoader *loader = nullptr;
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<JavaControllerService>::getLogger();
 };
 
 } /* namespace controllers */
diff --git a/extensions/jni/jvm/JniControllerServiceLookup.cpp b/extensions/jni/jvm/JniControllerServiceLookup.cpp
index ccaa8ec..bc08667 100644
--- a/extensions/jni/jvm/JniControllerServiceLookup.cpp
+++ b/extensions/jni/jvm/JniControllerServiceLookup.cpp
@@ -42,6 +42,8 @@
 extern "C" {
 #endif
 
+namespace minifi = org::apache::nifi::minifi;
+
 JNIEXPORT jobject JNICALL  Java_org_apache_nifi_processor_JniControllerServiceLookup_getControllerService(JNIEnv *env, jobject obj, jstring cs) {
   minifi::jni::JniControllerServiceLookup *ptr = minifi::jni::JVMLoader::getInstance()->getReference<minifi::jni::JniControllerServiceLookup>(env, obj);
   auto str = JniStringToUTF(env, cs);
diff --git a/extensions/jni/jvm/JniFlowFile.cpp b/extensions/jni/jvm/JniFlowFile.cpp
index c804f55..7693025 100644
--- a/extensions/jni/jvm/JniFlowFile.cpp
+++ b/extensions/jni/jvm/JniFlowFile.cpp
@@ -38,6 +38,8 @@
 extern "C" {
 #endif
 
+namespace minifi = org::apache::nifi::minifi;
+
 JNIEXPORT jlong JNICALL Java_org_apache_nifi_processor_JniFlowFile_getId(JNIEnv *env, jobject obj) {
   minifi::jni::JniFlowFile *ptr = minifi::jni::JVMLoader::getInstance()->getReference<minifi::jni::JniFlowFile>(env, obj);
 
diff --git a/extensions/jni/jvm/JniInitializationContext.cpp b/extensions/jni/jvm/JniInitializationContext.cpp
index c47670d..a348d64 100644
--- a/extensions/jni/jvm/JniInitializationContext.cpp
+++ b/extensions/jni/jvm/JniInitializationContext.cpp
@@ -31,6 +31,8 @@
 #include "properties/Configure.h"
 #include "JVMLoader.h"
 
+namespace minifi = org::apache::nifi::minifi;
+
 JNIEXPORT jstring JNICALL Java_org_apache_nifi_processor_JniInitializationContext_getIdentifier(JNIEnv *env, jobject obj) {
   minifi::jni::JniInitializationContext *ptr = minifi::jni::JVMLoader::getInstance()->getReference<minifi::jni::JniInitializationContext>(env, obj);
   return env->NewStringUTF(ptr->identifier_.c_str());
diff --git a/extensions/jni/jvm/JniLogger.cpp b/extensions/jni/jvm/JniLogger.cpp
index ae497f7..ae3985d 100644
--- a/extensions/jni/jvm/JniLogger.cpp
+++ b/extensions/jni/jvm/JniLogger.cpp
@@ -40,25 +40,27 @@
 extern "C" {
 #endif
 
+namespace minifi = org::apache::nifi::minifi;
+
 JNIEXPORT jboolean JNICALL Java_org_apache_nifi_processor_JniLogger_isWarnEnabled(JNIEnv *env, jobject obj) {
   minifi::jni::JniLogger *logger_ref = minifi::jni::JVMLoader::getPtr<minifi::jni::JniLogger>(env, obj);
-  return logger_ref->logger_reference_->should_log(core::logging::LOG_LEVEL::warn);
+  return logger_ref->logger_reference_->should_log(minifi::core::logging::LOG_LEVEL::warn);
 }
 JNIEXPORT jboolean JNICALL  Java_org_apache_nifi_processor_JniLogger_isTraceEnabled(JNIEnv *env, jobject obj) {
   minifi::jni::JniLogger *logger_ref = minifi::jni::JVMLoader::getPtr<minifi::jni::JniLogger>(env, obj);
-  return logger_ref->logger_reference_->should_log(core::logging::LOG_LEVEL::trace);
+  return logger_ref->logger_reference_->should_log(minifi::core::logging::LOG_LEVEL::trace);
 }
 JNIEXPORT jboolean JNICALL  Java_org_apache_nifi_processor_JniLogger_isInfoEnabled(JNIEnv *env, jobject obj) {
   minifi::jni::JniLogger *logger_ref = minifi::jni::JVMLoader::getPtr<minifi::jni::JniLogger>(env, obj);
-  return logger_ref->logger_reference_->should_log(core::logging::LOG_LEVEL::info);
+  return logger_ref->logger_reference_->should_log(minifi::core::logging::LOG_LEVEL::info);
 }
 JNIEXPORT jboolean JNICALL  Java_org_apache_nifi_processor_JniLogger_isErrorEnabled(JNIEnv *env, jobject obj) {
   minifi::jni::JniLogger *logger_ref = minifi::jni::JVMLoader::getPtr<minifi::jni::JniLogger>(env, obj);
-  return logger_ref->logger_reference_->should_log(core::logging::LOG_LEVEL::err);
+  return logger_ref->logger_reference_->should_log(minifi::core::logging::LOG_LEVEL::err);
 }
 JNIEXPORT jboolean JNICALL  Java_org_apache_nifi_processor_JniLogger_isDebugEnabled(JNIEnv *env, jobject obj) {
   minifi::jni::JniLogger *logger_ref = minifi::jni::JVMLoader::getPtr<minifi::jni::JniLogger>(env, obj);
-  return logger_ref->logger_reference_->should_log(core::logging::LOG_LEVEL::debug);
+  return logger_ref->logger_reference_->should_log(minifi::core::logging::LOG_LEVEL::debug);
 }
 
 JNIEXPORT void JNICALL Java_org_apache_nifi_processor_JniLogger_warn(JNIEnv *env, jobject obj, jstring msg) {
diff --git a/extensions/jni/jvm/JniLogger.h b/extensions/jni/jvm/JniLogger.h
index f2dd452..716d594 100644
--- a/extensions/jni/jvm/JniLogger.h
+++ b/extensions/jni/jvm/JniLogger.h
@@ -40,7 +40,7 @@ class JniLogger {
     return clazz_;
   }
   jclass clazz_;
-  std::shared_ptr<logging::Logger> logger_reference_;
+  std::shared_ptr<core::logging::Logger> logger_reference_;
 };
 
 } /* namespace jni */
diff --git a/extensions/jni/jvm/JniProcessContext.cpp b/extensions/jni/jvm/JniProcessContext.cpp
index e9e0c35..fa8b973 100644
--- a/extensions/jni/jvm/JniProcessContext.cpp
+++ b/extensions/jni/jvm/JniProcessContext.cpp
@@ -30,6 +30,8 @@
 #include "properties/Configure.h"
 #include "JVMLoader.h"
 
+namespace minifi = org::apache::nifi::minifi;
+
 JNIEXPORT jstring JNICALL  Java_org_apache_nifi_processor_JniProcessContext_getPropertyValue(JNIEnv *env, jobject obj, jstring propertyName) {
   if (obj == nullptr || propertyName == nullptr) {
     return nullptr;
diff --git a/extensions/jni/jvm/JniProcessSession.cpp b/extensions/jni/jvm/JniProcessSession.cpp
index b8ec029..d16f12d 100644
--- a/extensions/jni/jvm/JniProcessSession.cpp
+++ b/extensions/jni/jvm/JniProcessSession.cpp
@@ -40,6 +40,8 @@
 extern "C" {
 #endif
 
+namespace minifi = org::apache::nifi::minifi;
+
 JNIEXPORT jobject JNICALL Java_org_apache_nifi_processor_JniProcessSession_create(JNIEnv *env, jobject obj) {
   if (obj == nullptr) {
     return nullptr;
@@ -242,7 +244,7 @@ JNIEXPORT void JNICALL Java_org_apache_nifi_processor_JniProcessSession_transfer
   THROW_IF_NULL(ff, env, NO_FF_OBJECT);
   minifi::jni::JniSession *session = minifi::jni::JVMLoader::getPtr<minifi::jni::JniSession>(env, obj);
   minifi::jni::JniFlowFile *ptr = minifi::jni::JVMLoader::getInstance()->getReference<minifi::jni::JniFlowFile>(env, ff);
-  core::Relationship rel(JniStringToUTF(env, relationship), "description");
+  minifi::core::Relationship rel(JniStringToUTF(env, relationship), "description");
   session->getSession()->transfer(ptr->get(), rel);
 }
 
@@ -251,7 +253,7 @@ jstring Java_org_apache_nifi_processor_JniProcessSession_getPropertyValue(JNIEnv
   if (obj == nullptr) {
     return env->NewStringUTF(value.c_str());
   }
-  core::ProcessContext *context = minifi::jni::JVMLoader::getPtr<core::ProcessContext>(env, obj);
+  minifi::core::ProcessContext *context = minifi::jni::JVMLoader::getPtr<minifi::core::ProcessContext>(env, obj);
   std::string keystr = JniStringToUTF(env, propertyName);
   if (!context->getProperty(keystr, value)) {
     context->getDynamicProperty(keystr, value);
diff --git a/extensions/jni/jvm/NarClassLoader.h b/extensions/jni/jvm/NarClassLoader.h
index 874cc87..4f72a9b 100644
--- a/extensions/jni/jvm/NarClassLoader.h
+++ b/extensions/jni/jvm/NarClassLoader.h
@@ -461,7 +461,6 @@ class NarClassLoader {
     return details;
   }
 
-  std::shared_ptr<logging::Logger> logger_;
   std::shared_ptr<minifi::jni::JavaServicer> java_servicer_;
   JavaClass class_ref_;
   jobject class_loader_;
diff --git a/extensions/libarchive/ArchiveMetadata.cpp b/extensions/libarchive/ArchiveMetadata.cpp
index 7b7a527..134b497 100644
--- a/extensions/libarchive/ArchiveMetadata.cpp
+++ b/extensions/libarchive/ArchiveMetadata.cpp
@@ -147,7 +147,7 @@ void ArchiveMetadata::loadJson(const rapidjson::Value& metadataDoc) {
   }
 }
 
-void ArchiveMetadata::seedTempPaths(fileutils::FileManager *file_man, bool keep = false) {
+void ArchiveMetadata::seedTempPaths(org::apache::nifi::minifi::utils::file::FileManager *file_man, bool keep = false) {
   for (auto& entry : entryMetadata)
     entry.tmpFileName.assign(file_man->unique_file(keep));
 }
diff --git a/extensions/libarchive/ArchiveMetadata.h b/extensions/libarchive/ArchiveMetadata.h
index 081a9b6..dff5345 100644
--- a/extensions/libarchive/ArchiveMetadata.h
+++ b/extensions/libarchive/ArchiveMetadata.h
@@ -66,7 +66,7 @@ class ArchiveMetadata {
   ArchiveEntryIterator eraseEntry(ArchiveEntryIterator position);
   ArchiveEntryIterator insertEntry(ArchiveEntryIterator it, const ArchiveEntryMetadata& entry);
 
-  void seedTempPaths(fileutils::FileManager* file_man, bool keep);
+  void seedTempPaths(org::apache::nifi::minifi::utils::file::FileManager* file_man, bool keep);
 
   rapidjson::Value toJson(rapidjson::Document::AllocatorType &alloc) const;
   static ArchiveMetadata fromJson(const rapidjson::Value&);
diff --git a/extensions/libarchive/BinFiles.h b/extensions/libarchive/BinFiles.h
index 438c109..b2443ee 100644
--- a/extensions/libarchive/BinFiles.h
+++ b/extensions/libarchive/BinFiles.h
@@ -54,8 +54,7 @@ class Bin {
         maxEntries_(maxEntries),
         minEntries_(minEntries),
         fileCount_(fileCount),
-        groupId_(groupId),
-        logger_(logging::LoggerFactory<Bin>::getLogger()) {
+        groupId_(groupId) {
     queued_data_size_ = 0;
     creation_dated_ = utils::timeutils::getTimeMillis();
     uuid_ = utils::IdGenerator::getIdGenerator()->generate();
@@ -65,25 +64,18 @@ class Bin {
     logger_->log_debug("Bin %s for group %s destroyed", getUUIDStr(), groupId_);
   }
   // check whether the bin is full
-  bool isFull() {
-    if (queued_data_size_ >= maxSize_ || queue_.size() >= maxEntries_)
-      return true;
-    else
-      return false;
+  [[nodiscard]] bool isFull() const {
+    return queued_data_size_ >= maxSize_ || queue_.size() >= maxEntries_;
   }
   // check whether the bin meet the min required size and entries so that it can be processed for merge
-  bool isReadyForMerge() {
+  [[nodiscard]] bool isReadyForMerge() const {
     return isFull() || (queued_data_size_ >= minSize_ && queue_.size() >= minEntries_);
   }
   // check whether the bin is older than the time specified in msec
-  bool isOlderThan(const uint64_t &duration) {
-    uint64_t currentTime = utils::timeutils::getTimeMillis();
-    if (currentTime > (creation_dated_ + duration))
-      return true;
-    else
-      return false;
+  [[nodiscard]] bool isOlderThan(const uint64_t &duration) const {
+    return utils::timeutils::getTimeMillis() > (creation_dated_ + duration);
   }
-  std::deque<std::shared_ptr<core::FlowFile>> & getFlowFile() {
+  std::deque<std::shared_ptr<core::FlowFile>>& getFlowFile() {
     return queue_;
   }
   // offer the flowfile to the bin
@@ -111,18 +103,18 @@ class Bin {
     return true;
   }
   // getBinAge
-  uint64_t getBinAge() {
+  [[nodiscard]] uint64_t getBinAge() const {
     return creation_dated_;
   }
-  int getSize() {
+  [[nodiscard]] int getSize() const {
     return gsl::narrow<int>(queue_.size());
   }
 
-  utils::SmallString<36> getUUIDStr() {
+  [[nodiscard]] utils::SmallString<36> getUUIDStr() const {
     return uuid_.to_string();
   }
 
-  std::string getGroupId() {
+  [[nodiscard]] std::string getGroupId() const {
     return groupId_;
   }
 
@@ -138,7 +130,7 @@ class Bin {
   uint64_t creation_dated_;
   std::string fileCount_;
   std::string groupId_;
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<Bin>::getLogger();
   // A global unique identifier
   utils::Identifier uuid_;
 };
@@ -164,7 +156,7 @@ class BinManager {
   void setBinAge(uint64_t age) {
     binAge_ = {age};
   }
-  int getBinCount() {
+  [[nodiscard]] int getBinCount() const {
     return binCount_;
   }
   void setFileCount(const std::string &value) {
@@ -196,7 +188,7 @@ class BinManager {
   std::map<std::string, std::unique_ptr<std::deque<std::unique_ptr<Bin>>> >groupBinMap_;
   std::deque<std::unique_ptr<Bin>> readyBin_;
   int binCount_{0};
-  std::shared_ptr<logging::Logger> logger_{logging::LoggerFactory<BinManager>::getLogger()};
+  std::shared_ptr<core::logging::Logger> logger_{core::logging::LoggerFactory<BinManager>::getLogger()};
 };
 
 // BinFiles Class
@@ -207,7 +199,7 @@ class BinFiles : public core::Processor {
  public:
   using core::Processor::Processor;
   // Destructor
-  virtual ~BinFiles() = default;
+  ~BinFiles() override = default;
   // Processor Name
   static constexpr char const* ProcessorName = "BinFiles";
   // Supported Properties
@@ -248,7 +240,7 @@ class BinFiles : public core::Processor {
   // OnTrigger method, implemented by NiFi BinFiles
   void onTrigger(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::ProcessSession> &session) override;
   // Initialize, over write by NiFi BinFiles
-  void initialize(void) override;
+  void initialize() override;
 
   void restore(const std::shared_ptr<core::FlowFile>& flowFile) override;
 
@@ -287,7 +279,7 @@ class BinFiles : public core::Processor {
     std::unordered_set<std::shared_ptr<core::FlowFile>> incoming_files_;
   };
 
-  std::shared_ptr<logging::Logger> logger_{logging::LoggerFactory<BinFiles>::getLogger()};
+  std::shared_ptr<core::logging::Logger> logger_{core::logging::LoggerFactory<BinFiles>::getLogger()};
   uint32_t batchSize_{1};
   uint32_t maxBinCount_{100};
   FlowFileStore file_store_;
diff --git a/extensions/libarchive/CompressContent.h b/extensions/libarchive/CompressContent.h
index 9bbe6ed..bd0c3ba 100644
--- a/extensions/libarchive/CompressContent.h
+++ b/extensions/libarchive/CompressContent.h
@@ -55,7 +55,6 @@ class CompressContent : public core::Processor {
    */
   explicit CompressContent(const std::string& name, const utils::Identifier& uuid = {})
     : core::Processor(name, uuid)
-    , logger_(logging::LoggerFactory<CompressContent>::getLogger())
     , updateFileName_(false)
     , encapsulateInTar_(false) {
   }
@@ -98,7 +97,7 @@ class CompressContent : public core::Processor {
   class ReadCallbackCompress: public InputStreamCallback {
    public:
     ReadCallbackCompress(std::shared_ptr<core::FlowFile> &flow, struct archive *arch, struct archive_entry *entry) :
-        flow_(flow), arch_(arch), entry_(entry), status_(0), logger_(logging::LoggerFactory<CompressContent>::getLogger()) {
+        flow_(flow), arch_(arch), entry_(entry), status_(0) {
     }
     ~ReadCallbackCompress() override = default;
     int64_t process(const std::shared_ptr<io::BaseStream>& stream) override {
@@ -136,7 +135,7 @@ class CompressContent : public core::Processor {
     struct archive *arch_;
     struct archive_entry *entry_;
     int status_;
-    std::shared_ptr<logging::Logger> logger_;
+    std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<CompressContent>::getLogger();
   };
   // Nest Callback Class for read stream from flow for decompress
   struct ReadCallbackDecompress : InputStreamCallback {
@@ -165,7 +164,6 @@ class CompressContent : public core::Processor {
         const std::shared_ptr<core::FlowFile> &flow, const std::shared_ptr<core::ProcessSession> &session) :
         compress_mode_(compress_mode), compress_level_(compress_level), compress_format_(compress_format),
         flow_(flow), session_(session),
-        logger_(logging::LoggerFactory<CompressContent>::getLogger()),
         readDecompressCb_(flow) {
       size_ = 0;
       stream_ = nullptr;
@@ -180,7 +178,7 @@ class CompressContent : public core::Processor {
     std::shared_ptr<core::ProcessSession> session_;
     std::shared_ptr<io::BaseStream> stream_;
     int64_t size_;
-    std::shared_ptr<logging::Logger> logger_;
+    std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<CompressContent>::getLogger();
     CompressContent::ReadCallbackDecompress readDecompressCb_;
     int status_;
 
@@ -357,14 +355,13 @@ class CompressContent : public core::Processor {
   class GzipWriteCallback : public OutputStreamCallback {
    public:
     GzipWriteCallback(CompressionMode compress_mode, int compress_level, std::shared_ptr<core::FlowFile> flow, std::shared_ptr<core::ProcessSession> session)
-      : logger_(logging::LoggerFactory<CompressContent>::getLogger())
-      , compress_mode_(std::move(compress_mode))
+      : compress_mode_(std::move(compress_mode))
       , compress_level_(compress_level)
       , flow_(std::move(flow))
       , session_(std::move(session)) {
     }
 
-    std::shared_ptr<logging::Logger> logger_;
+    std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<CompressContent>::getLogger();
     CompressionMode compress_mode_;
     int compress_level_;
     std::shared_ptr<core::FlowFile> flow_;
@@ -444,7 +441,7 @@ class CompressContent : public core::Processor {
     return core::annotation::Input::INPUT_REQUIRED;
   }
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<CompressContent>::getLogger();
   int compressLevel_{};
   CompressionMode compressMode_;
   ExtendedCompressionFormat compressFormat_;
diff --git a/extensions/libarchive/FocusArchiveEntry.cpp b/extensions/libarchive/FocusArchiveEntry.cpp
index 0a31ab8..758c147 100644
--- a/extensions/libarchive/FocusArchiveEntry.cpp
+++ b/extensions/libarchive/FocusArchiveEntry.cpp
@@ -64,7 +64,7 @@ void FocusArchiveEntry::onTrigger(core::ProcessContext *context, core::ProcessSe
     return;
   }
 
-  fileutils::FileManager file_man;
+  utils::file::FileManager file_man;
 
   // Extract archive contents
   ArchiveMetadata archiveMetadata;
@@ -248,10 +248,9 @@ int64_t FocusArchiveEntry::ReadCallback::process(const std::shared_ptr<io::BaseS
   return nlen;
 }
 
-FocusArchiveEntry::ReadCallback::ReadCallback(core::Processor *processor, fileutils::FileManager *file_man, ArchiveMetadata *archiveMetadata)
+FocusArchiveEntry::ReadCallback::ReadCallback(core::Processor *processor, utils::file::FileManager *file_man, ArchiveMetadata *archiveMetadata)
     : file_man_(file_man),
       proc_(processor) {
-  logger_ = logging::LoggerFactory<FocusArchiveEntry>::getLogger();
   _archiveMetadata = archiveMetadata;
 }
 
diff --git a/extensions/libarchive/FocusArchiveEntry.h b/extensions/libarchive/FocusArchiveEntry.h
index 314d5b8..1c35e2b 100644
--- a/extensions/libarchive/FocusArchiveEntry.h
+++ b/extensions/libarchive/FocusArchiveEntry.h
@@ -47,11 +47,10 @@ class FocusArchiveEntry : public core::Processor {
    * Create a new processor
    */
   explicit FocusArchiveEntry(const std::string& name, const utils::Identifier& uuid = {})
-  : core::Processor(name, uuid),
-    logger_(logging::LoggerFactory<FocusArchiveEntry>::getLogger()) {
+  : core::Processor(name, uuid) {
   }
   //! Destructor
-  virtual ~FocusArchiveEntry()   = default;
+  ~FocusArchiveEntry()   override = default;
   //! Processor Name
   EXTENSIONAPI static constexpr char const* ProcessorName = "FocusArchiveEntry";
   //! Supported Properties
@@ -60,22 +59,22 @@ class FocusArchiveEntry : public core::Processor {
   EXTENSIONAPI static core::Relationship Success;
 
   //! OnTrigger method, implemented by NiFi FocusArchiveEntry
-  virtual void onTrigger(core::ProcessContext *context,
-      core::ProcessSession *session);
+  void onTrigger(core::ProcessContext *context,
+      core::ProcessSession *session) override;
   //! Initialize, over write by NiFi FocusArchiveEntry
-  virtual void initialize(void);
+  void initialize() override;
 
   class ReadCallback : public InputStreamCallback {
    public:
-    explicit ReadCallback(core::Processor*, fileutils::FileManager *file_man, ArchiveMetadata *archiveMetadata);
-    ~ReadCallback();
-    virtual int64_t process(const std::shared_ptr<io::BaseStream>& stream);
+    explicit ReadCallback(core::Processor*, utils::file::FileManager *file_man, ArchiveMetadata *archiveMetadata);
+    ~ReadCallback() override;
+    int64_t process(const std::shared_ptr<io::BaseStream>& stream) override;
     bool isRunning() {return proc_->isRunning();}
 
    private:
-    fileutils::FileManager *file_man_;
+    utils::file::FileManager *file_man_;
     core::Processor * const proc_;
-    std::shared_ptr<logging::Logger> logger_;
+    std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<FocusArchiveEntry>::getLogger();
     ArchiveMetadata *_archiveMetadata;
     static int ok_cb(struct archive *, void* /*d*/) { return ARCHIVE_OK; }
     static la_ssize_t read_cb(struct archive * a, void *d, const void **buf);
@@ -83,7 +82,7 @@ class FocusArchiveEntry : public core::Processor {
 
  private:
   //! Logger
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<FocusArchiveEntry>::getLogger();
   static std::shared_ptr<utils::IdGenerator> id_generator_;
 };
 
diff --git a/extensions/libarchive/ManipulateArchive.cpp b/extensions/libarchive/ManipulateArchive.cpp
index 99b31a9..cabf103 100644
--- a/extensions/libarchive/ManipulateArchive.cpp
+++ b/extensions/libarchive/ManipulateArchive.cpp
@@ -124,7 +124,7 @@ void ManipulateArchive::onTrigger(core::ProcessContext* /*context*/, core::Proce
     }
 
     ArchiveMetadata archiveMetadata;
-    fileutils::FileManager file_man;
+    utils::file::FileManager file_man;
 
     FocusArchiveEntry::ReadCallback readCallback(this, &file_man, &archiveMetadata);
     session->read(flowFile, &readCallback);
diff --git a/extensions/libarchive/ManipulateArchive.h b/extensions/libarchive/ManipulateArchive.h
index f49b077..d71c54f 100644
--- a/extensions/libarchive/ManipulateArchive.h
+++ b/extensions/libarchive/ManipulateArchive.h
@@ -35,15 +35,14 @@ namespace nifi {
 namespace minifi {
 namespace processors {
 
-using logging::Logger;
+using core::logging::Logger;
 
 class ManipulateArchive : public core::Processor {
  public:
   explicit ManipulateArchive(const std::string& name, const utils::Identifier& uuid = {})
-  : core::Processor(name, uuid),
-    logger_(logging::LoggerFactory<ManipulateArchive>::getLogger()) {
+      : core::Processor(name, uuid) {
   }
-  virtual ~ManipulateArchive() = default;
+  ~ManipulateArchive() override = default;
   EXTENSIONAPI static constexpr char const* ProcessorName = "ManipulateArchive";
 
   // Supported operations
@@ -63,14 +62,14 @@ class ManipulateArchive : public core::Processor {
   EXTENSIONAPI static core::Relationship Failure;
 
   // OnTrigger method, implemented by NiFi ManipulateArchive
-  void onTrigger(core::ProcessContext *context, core::ProcessSession *session);
-  void onSchedule(core::ProcessContext *context, core::ProcessSessionFactory *sessionFactory);
+  void onTrigger(core::ProcessContext *context, core::ProcessSession *session) override;
+  void onSchedule(core::ProcessContext *context, core::ProcessSessionFactory *sessionFactory) override;
   // Initialize, over write by NiFi ManipulateArchive
-  void initialize(void);
+  void initialize() override;
 
  private:
   // Logger
-  std::shared_ptr<Logger> logger_;
+  std::shared_ptr<Logger> logger_ = core::logging::LoggerFactory<ManipulateArchive>::getLogger();
   std::string before_, after_, operation_, destination_, targetEntry_;
 };
 
diff --git a/extensions/libarchive/MergeContent.h b/extensions/libarchive/MergeContent.h
index 29403ba..ca139cf 100644
--- a/extensions/libarchive/MergeContent.h
+++ b/extensions/libarchive/MergeContent.h
@@ -165,7 +165,6 @@ class ArchiveMerge {
     WriteCallback(std::string merge_type, std::deque<std::shared_ptr<core::FlowFile>> &flows, FlowFileSerializer& serializer)
         : merge_type_(merge_type),
           flows_(flows),
-          logger_(logging::LoggerFactory<ArchiveMerge>::getLogger()),
           serializer_(serializer) {
       size_ = 0;
       stream_ = nullptr;
@@ -176,7 +175,7 @@ class ArchiveMerge {
     std::deque<std::shared_ptr<core::FlowFile>> &flows_;
     std::shared_ptr<io::BaseStream> stream_;
     size_t size_;
-    std::shared_ptr<logging::Logger> logger_;
+    std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<ArchiveMerge>::getLogger();
     FlowFileSerializer& serializer_;
 
     static la_ssize_t archive_write(struct archive* /*arch*/, void *context, const void *buff, size_t size) {
@@ -305,8 +304,7 @@ class MergeContent : public processors::BinFiles {
    * Create a new processor
    */
   explicit MergeContent(const std::string& name, const utils::Identifier& uuid = {})
-      : processors::BinFiles(name, uuid),
-        logger_(logging::LoggerFactory<MergeContent>::getLogger()) {
+      : processors::BinFiles(name, uuid) {
     mergeStrategy_ = merge_content_options::MERGE_STRATEGY_DEFRAGMENT;
     mergeFormat_ = merge_content_options::MERGE_FORMAT_CONCAT_VALUE;
     delimiterStrategy_ = merge_content_options::DELIMITER_STRATEGY_FILENAME;
@@ -358,7 +356,7 @@ class MergeContent : public processors::BinFiles {
     return core::annotation::Input::INPUT_REQUIRED;
   }
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<MergeContent>::getLogger();
   std::string mergeStrategy_;
   std::string mergeFormat_;
   std::string correlationAttributeName_;
diff --git a/extensions/libarchive/UnfocusArchiveEntry.cpp b/extensions/libarchive/UnfocusArchiveEntry.cpp
index 26d0e30..c32d2a6 100644
--- a/extensions/libarchive/UnfocusArchiveEntry.cpp
+++ b/extensions/libarchive/UnfocusArchiveEntry.cpp
@@ -59,7 +59,7 @@ void UnfocusArchiveEntry::onTrigger(core::ProcessContext *context, core::Process
     return;
   }
 
-  fileutils::FileManager file_man;
+  utils::file::FileManager file_man;
   ArchiveMetadata lensArchiveMetadata;
 
   // Get lens stack from attribute
@@ -145,7 +145,6 @@ void UnfocusArchiveEntry::onTrigger(core::ProcessContext *context, core::Process
 }
 
 UnfocusArchiveEntry::WriteCallback::WriteCallback(ArchiveMetadata *archiveMetadata) {
-  logger_ = logging::LoggerFactory<UnfocusArchiveEntry>::getLogger();
   _archiveMetadata = archiveMetadata;
 }
 
diff --git a/extensions/libarchive/UnfocusArchiveEntry.h b/extensions/libarchive/UnfocusArchiveEntry.h
index a36b82b..6ada17e 100644
--- a/extensions/libarchive/UnfocusArchiveEntry.h
+++ b/extensions/libarchive/UnfocusArchiveEntry.h
@@ -38,7 +38,7 @@ namespace nifi {
 namespace minifi {
 namespace processors {
 
-using logging::Logger;
+using core::logging::Logger;
 
 //! UnfocusArchiveEntry Class
 class UnfocusArchiveEntry : public core::Processor {
@@ -48,30 +48,29 @@ class UnfocusArchiveEntry : public core::Processor {
    * Create a new processor
    */
   explicit UnfocusArchiveEntry(const std::string& name, const utils::Identifier& uuid = {})
-  : core::Processor(name, uuid),
-    logger_(logging::LoggerFactory<UnfocusArchiveEntry>::getLogger()) {
+      : core::Processor(name, uuid) {
   }
   //! Destructor
-  virtual ~UnfocusArchiveEntry() = default;
+  ~UnfocusArchiveEntry() override = default;
   //! Processor Name
   static constexpr char const* ProcessorName = "UnfocusArchiveEntry";
   //! Supported Relationships
   static core::Relationship Success;
 
   //! OnTrigger method, implemented by NiFi UnfocusArchiveEntry
-  virtual void onTrigger(core::ProcessContext *context,
-      core::ProcessSession *session);
+  void onTrigger(core::ProcessContext *context,
+      core::ProcessSession *session) override;
   //! Initialize, over write by NiFi UnfocusArchiveEntry
-  virtual void initialize(void);
+  void initialize() override;
 
   //! Write callback for reconstituting lensed archive into flow file content
   class WriteCallback : public OutputStreamCallback {
    public:
     explicit WriteCallback(ArchiveMetadata *archiveMetadata);
-    int64_t process(const std::shared_ptr<io::BaseStream>& stream);
+    int64_t process(const std::shared_ptr<io::BaseStream>& stream) override;
    private:
     //! Logger
-    std::shared_ptr<Logger> logger_;
+    std::shared_ptr<Logger> logger_ = core::logging::LoggerFactory<UnfocusArchiveEntry>::getLogger();
     ArchiveMetadata *_archiveMetadata;
     static int ok_cb(struct archive *, void* /*d*/) { return ARCHIVE_OK; }
     static la_ssize_t write_cb(struct archive *, void *d, const void *buffer, size_t length);
@@ -79,7 +78,7 @@ class UnfocusArchiveEntry : public core::Processor {
 
  private:
   //! Logger
-  std::shared_ptr<Logger> logger_;
+  std::shared_ptr<Logger> logger_ = core::logging::LoggerFactory<UnfocusArchiveEntry>::getLogger();
 };
 
 } /* namespace processors */
diff --git a/extensions/librdkafka/ConsumeKafka.cpp b/extensions/librdkafka/ConsumeKafka.cpp
index 28151fe..e27051e 100644
--- a/extensions/librdkafka/ConsumeKafka.cpp
+++ b/extensions/librdkafka/ConsumeKafka.cpp
@@ -253,7 +253,7 @@ void ConsumeKafka::onSchedule(core::ProcessContext* context, core::ProcessSessio
 namespace {
 void rebalance_cb(rd_kafka_t* rk, rd_kafka_resp_err_t trigger, rd_kafka_topic_partition_list_t* partitions, void* /*opaque*/) {
   // Cooperative, incremental assignment is not supported in the current librdkafka version
-  std::shared_ptr<logging::Logger> logger{logging::LoggerFactory<ConsumeKafka>::getLogger()};
+  std::shared_ptr<core::logging::Logger> logger{core::logging::LoggerFactory<ConsumeKafka>::getLogger()};
   logger->log_debug("Rebalance triggered.");
   rd_kafka_resp_err_t assign_error = RD_KAFKA_RESP_ERR_NO_ERROR;
   switch (trigger) {
diff --git a/extensions/librdkafka/ConsumeKafka.h b/extensions/librdkafka/ConsumeKafka.h
index bfa47a9..14a23d0 100644
--- a/extensions/librdkafka/ConsumeKafka.h
+++ b/extensions/librdkafka/ConsumeKafka.h
@@ -98,10 +98,9 @@ class ConsumeKafka : public core::Processor {
   static constexpr const std::size_t METADATA_COMMUNICATIONS_TIMEOUT_MS{ 60000 };
 
   explicit ConsumeKafka(const std::string& name, const utils::Identifier& uuid = utils::Identifier()) :
-      Processor(name, uuid),
-      logger_(logging::LoggerFactory<ConsumeKafka>::getLogger()) {}
+      Processor(name, uuid) {}
 
-  virtual ~ConsumeKafka() = default;
+  ~ConsumeKafka() override = default;
 
  public:
   bool supportsDynamicProperties() override {
@@ -183,7 +182,7 @@ class ConsumeKafka : public core::Processor {
 
   std::mutex do_not_call_on_trigger_concurrently_;
 
-  std::shared_ptr<logging::Logger> logger_{logging::LoggerFactory<ConsumeKafka>::getLogger()};
+  std::shared_ptr<core::logging::Logger> logger_{core::logging::LoggerFactory<ConsumeKafka>::getLogger()};
 };
 
 }  // namespace processors
diff --git a/extensions/librdkafka/KafkaConnection.cpp b/extensions/librdkafka/KafkaConnection.cpp
index 3d412ad..3c6acc9 100644
--- a/extensions/librdkafka/KafkaConnection.cpp
+++ b/extensions/librdkafka/KafkaConnection.cpp
@@ -26,7 +26,7 @@ namespace minifi {
 namespace processors {
 
 KafkaConnection::KafkaConnection(const KafkaConnectionKey &key)
-    : logger_(logging::LoggerFactory<KafkaConnection>::getLogger()),
+    : logger_(core::logging::LoggerFactory<KafkaConnection>::getLogger()),
       kafka_connection_(nullptr),
       poll_(false) {
   initialized_ = false;
@@ -48,7 +48,7 @@ void KafkaConnection::removeConnection() {
   if (kafka_connection_) {
     rd_kafka_flush(kafka_connection_, 10 * 1000); /* wait for max 10 seconds */
     rd_kafka_destroy(kafka_connection_);
-    modifyLoggers([&](std::unordered_map<const rd_kafka_t*, std::weak_ptr<logging::Logger>>& loggers) {
+    modifyLoggers([&](std::unordered_map<const rd_kafka_t*, std::weak_ptr<core::logging::Logger>>& loggers) {
       loggers.erase(kafka_connection_);
     });
     kafka_connection_ = nullptr;
@@ -65,7 +65,7 @@ void KafkaConnection::setConnection(gsl::owner<rd_kafka_t*> producer) {
   removeConnection();
   kafka_connection_ = producer;  // kafka_connection_ takes ownership from producer
   initialized_ = true;
-  modifyLoggers([&](std::unordered_map<const rd_kafka_t*, std::weak_ptr<logging::Logger>>& loggers) {
+  modifyLoggers([&](std::unordered_map<const rd_kafka_t*, std::weak_ptr<core::logging::Logger>>& loggers) {
     loggers[producer] = logger_;
   });
   startPoll();
@@ -96,9 +96,9 @@ void KafkaConnection::putTopic(const std::string &topicName, const std::shared_p
 }
 
 void KafkaConnection::logCallback(const rd_kafka_t* rk, int level, const char* /*fac*/, const char* buf) {
-  std::shared_ptr<logging::Logger> logger;
+  std::shared_ptr<core::logging::Logger> logger;
   try {
-    modifyLoggers([&](std::unordered_map<const rd_kafka_t*, std::weak_ptr<logging::Logger>>& loggers) {
+    modifyLoggers([&](std::unordered_map<const rd_kafka_t*, std::weak_ptr<core::logging::Logger>>& loggers) {
       logger = loggers.at(rk).lock();
     });
   } catch (...) {
@@ -113,17 +113,17 @@ void KafkaConnection::logCallback(const rd_kafka_t* rk, int level, const char* /
     case 1:  // LOG_ALERT
     case 2:  // LOG_CRIT
     case 3:  // LOG_ERR
-      logging::LOG_ERROR(logger) << buf;
+      core::logging::LOG_ERROR(logger) << buf;
       break;
     case 4:  // LOG_WARNING
-      logging::LOG_WARN(logger) << buf;
+      core::logging::LOG_WARN(logger) << buf;
       break;
     case 5:  // LOG_NOTICE
     case 6:  // LOG_INFO
-      logging::LOG_INFO(logger) << buf;
+      core::logging::LOG_INFO(logger) << buf;
       break;
     case 7:  // LOG_DEBUG
-      logging::LOG_DEBUG(logger) << buf;
+      core::logging::LOG_DEBUG(logger) << buf;
       break;
   }
 }
diff --git a/extensions/librdkafka/KafkaConnection.h b/extensions/librdkafka/KafkaConnection.h
index 8d5b12e..109e575 100644
--- a/extensions/librdkafka/KafkaConnection.h
+++ b/extensions/librdkafka/KafkaConnection.h
@@ -79,7 +79,7 @@ class KafkaConnection {
   static void logCallback(const rd_kafka_t* rk, int level, const char* /*fac*/, const char* buf);
 
  private:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_;
 
   bool initialized_;
 
@@ -92,9 +92,9 @@ class KafkaConnection {
   std::atomic<bool> poll_;
   std::thread thread_kafka_poll_;
 
-  static void modifyLoggers(const std::function<void(std::unordered_map<const rd_kafka_t*, std::weak_ptr<logging::Logger>>&)>& func) {
+  static void modifyLoggers(const std::function<void(std::unordered_map<const rd_kafka_t*, std::weak_ptr<core::logging::Logger>>&)>& func) {
     static std::mutex loggers_mutex;
-    static std::unordered_map<const rd_kafka_t*, std::weak_ptr<logging::Logger>> loggers;
+    static std::unordered_map<const rd_kafka_t*, std::weak_ptr<core::logging::Logger>> loggers;
 
     std::lock_guard<std::mutex> lock(loggers_mutex);
     func(loggers);
diff --git a/extensions/librdkafka/PublishKafka.cpp b/extensions/librdkafka/PublishKafka.cpp
index 97e14e3..cae955f 100644
--- a/extensions/librdkafka/PublishKafka.cpp
+++ b/extensions/librdkafka/PublishKafka.cpp
@@ -206,7 +206,7 @@ class PublishKafka::Messages {
   std::condition_variable cv_;
   std::vector<FlowFileResult> flow_files_;
   bool interrupted_ = false;
-  const std::shared_ptr<logging::Logger> logger_;
+  const std::shared_ptr<core::logging::Logger> logger_;
 
   std::string logStatus(const std::unique_lock<std::mutex>& lock) const {
     gsl_Expects(lock.owns_lock());
@@ -240,12 +240,12 @@ class PublishKafka::Messages {
   }
 
  public:
-  explicit Messages(std::shared_ptr<logging::Logger> logger) :logger_{std::move(logger)} {}
+  explicit Messages(std::shared_ptr<core::logging::Logger> logger) :logger_{std::move(logger)} {}
 
   void waitForCompletion() {
     std::unique_lock<std::mutex> lock(mutex_);
     cv_.wait(lock, [this, &lock] {
-      if (logger_->should_log(logging::LOG_LEVEL::trace)) {
+      if (logger_->should_log(core::logging::LOG_LEVEL::trace)) {
         logger_->log_trace("%s", logStatus(lock));
       }
       return interrupted_ || std::all_of(std::begin(this->flow_files_), std::end(this->flow_files_), [](const FlowFileResult& flow_file) {
@@ -375,7 +375,7 @@ class ReadCallback : public InputStreamCallback {
       std::shared_ptr<PublishKafka::Messages> messages,
       const size_t flow_file_index,
       const bool fail_empty_flow_files,
-      std::shared_ptr<logging::Logger> logger)
+      std::shared_ptr<core::logging::Logger> logger)
       : flow_size_(flowFile.getSize()),
       max_seg_size_(max_seg_size == 0 || flow_size_ < max_seg_size ? flow_size_ : max_seg_size),
       key_(std::move(key)),
@@ -454,7 +454,7 @@ class ReadCallback : public InputStreamCallback {
   uint32_t read_size_ = 0;
   bool called_ = false;
   const bool fail_empty_flow_files_ = true;
-  const std::shared_ptr<logging::Logger> logger_;
+  const std::shared_ptr<core::logging::Logger> logger_;
 };
 
 /**
diff --git a/extensions/librdkafka/PublishKafka.h b/extensions/librdkafka/PublishKafka.h
index ca0d26a..c2a8197 100644
--- a/extensions/librdkafka/PublishKafka.h
+++ b/extensions/librdkafka/PublishKafka.h
@@ -90,7 +90,7 @@ class PublishKafka : public core::Processor {
   EXTENSIONAPI static const core::Relationship Success;
 
   explicit PublishKafka(const std::string& name, const utils::Identifier& uuid = {})
-      : core::Processor(std::move(name), uuid) {
+      : core::Processor(name, uuid) {
   }
 
   ~PublishKafka() override = default;
@@ -119,7 +119,7 @@ class PublishKafka : public core::Processor {
     return core::annotation::Input::INPUT_REQUIRED;
   }
 
-  std::shared_ptr<logging::Logger> logger_{logging::LoggerFactory<PublishKafka>::getLogger()};
+  std::shared_ptr<core::logging::Logger> logger_{core::logging::LoggerFactory<PublishKafka>::getLogger()};
 
   KafkaConnectionKey key_;
   std::unique_ptr<KafkaConnection> conn_;
diff --git a/extensions/librdkafka/rdkafka_utils.cpp b/extensions/librdkafka/rdkafka_utils.cpp
index fdddc81..3532ab5 100644
--- a/extensions/librdkafka/rdkafka_utils.cpp
+++ b/extensions/librdkafka/rdkafka_utils.cpp
@@ -38,7 +38,7 @@ void setKafkaConfigurationField(rd_kafka_conf_t& configuration, const std::strin
   }
 }
 
-void print_topics_list(logging::Logger& logger, rd_kafka_topic_partition_list_t& kf_topic_partition_list) {
+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 ".",
     kf_topic_partition_list.elems[i].topic, kf_topic_partition_list.elems[i].partition, kf_topic_partition_list.elems[i].offset);
@@ -59,7 +59,7 @@ std::string get_human_readable_kafka_message_timestamp(const rd_kafka_message_t&
   return {"[Timestamp](" + std::string(tsname) + " " + std::to_string(timestamp) + " (" + std::to_string(seconds_since_timestamp) + " s ago)"};
 }
 
-std::string get_human_readable_kafka_message_headers(const rd_kafka_message_t& rkmessage, logging::Logger& logger) {
+std::string get_human_readable_kafka_message_headers(const rd_kafka_message_t& rkmessage, core::logging::Logger& logger) {
   rd_kafka_headers_t* hdrs;
   const rd_kafka_resp_err_t get_header_response = rd_kafka_message_headers(&rkmessage, &hdrs);
   if (RD_KAFKA_RESP_ERR_NO_ERROR == get_header_response) {
@@ -74,7 +74,7 @@ std::string get_human_readable_kafka_message_headers(const rd_kafka_message_t& r
   return "[Error]";
 }
 
-void print_kafka_message(const rd_kafka_message_t& rkmessage, logging::Logger& logger) {
+void print_kafka_message(const rd_kafka_message_t& rkmessage, core::logging::Logger& logger) {
   if (RD_KAFKA_RESP_ERR_NO_ERROR != rkmessage.err) {
     const std::string error_msg = "ConsumeKafka: received error message from broker. Librdkafka error msg: " + std::string(rd_kafka_err2str(rkmessage.err));
     throw minifi::Exception(ExceptionType::PROCESSOR_EXCEPTION, error_msg);
diff --git a/extensions/librdkafka/rdkafka_utils.h b/extensions/librdkafka/rdkafka_utils.h
index 2e57d14..0282af8 100644
--- a/extensions/librdkafka/rdkafka_utils.h
+++ b/extensions/librdkafka/rdkafka_utils.h
@@ -100,8 +100,8 @@ void kafka_headers_for_each(const rd_kafka_headers_t& headers, T key_value_handl
 }
 
 void setKafkaConfigurationField(rd_kafka_conf_t& configuration, const std::string& field_name, const std::string& value);
-void print_topics_list(logging::Logger& logger, rd_kafka_topic_partition_list_t& kf_topic_partition_list);
-void print_kafka_message(const rd_kafka_message_t& rkmessage, logging::Logger& logger);
+void print_topics_list(core::logging::Logger& logger, rd_kafka_topic_partition_list_t& kf_topic_partition_list);
+void print_kafka_message(const rd_kafka_message_t& rkmessage, core::logging::Logger& logger);
 std::string get_encoded_string(const std::string& input, KafkaEncoding encoding);
 std::optional<std::string> get_encoded_message_key(const rd_kafka_message_t& message, KafkaEncoding encoding);
 
diff --git a/extensions/mqtt/controllerservice/MQTTControllerService.h b/extensions/mqtt/controllerservice/MQTTControllerService.h
index 36abcae..07b79b1 100644
--- a/extensions/mqtt/controllerservice/MQTTControllerService.h
+++ b/extensions/mqtt/controllerservice/MQTTControllerService.h
@@ -77,8 +77,7 @@ class MQTTControllerService : public core::controller::ControllerService {
         keepAliveInterval_(0),
         connectionTimeOut_(0),
         qos_(2),
-        ssl_context_service_(nullptr),
-        logger_(logging::LoggerFactory<MQTTControllerService>::getLogger()) {
+        ssl_context_service_(nullptr) {
   }
 
   explicit MQTTControllerService(const std::string &name, const std::shared_ptr<Configure> &configuration)
@@ -88,8 +87,7 @@ class MQTTControllerService : public core::controller::ControllerService {
         keepAliveInterval_(0),
         connectionTimeOut_(0),
         qos_(2),
-        ssl_context_service_(nullptr),
-        logger_(logging::LoggerFactory<MQTTControllerService>::getLogger()) {
+        ssl_context_service_(nullptr) {
     setConfiguration(configuration);
     initialize();
   }
@@ -313,7 +311,7 @@ class MQTTControllerService : public core::controller::ControllerService {
 
   std::shared_ptr<controllers::SSLContextService> ssl_context_service_;
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<MQTTControllerService>::getLogger();
 };
 
 } /* namespace controllers */
diff --git a/extensions/mqtt/processors/AbstractMQTTProcessor.h b/extensions/mqtt/processors/AbstractMQTTProcessor.h
index fbe8dac..605eb0d 100644
--- a/extensions/mqtt/processors/AbstractMQTTProcessor.h
+++ b/extensions/mqtt/processors/AbstractMQTTProcessor.h
@@ -51,8 +51,7 @@ class AbstractMQTTProcessor : public core::Processor {
    * Create a new processor
    */
   explicit AbstractMQTTProcessor(const std::string& name, const utils::Identifier& uuid = {})
-      : core::Processor(name, uuid),
-        logger_(logging::LoggerFactory<AbstractMQTTProcessor>::getLogger()) {
+      : core::Processor(name, uuid) {
     client_ = nullptr;
     cleanSession_ = false;
     keepAliveInterval_ = 60;
@@ -61,7 +60,7 @@ class AbstractMQTTProcessor : public core::Processor {
     isSubscriber_ = false;
   }
   // Destructor
-  virtual ~AbstractMQTTProcessor() {
+  ~AbstractMQTTProcessor() override {
     if (isSubscriber_) {
       MQTTClient_unsubscribe(client_, topic_.c_str());
     }
@@ -141,7 +140,7 @@ class AbstractMQTTProcessor : public core::Processor {
   bool isSubscriber_;
 
  private:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<AbstractMQTTProcessor>::getLogger();
   MQTTClient_SSLOptions sslopts_;
   bool sslEnabled_;
   std::string securityCA_;
diff --git a/extensions/mqtt/processors/ConsumeMQTT.h b/extensions/mqtt/processors/ConsumeMQTT.h
index e39785b..f76c2af 100644
--- a/extensions/mqtt/processors/ConsumeMQTT.h
+++ b/extensions/mqtt/processors/ConsumeMQTT.h
@@ -52,8 +52,7 @@ class ConsumeMQTT : public processors::AbstractMQTTProcessor {
    * Create a new processor
    */
   explicit ConsumeMQTT(const std::string& name, const utils::Identifier& uuid = {})
-      : processors::AbstractMQTTProcessor(name, uuid),
-        logger_(logging::LoggerFactory<ConsumeMQTT>::getLogger()) {
+      : processors::AbstractMQTTProcessor(name, uuid) {
     isSubscriber_ = true;
     maxQueueSize_ = 100;
     maxSegSize_ = ULLONG_MAX;
@@ -122,7 +121,7 @@ class ConsumeMQTT : public processors::AbstractMQTTProcessor {
     return core::annotation::Input::INPUT_FORBIDDEN;
   }
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<ConsumeMQTT>::getLogger();
   std::mutex mutex_;
   uint64_t maxQueueSize_;
   uint64_t maxSegSize_;
diff --git a/extensions/mqtt/processors/ConvertHeartBeat.h b/extensions/mqtt/processors/ConvertHeartBeat.h
index 7c7d6a7..241fce1 100644
--- a/extensions/mqtt/processors/ConvertHeartBeat.h
+++ b/extensions/mqtt/processors/ConvertHeartBeat.h
@@ -41,10 +41,10 @@ class ConvertHeartBeat: public ConvertBase{
    * Create a new processor
    */
   explicit ConvertHeartBeat(const std::string& name, const utils::Identifier& uuid = {})
-    : ConvertBase(name, uuid), logger_(logging::LoggerFactory<ConvertHeartBeat>::getLogger()) {
+    : ConvertBase(name, uuid) {
   }
   // Destructor
-  virtual ~ConvertHeartBeat() = default;
+  ~ConvertHeartBeat() override = default;
   // Processor Name
   static constexpr char const* ProcessorName = "ConvertHeartBeat";
 
@@ -59,7 +59,7 @@ class ConvertHeartBeat: public ConvertBase{
   void onTrigger(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::ProcessSession> &session) override;
 
  private:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<ConvertHeartBeat>::getLogger();
 };
 
 } /* namespace processors */
diff --git a/extensions/mqtt/processors/ConvertJSONAck.h b/extensions/mqtt/processors/ConvertJSONAck.h
index 7d27982..9ce09a3 100644
--- a/extensions/mqtt/processors/ConvertJSONAck.h
+++ b/extensions/mqtt/processors/ConvertJSONAck.h
@@ -48,8 +48,7 @@ class ConvertJSONAck : public ConvertBase {
    * Create a new processor
    */
   explicit ConvertJSONAck(const std::string& name, const utils::Identifier& uuid = {})
-      : ConvertBase(name, uuid),
-        logger_(logging::LoggerFactory<ConvertJSONAck>::getLogger()) {
+      : ConvertBase(name, uuid) {
   }
   // Destructor
   ~ConvertJSONAck() override = default;
@@ -89,7 +88,7 @@ class ConvertJSONAck : public ConvertBase {
   std::string parseTopicName(const std::string &json);
 
  private:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<ConvertJSONAck>::getLogger();
 };
 
 } /* namespace processors */
diff --git a/extensions/mqtt/processors/ConvertUpdate.h b/extensions/mqtt/processors/ConvertUpdate.h
index 376232a..9561fb3 100644
--- a/extensions/mqtt/processors/ConvertUpdate.h
+++ b/extensions/mqtt/processors/ConvertUpdate.h
@@ -47,10 +47,10 @@ class ConvertUpdate : public ConvertBase {
    * Create a new processor
    */
   explicit ConvertUpdate(const std::string& name, const utils::Identifier& uuid = {})
-    : ConvertBase(name, uuid), logger_(logging::LoggerFactory<ConvertUpdate>::getLogger()) {
+    : ConvertBase(name, uuid) {
   }
   // Destructor
-  virtual ~ConvertUpdate() = default;
+  ~ConvertUpdate() override = default;
 
   static core::Property SSLContext;
   // Processor Name
@@ -74,7 +74,7 @@ class ConvertUpdate : public ConvertBase {
   std::shared_ptr<minifi::controllers::SSLContextService> ssl_context_service_;
 
  private:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<ConvertUpdate>::getLogger();
 };
 
 } /* namespace processors */
diff --git a/extensions/mqtt/processors/PublishMQTT.h b/extensions/mqtt/processors/PublishMQTT.h
index 925ac38..d77ec03 100644
--- a/extensions/mqtt/processors/PublishMQTT.h
+++ b/extensions/mqtt/processors/PublishMQTT.h
@@ -49,8 +49,7 @@ class PublishMQTT : public processors::AbstractMQTTProcessor {
    * Create a new processor
    */
   explicit PublishMQTT(const std::string& name, const utils::Identifier& uuid = {})
-      : processors::AbstractMQTTProcessor(name, uuid),
-        logger_(logging::LoggerFactory<PublishMQTT>::getLogger()) {
+      : processors::AbstractMQTTProcessor(name, uuid) {
     retain_ = false;
     max_seg_size_ = ULLONG_MAX;
   }
@@ -134,7 +133,7 @@ class PublishMQTT : public processors::AbstractMQTTProcessor {
   // OnTrigger method, implemented by NiFi PublishMQTT
   void onTrigger(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::ProcessSession> &session) override;
   // Initialize, over write by NiFi PublishMQTT
-  void initialize(void) override;
+  void initialize() override;
 
  private:
   core::annotation::Input getInputRequirement() const override {
@@ -143,7 +142,7 @@ class PublishMQTT : public processors::AbstractMQTTProcessor {
 
   uint64_t max_seg_size_;
   bool retain_;
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<PublishMQTT>::getLogger();
 };
 
 } /* namespace processors */
diff --git a/extensions/mqtt/protocol/MQTTC2Protocol.cpp b/extensions/mqtt/protocol/MQTTC2Protocol.cpp
index f63c8f9..431888c 100644
--- a/extensions/mqtt/protocol/MQTTC2Protocol.cpp
+++ b/extensions/mqtt/protocol/MQTTC2Protocol.cpp
@@ -25,8 +25,7 @@ namespace minifi {
 namespace c2 {
 
 MQTTC2Protocol::MQTTC2Protocol(const std::string& name, const utils::Identifier& uuid)
-    : C2Protocol(name, uuid),
-      logger_(logging::LoggerFactory<MQTTC2Protocol>::getLogger()) {
+    : C2Protocol(name, uuid) {
 }
 
 MQTTC2Protocol::~MQTTC2Protocol() = default;
diff --git a/extensions/mqtt/protocol/MQTTC2Protocol.h b/extensions/mqtt/protocol/MQTTC2Protocol.h
index da5c2f9..f4ad9b1 100644
--- a/extensions/mqtt/protocol/MQTTC2Protocol.h
+++ b/extensions/mqtt/protocol/MQTTC2Protocol.h
@@ -80,7 +80,7 @@ class MQTTC2Protocol : public C2Protocol {
 
   // mqtt controller service reference.
   std::shared_ptr<controllers::MQTTControllerService> mqtt_service_;
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<MQTTC2Protocol>::getLogger();
   // mqtt controller serviec name.
   std::string controller_service_name_;
 };
diff --git a/extensions/opc/include/fetchopc.h b/extensions/opc/include/fetchopc.h
index fb4471f..5652dd2 100644
--- a/extensions/opc/include/fetchopc.h
+++ b/extensions/opc/include/fetchopc.h
@@ -55,8 +55,8 @@ class FetchOPCProcessor : public BaseOPCProcessor {
   static core::Relationship Failure;
 
   explicit FetchOPCProcessor(const std::string& name, const utils::Identifier& uuid = {})
-  : BaseOPCProcessor(name, uuid), nameSpaceIdx_(0), nodesFound_(0), variablesFound_(0), maxDepth_(0) {
-    logger_ = logging::LoggerFactory<FetchOPCProcessor>::getLogger();
+      : BaseOPCProcessor(name, uuid), nameSpaceIdx_(0), nodesFound_(0), variablesFound_(0), maxDepth_(0) {
+    logger_ = core::logging::LoggerFactory<FetchOPCProcessor>::getLogger();
   }
 
   void onSchedule(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::ProcessSessionFactory> &factory) override;
diff --git a/extensions/opc/include/opcbase.h b/extensions/opc/include/opcbase.h
index bebd765..81d25e5 100644
--- a/extensions/opc/include/opcbase.h
+++ b/extensions/opc/include/opcbase.h
@@ -60,7 +60,7 @@ class BaseOPCProcessor : public core::Processor {
 
   virtual bool reconnect();
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_;
 
   opc::ClientPtr connection_;
 
diff --git a/extensions/opc/include/putopc.h b/extensions/opc/include/putopc.h
index 8c2180d..a18a583 100644
--- a/extensions/opc/include/putopc.h
+++ b/extensions/opc/include/putopc.h
@@ -58,8 +58,8 @@ class PutOPCProcessor : public BaseOPCProcessor {
   static core::Relationship Failure;
 
   explicit PutOPCProcessor(const std::string& name, const utils::Identifier& uuid = {})
-  : BaseOPCProcessor(name, uuid), nameSpaceIdx_(0), parentExists_(false) {
-    logger_ = logging::LoggerFactory<PutOPCProcessor>::getLogger();
+      : BaseOPCProcessor(name, uuid), nameSpaceIdx_(0), parentExists_(false) {
+    logger_ = core::logging::LoggerFactory<PutOPCProcessor>::getLogger();
   }
 
   void onSchedule(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::ProcessSessionFactory> &factory) override;
@@ -71,13 +71,13 @@ class PutOPCProcessor : public BaseOPCProcessor {
  private:
   class ReadCallback : public InputStreamCallback {
    public:
-    explicit ReadCallback(std::shared_ptr<logging::Logger> logger) : logger_(logger) {}
+    explicit ReadCallback(std::shared_ptr<core::logging::Logger> logger) : logger_(logger) {}
     int64_t process(const std::shared_ptr<io::BaseStream>& stream) override;
     const std::vector<uint8_t>& getContent() const { return buf_; }
 
    private:
     std::vector<uint8_t> buf_;
-    std::shared_ptr<logging::Logger> logger_;
+    std::shared_ptr<core::logging::Logger> logger_;
   };
 
   std::string nodeID_;
diff --git a/extensions/opencv/CaptureRTSPFrame.h b/extensions/opencv/CaptureRTSPFrame.h
index ddac409..d9d6463 100644
--- a/extensions/opencv/CaptureRTSPFrame.h
+++ b/extensions/opencv/CaptureRTSPFrame.h
@@ -40,8 +40,7 @@ namespace processors {
 class CaptureRTSPFrame : public core::Processor {
  public:
   explicit CaptureRTSPFrame(const std::string &name, const utils::Identifier &uuid = {})
-      : Processor(name, uuid),
-        logger_(logging::LoggerFactory<CaptureRTSPFrame>::getLogger()) {
+      : Processor(name, uuid) {
   }
 
   EXTENSIONAPI static core::Property RTSPUsername;
@@ -84,7 +83,7 @@ class CaptureRTSPFrame : public core::Processor {
   };
 
  private:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<CaptureRTSPFrame>::getLogger();
   std::mutex mutex_;
   std::string rtsp_username_;
   std::string rtsp_password_;
diff --git a/extensions/opencv/MotionDetector.h b/extensions/opencv/MotionDetector.h
index e511be0..0297daf 100644
--- a/extensions/opencv/MotionDetector.h
+++ b/extensions/opencv/MotionDetector.h
@@ -34,8 +34,7 @@ namespace processors {
 class MotionDetector : public core::Processor {
  public:
   explicit MotionDetector(const std::string &name, const utils::Identifier &uuid = {})
-      : Processor(name, uuid),
-        logger_(logging::LoggerFactory<MotionDetector>::getLogger()) {
+      : Processor(name, uuid) {
   }
 
   static core::Property ImageEncoding;
@@ -47,7 +46,7 @@ class MotionDetector : public core::Processor {
   static core::Relationship Success;
   static core::Relationship Failure;
 
-  void initialize(void) override;
+  void initialize() override;
   void onSchedule(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::ProcessSessionFactory> &sessionFactory) override;
   void onTrigger(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::ProcessSession> &session) override;
 
@@ -56,14 +55,14 @@ class MotionDetector : public core::Processor {
  private:
   bool detectAndDraw(cv::Mat &frame);
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<MotionDetector>::getLogger();
   std::mutex mutex_;
   cv::Mat background_;
   cv::Mat bg_img_;
   std::string image_encoding_;
-  int min_area_;
-  int threshold_;
-  int dil_iter_;
+  int min_area_{};
+  int threshold_{};
+  int dil_iter_{};
 
   // hardcoded width to 500
   const double IMG_WIDTH = 500.0;
diff --git a/extensions/openwsman/processors/SourceInitiatedSubscriptionListener.cpp b/extensions/openwsman/processors/SourceInitiatedSubscriptionListener.cpp
index 13e25ce..3e25b3b 100644
--- a/extensions/openwsman/processors/SourceInitiatedSubscriptionListener.cpp
+++ b/extensions/openwsman/processors/SourceInitiatedSubscriptionListener.cpp
@@ -145,7 +145,6 @@ constexpr char const* SourceInitiatedSubscriptionListener::ProcessorName;
 
 SourceInitiatedSubscriptionListener::SourceInitiatedSubscriptionListener(const std::string& name, const utils::Identifier& uuid)
     : Processor(name, uuid)
-    , logger_(logging::LoggerFactory<SourceInitiatedSubscriptionListener>::getLogger())
     , session_factory_(nullptr)
     , listen_port_(0U)
     , subscription_expiration_interval_(0)
@@ -324,7 +323,7 @@ bool SourceInitiatedSubscriptionListener::Handler::handlePost(CivetServer* /*ser
     int xml_buf_size = 0;
     ws_xml_dump_memory_node_tree_enc(node, &xml_buf, &xml_buf_size, "UTF-8");
     if (xml_buf != nullptr) {
-        logging::LOG_TRACE(processor_.logger_) << "Received request: \"" << std::string(xml_buf, xml_buf_size) << "\"";
+        core::logging::LOG_TRACE(processor_.logger_) << "Received request: \"" << std::string(xml_buf, xml_buf_size) << "\"";
         ws_xml_free_memory(xml_buf);
     }
   }
@@ -383,7 +382,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) {
-  logging::LOG_TRACE(processor_.logger_) << "Sending response to " << machineId << " (" << remoteIp << "): \"" << std::string(xml_buf, xml_buf_size) << "\"";
+  core::logging::LOG_TRACE(processor_.logger_) << "Sending response to " << machineId << " (" << remoteIp << "): \"" << std::string(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");
@@ -617,10 +616,10 @@ int SourceInitiatedSubscriptionListener::Handler::enumerateEventCallback(WsXmlNo
   }
 
   std::shared_ptr<core::ProcessSession> session;
-  std::shared_ptr<logging::Logger> logger;
+  std::shared_ptr<core::logging::Logger> logger;
   std::string machine_id;
   std::string remote_ip;
-  std::tie(session, logger, machine_id, remote_ip) = *static_cast<std::tuple<std::shared_ptr<core::ProcessSession>, std::shared_ptr<logging::Logger>, std::string, std::string>*>(data);
+  std::tie(session, logger, machine_id, remote_ip) = *static_cast<std::tuple<std::shared_ptr<core::ProcessSession>, std::shared_ptr<core::logging::Logger>, std::string, std::string>*>(data);
 
   char* text = ws_xml_get_node_text(node);
   if (text == nullptr) {
@@ -689,7 +688,7 @@ bool SourceInitiatedSubscriptionListener::Handler::handleSubscriptions(struct mg
     }
     // Enumare Body/Events/Event nodes
     auto session = processor_.session_factory_->createSession();
-    std::tuple<std::shared_ptr<core::ProcessSession>, std::shared_ptr<logging::Logger>, std::string, std::string> callback_args =
+    std::tuple<std::shared_ptr<core::ProcessSession>, std::shared_ptr<core::logging::Logger>, std::string, std::string> callback_args =
         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) {
diff --git a/extensions/openwsman/processors/SourceInitiatedSubscriptionListener.h b/extensions/openwsman/processors/SourceInitiatedSubscriptionListener.h
index b00a2a4..976a8a1 100644
--- a/extensions/openwsman/processors/SourceInitiatedSubscriptionListener.h
+++ b/extensions/openwsman/processors/SourceInitiatedSubscriptionListener.h
@@ -117,7 +117,7 @@ class SourceInitiatedSubscriptionListener : public core::Processor {
     return true;
   }
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<SourceInitiatedSubscriptionListener>::getLogger();
 
   std::shared_ptr<core::CoreComponentStateManager> state_manager_;
 
diff --git a/extensions/pcap/CapturePacket.h b/extensions/pcap/CapturePacket.h
index c59f82c..d9f66be 100644
--- a/extensions/pcap/CapturePacket.h
+++ b/extensions/pcap/CapturePacket.h
@@ -98,10 +98,7 @@ class CapturePacket : public core::Processor {
    * Create a new processor
    */
   explicit CapturePacket(const std::string& name, const utils::Identifier& uuid = {})
-      : Processor(name, uuid),
-        capture_bluetooth_(false),
-        pcap_batch_size_(50),
-        logger_(logging::LoggerFactory<CapturePacket>::getLogger()) {
+      : Processor(name, uuid) {
     mover = std::unique_ptr<PacketMovers>(new PacketMovers());
   }
   // Destructor
@@ -151,15 +148,15 @@ class CapturePacket : public core::Processor {
   inline std::string getPath() {
     return base_dir_ + "/" + base_path_;
   }
-  bool capture_bluetooth_;
+  bool capture_bluetooth_ = false;
   std::string base_dir_;
   std::vector<std::string> attached_controllers_;
   std::string base_path_;
-  int64_t pcap_batch_size_;
+  int64_t pcap_batch_size_ = 50;
   std::unique_ptr<PacketMovers> mover;
   static std::atomic<int> num_;
   std::vector<pcpp::PcapLiveDevice*> device_list_;
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<CapturePacket>::getLogger();
   static std::shared_ptr<utils::IdGenerator> id_generator_;
 };
 
diff --git a/extensions/pdh/PerformanceDataMonitor.h b/extensions/pdh/PerformanceDataMonitor.h
index b93c5cf..9be771f 100644
--- a/extensions/pdh/PerformanceDataMonitor.h
+++ b/extensions/pdh/PerformanceDataMonitor.h
@@ -48,7 +48,7 @@ class PerformanceDataMonitor : public core::Processor {
 
   explicit PerformanceDataMonitor(const std::string& name, utils::Identifier uuid = utils::Identifier())
       : Processor(name, uuid), output_format_(OutputFormat::JSON), pretty_output_(false),
-        decimal_places_(std::nullopt), logger_(logging::LoggerFactory<PerformanceDataMonitor>::getLogger()),
+        decimal_places_(std::nullopt), logger_(core::logging::LoggerFactory<PerformanceDataMonitor>::getLogger()),
         pdh_query_(nullptr), resource_consumption_counters_() {}
 
   ~PerformanceDataMonitor() override;
@@ -95,7 +95,7 @@ class PerformanceDataMonitor : public core::Processor {
   bool pretty_output_;
 
   std::optional<uint8_t> decimal_places_;
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_;
   PDH_HQUERY pdh_query_;
   std::vector<std::unique_ptr<PerformanceDataCounter>> resource_consumption_counters_;
 };
diff --git a/extensions/rocksdb-repos/DatabaseContentRepository.cpp b/extensions/rocksdb-repos/DatabaseContentRepository.cpp
index 53e8d6e..6948284 100644
--- a/extensions/rocksdb-repos/DatabaseContentRepository.cpp
+++ b/extensions/rocksdb-repos/DatabaseContentRepository.cpp
@@ -23,7 +23,6 @@
 #include "DatabaseContentRepository.h"
 #include "encryption/RocksDbEncryptionProvider.h"
 #include "RocksDbStream.h"
-#include "utils/GeneralUtils.h"
 #include "utils/gsl.h"
 #include "Exception.h"
 #include "database/StringAppender.h"
diff --git a/extensions/rocksdb-repos/ProvenanceRepository.h b/extensions/rocksdb-repos/ProvenanceRepository.h
index 745f082..f34c03b 100644
--- a/extensions/rocksdb-repos/ProvenanceRepository.h
+++ b/extensions/rocksdb-repos/ProvenanceRepository.h
@@ -50,22 +50,20 @@ class ProvenanceRepository : public core::Repository, public std::enable_shared_
   /*!
    * Create a new provenance repository
    */
-  ProvenanceRepository(const std::string repo_name = "", std::string directory = PROVENANCE_DIRECTORY, int64_t maxPartitionMillis = MAX_PROVENANCE_ENTRY_LIFE_TIME, int64_t maxPartitionBytes =
-  MAX_PROVENANCE_STORAGE_SIZE,
-                       uint64_t purgePeriod = PROVENANCE_PURGE_PERIOD)
+  explicit ProvenanceRepository(const std::string& repo_name = "", std::string directory = PROVENANCE_DIRECTORY, int64_t maxPartitionMillis = MAX_PROVENANCE_ENTRY_LIFE_TIME,
+      int64_t maxPartitionBytes = MAX_PROVENANCE_STORAGE_SIZE, uint64_t purgePeriod = PROVENANCE_PURGE_PERIOD)
       : core::SerializableComponent(repo_name),
-        Repository(repo_name.length() > 0 ? repo_name : core::getClassName<ProvenanceRepository>(), directory, maxPartitionMillis, maxPartitionBytes, purgePeriod),
-        logger_(logging::LoggerFactory<ProvenanceRepository>::getLogger()) {
-    db_ = NULL;
+        Repository(repo_name.length() > 0 ? repo_name : core::getClassName<ProvenanceRepository>(), directory, maxPartitionMillis, maxPartitionBytes, purgePeriod) {
+    db_ = nullptr;
   }
 
   void printStats();
 
-  virtual bool isNoop() {
+  bool isNoop() override {
     return false;
   }
 
-  void start() {
+  void start() override {
     if (running_)
       return;
     running_ = true;
@@ -74,7 +72,7 @@ class ProvenanceRepository : public core::Repository, public std::enable_shared_
   }
 
   // initialize
-  virtual bool initialize(const std::shared_ptr<org::apache::nifi::minifi::Configure> &config) {
+  bool initialize(const std::shared_ptr<org::apache::nifi::minifi::Configure> &config) override {
     std::string value;
     if (config->get(Configure::nifi_provenance_repository_directory_default, value)) {
       directory_ = value;
@@ -125,13 +123,13 @@ class ProvenanceRepository : public core::Repository, public std::enable_shared_
     return true;
   }
   // Put
-  virtual bool Put(std::string key, const uint8_t *buf, size_t bufLen) {
+  bool Put(std::string key, const uint8_t *buf, size_t bufLen) override {
     // persist to the DB
     rocksdb::Slice value((const char *) buf, bufLen);
     return db_->Put(rocksdb::WriteOptions(), key, value).ok();
   }
 
-  virtual bool MultiPut(const std::vector<std::pair<std::string, std::unique_ptr<minifi::io::BufferStream>>>& data) {
+  bool MultiPut(const std::vector<std::pair<std::string, std::unique_ptr<minifi::io::BufferStream>>>& data) override {
     rocksdb::WriteBatch batch;
     for (const auto &item : data) {
       rocksdb::Slice value((const char *) item.second->getBuffer(), item.second->size());
@@ -143,16 +141,16 @@ class ProvenanceRepository : public core::Repository, public std::enable_shared_
   }
 
   // Delete
-  virtual bool Delete(std::string /*key*/) {
+  bool Delete(std::string /*key*/) override {
     // The repo is cleaned up by itself, there is no need to delete items.
     return true;
   }
   // Get
-  virtual bool Get(const std::string &key, std::string &value) {
+  bool Get(const std::string &key, std::string &value) override {
     return db_->Get(rocksdb::ReadOptions(), key, &value).ok();
   }
 
-  virtual bool Serialize(const std::string &key, const uint8_t *buffer, const size_t bufferSize) {
+  bool Serialize(const std::string &key, const uint8_t *buffer, const size_t bufferSize) override {
     return Put(key, buffer, bufferSize);
   }
 
@@ -170,7 +168,7 @@ class ProvenanceRepository : public core::Repository, public std::enable_shared_
     return true;
   }
 
-  virtual bool DeSerialize(std::vector<std::shared_ptr<core::SerializableComponent>> &records, size_t &max_size, std::function<std::shared_ptr<core::SerializableComponent>()> lambda) {
+  bool DeSerialize(std::vector<std::shared_ptr<core::SerializableComponent>> &records, size_t &max_size, std::function<std::shared_ptr<core::SerializableComponent>()> lambda) override {
     std::unique_ptr<rocksdb::Iterator> it(db_->NewIterator(rocksdb::ReadOptions()));
     size_t requested_batch = max_size;
     max_size = 0;
@@ -201,7 +199,7 @@ class ProvenanceRepository : public core::Repository, public std::enable_shared_
     }
   }
 
-  virtual bool DeSerialize(std::vector<std::shared_ptr<core::SerializableComponent>> &store, size_t &max_size) {
+  bool DeSerialize(std::vector<std::shared_ptr<core::SerializableComponent>> &store, size_t &max_size) override {
     std::unique_ptr<rocksdb::Iterator> it(db_->NewIterator(rocksdb::ReadOptions()));
     max_size = 0;
     for (it->SeekToFirst(); it->Valid(); it->Next()) {
@@ -222,7 +220,7 @@ class ProvenanceRepository : public core::Repository, public std::enable_shared_
     db_.reset();
   }
   // Run function for the thread
-  void run();
+  void run() override;
 
   uint64_t getKeyCount() const {
     std::string key_count;
@@ -238,7 +236,7 @@ class ProvenanceRepository : public core::Repository, public std::enable_shared_
 
  private:
   std::unique_ptr<rocksdb::DB> db_;
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<ProvenanceRepository>::getLogger();
 };
 
 } /* namespace provenance */
diff --git a/extensions/rocksdb-repos/RocksDbStream.cpp b/extensions/rocksdb-repos/RocksDbStream.cpp
index 170c3b1..a6c7104 100644
--- a/extensions/rocksdb-repos/RocksDbStream.cpp
+++ b/extensions/rocksdb-repos/RocksDbStream.cpp
@@ -36,8 +36,7 @@ RocksDbStream::RocksDbStream(std::string path, gsl::not_null<minifi::internal::R
       path_(std::move(path)),
       write_enable_(write_enable),
       db_(db),
-      batch_(batch),
-      logger_(logging::LoggerFactory<RocksDbStream>::getLogger()) {
+      batch_(batch) {
   auto opendb = db_->open();
   exists_ = opendb && opendb->Get(rocksdb::ReadOptions(), path_, &value_).ok();
   offset_ = 0;
diff --git a/extensions/rocksdb-repos/RocksDbStream.h b/extensions/rocksdb-repos/RocksDbStream.h
index 78a5541..c734ed7 100644
--- a/extensions/rocksdb-repos/RocksDbStream.h
+++ b/extensions/rocksdb-repos/RocksDbStream.h
@@ -98,7 +98,7 @@ class RocksDbStream : public io::BaseStream {
   size_t size_;
 
  private:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<RocksDbStream>::getLogger();
 };
 
 } /* namespace io */
diff --git a/extensions/rocksdb-repos/controllers/RocksDbPersistableKeyValueStoreService.cpp b/extensions/rocksdb-repos/controllers/RocksDbPersistableKeyValueStoreService.cpp
index 46322a9..eb8e1c5 100644
--- a/extensions/rocksdb-repos/controllers/RocksDbPersistableKeyValueStoreService.cpp
+++ b/extensions/rocksdb-repos/controllers/RocksDbPersistableKeyValueStoreService.cpp
@@ -36,8 +36,7 @@ core::Property RocksDbPersistableKeyValueStoreService::Directory(
 
 RocksDbPersistableKeyValueStoreService::RocksDbPersistableKeyValueStoreService(const std::string& name, const utils::Identifier& uuid /*= utils::Identifier()*/)
     : PersistableKeyValueStoreService(name, uuid)
-    , AbstractAutoPersistingKeyValueStoreService(name, uuid)
-    , logger_(logging::LoggerFactory<RocksDbPersistableKeyValueStoreService>::getLogger()) {
+    , AbstractAutoPersistingKeyValueStoreService(name, uuid) {
 }
 
 void RocksDbPersistableKeyValueStoreService::initialize() {
diff --git a/extensions/rocksdb-repos/controllers/RocksDbPersistableKeyValueStoreService.h b/extensions/rocksdb-repos/controllers/RocksDbPersistableKeyValueStoreService.h
index d48beac..2e50bb9 100644
--- a/extensions/rocksdb-repos/controllers/RocksDbPersistableKeyValueStoreService.h
+++ b/extensions/rocksdb-repos/controllers/RocksDbPersistableKeyValueStoreService.h
@@ -71,7 +71,7 @@ class RocksDbPersistableKeyValueStoreService : public AbstractAutoPersistingKeyV
   rocksdb::WriteOptions default_write_options;
 
  private:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<RocksDbPersistableKeyValueStoreService>::getLogger();
 };
 
 } /* namespace controllers */
diff --git a/extensions/rocksdb-repos/database/ColumnHandle.cpp b/extensions/rocksdb-repos/database/ColumnHandle.cpp
index fadc70c..5de54a2 100644
--- a/extensions/rocksdb-repos/database/ColumnHandle.cpp
+++ b/extensions/rocksdb-repos/database/ColumnHandle.cpp
@@ -26,7 +26,7 @@ namespace minifi {
 namespace internal {
 
 ColumnHandle::~ColumnHandle() {
-  static auto logger = logging::LoggerFactory<ColumnHandle>::getLogger();
+  static auto logger = core::logging::LoggerFactory<ColumnHandle>::getLogger();
   logger->log_trace("Closing column handle '%s'", handle->GetName());
 }
 
diff --git a/extensions/script/ExecuteScript.h b/extensions/script/ExecuteScript.h
index 09abf5f..00d9ba7 100644
--- a/extensions/script/ExecuteScript.h
+++ b/extensions/script/ExecuteScript.h
@@ -38,9 +38,7 @@ namespace processors {
 class ExecuteScript : public core::Processor {
  public:
   explicit ExecuteScript(const std::string &name, const utils::Identifier &uuid = {})
-      : Processor(name, uuid),
-        logger_(logging::LoggerFactory<ExecuteScript>::getLogger()),
-        script_engine_q_() {
+      : Processor(name, uuid) {
   }
 
   static core::Property ScriptEngine;
@@ -60,7 +58,7 @@ class ExecuteScript : public core::Processor {
                  const std::shared_ptr<core::ProcessSession> &session) override;
 
  private:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<ExecuteScript>::getLogger();
 
   std::string script_engine_;
   std::string script_file_;
diff --git a/extensions/script/python/ExecutePythonProcessor.cpp b/extensions/script/python/ExecutePythonProcessor.cpp
index 79a3667..4dbc65e 100644
--- a/extensions/script/python/ExecutePythonProcessor.cpp
+++ b/extensions/script/python/ExecutePythonProcessor.cpp
@@ -67,7 +67,7 @@ void ExecutePythonProcessor::initialize() {
 }
 
 void ExecutePythonProcessor::onSchedule(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::ProcessSessionFactory>& /*sessionFactory*/) {
-  python_logger_ = logging::LoggerFactory<ExecutePythonProcessor>::getAliasedLogger(getName());
+  python_logger_ = core::logging::LoggerFactory<ExecutePythonProcessor>::getAliasedLogger(getName());
 
   getProperty(ModuleDirectory.getName(), module_directory_);
 
diff --git a/extensions/script/python/ExecutePythonProcessor.h b/extensions/script/python/ExecutePythonProcessor.h
index 1ead86c..bdf40df 100644
--- a/extensions/script/python/ExecutePythonProcessor.h
+++ b/extensions/script/python/ExecutePythonProcessor.h
@@ -47,7 +47,6 @@ class ExecutePythonProcessor : public core::Processor {
   explicit ExecutePythonProcessor(const std::string &name, const utils::Identifier &uuid = {})
       : Processor(name, uuid),
         python_dynamic_(false),
-        logger_(logging::LoggerFactory<ExecutePythonProcessor>::getLogger()),
         script_engine_q_() {
   }
 
@@ -98,8 +97,8 @@ class ExecutePythonProcessor : public core::Processor {
 
   bool python_dynamic_;
 
-  std::shared_ptr<logging::Logger> logger_;
-  std::shared_ptr<logging::Logger> python_logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<ExecutePythonProcessor>::getLogger();
+  std::shared_ptr<core::logging::Logger> python_logger_;
 
   std::string script_to_exec_;
   std::string module_directory_;
diff --git a/extensions/script/python/PythonBindings.h b/extensions/script/python/PythonBindings.h
index 9f6bc27..443e74f 100644
--- a/extensions/script/python/PythonBindings.h
+++ b/extensions/script/python/PythonBindings.h
@@ -36,7 +36,7 @@ PYBIND11_EMBEDDED_MODULE(minifi_native, m) { // NOLINT
   namespace py = pybind11;
   namespace python = org::apache::nifi::minifi::python;
   namespace script = org::apache::nifi::minifi::script;
-  typedef core::logging::Logger Logger;
+  typedef org::apache::nifi::minifi::core::logging::Logger Logger;
 
   py::class_<Logger, std::shared_ptr<Logger>>(m, "Logger")
       .def("error", &Logger::log_error<>)
@@ -70,9 +70,9 @@ PYBIND11_EMBEDDED_MODULE(minifi_native, m) { // NOLINT
       .def("removeAttribute", &script::ScriptFlowFile::removeAttribute)
       .def("setAttribute", &script::ScriptFlowFile::setAttribute);
 
-  py::class_<core::Relationship>(m, "Relationship")
-      .def("getName", &core::Relationship::getName)
-      .def("getDescription", &core::Relationship::getDescription);
+  py::class_<org::apache::nifi::minifi::core::Relationship>(m, "Relationship")
+      .def("getName", &org::apache::nifi::minifi::core::Relationship::getName)
+      .def("getDescription", &org::apache::nifi::minifi::core::Relationship::getDescription);
 
   py::class_<python::PyBaseStream, std::shared_ptr<python::PyBaseStream>>(m, "BaseStream")
       .def("read", static_cast<py::bytes (python::PyBaseStream::*)()>(&python::PyBaseStream::read))
diff --git a/extensions/script/python/PythonCreator.h b/extensions/script/python/PythonCreator.h
index 24d0abb..df3bd87 100644
--- a/extensions/script/python/PythonCreator.h
+++ b/extensions/script/python/PythonCreator.h
@@ -45,8 +45,7 @@ namespace python {
 class PythonCreator : public minifi::core::CoreComponent {
  public:
   explicit PythonCreator(const std::string &name, const utils::Identifier &uuid = {})
-      : minifi::core::CoreComponent(name, uuid),
-        logger_(logging::LoggerFactory<PythonCreator>::getLogger()) {
+      : minifi::core::CoreComponent(name, uuid) {
   }
 
   ~PythonCreator() override {
@@ -162,7 +161,7 @@ class PythonCreator : public minifi::core::CoreComponent {
   std::vector<std::string> registered_classes_;
   std::vector<std::string> classpaths_;
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<PythonCreator>::getLogger();
 };
 
 } /* namespace python */
diff --git a/extensions/script/python/PythonObjectFactory.h b/extensions/script/python/PythonObjectFactory.h
index 3a2ff26..1c4ac42 100644
--- a/extensions/script/python/PythonObjectFactory.h
+++ b/extensions/script/python/PythonObjectFactory.h
@@ -28,39 +28,39 @@
 
 #pragma GCC visibility push(hidden)
 
-class PythonObjectFactory : public core::DefautObjectFactory<minifi::python::processors::ExecutePythonProcessor> {
+class PythonObjectFactory : public org::apache::nifi::minifi::core::DefautObjectFactory<org::apache::nifi::minifi::python::processors::ExecutePythonProcessor> {
  public:
   explicit PythonObjectFactory(const std::string &file, const std::string &name)
       : file_(file),
         name_(name) {
   }
 
-  std::shared_ptr<core::CoreComponent> create(const std::string &name) override {
-    auto ptr = std::static_pointer_cast<minifi::python::processors::ExecutePythonProcessor>(DefautObjectFactory::create(name));
+  std::shared_ptr<org::apache::nifi::minifi::core::CoreComponent> create(const std::string &name) override {
+    auto ptr = std::static_pointer_cast<org::apache::nifi::minifi::python::processors::ExecutePythonProcessor>(DefautObjectFactory::create(name));
     ptr->initialize();
-    ptr->setProperty(minifi::python::processors::ExecutePythonProcessor::ScriptFile, file_);
-    return std::static_pointer_cast<core::CoreComponent>(ptr);
+    ptr->setProperty(org::apache::nifi::minifi::python::processors::ExecutePythonProcessor::ScriptFile, file_);
+    return std::static_pointer_cast<org::apache::nifi::minifi::core::CoreComponent>(ptr);
   }
 
-  std::shared_ptr<core::CoreComponent> create(const std::string &name, const utils::Identifier &uuid) override {
-    auto ptr = std::static_pointer_cast<minifi::python::processors::ExecutePythonProcessor>(DefautObjectFactory::create(name, uuid));
+  std::shared_ptr<org::apache::nifi::minifi::core::CoreComponent> create(const std::string &name, const org::apache::nifi::minifi::utils::Identifier &uuid) override {
+    auto ptr = std::static_pointer_cast<org::apache::nifi::minifi::python::processors::ExecutePythonProcessor>(DefautObjectFactory::create(name, uuid));
     ptr->initialize();
-    ptr->setProperty(minifi::python::processors::ExecutePythonProcessor::ScriptFile, file_);
-    return std::static_pointer_cast<core::CoreComponent>(ptr);
+    ptr->setProperty(org::apache::nifi::minifi::python::processors::ExecutePythonProcessor::ScriptFile, file_);
+    return std::static_pointer_cast<org::apache::nifi::minifi::core::CoreComponent>(ptr);
   }
 
-  core::CoreComponent* createRaw(const std::string &name) override {
-    auto ptr = dynamic_cast<minifi::python::processors::ExecutePythonProcessor*>(DefautObjectFactory::createRaw(name));
+  org::apache::nifi::minifi::core::CoreComponent* createRaw(const std::string &name) override {
+    auto ptr = dynamic_cast<org::apache::nifi::minifi::python::processors::ExecutePythonProcessor*>(DefautObjectFactory::createRaw(name));
     ptr->initialize();
-    ptr->setProperty(minifi::python::processors::ExecutePythonProcessor::ScriptFile, file_);
-    return dynamic_cast<core::CoreComponent*>(ptr);
+    ptr->setProperty(org::apache::nifi::minifi::python::processors::ExecutePythonProcessor::ScriptFile, file_);
+    return dynamic_cast<org::apache::nifi::minifi::core::CoreComponent*>(ptr);
   }
 
-  core::CoreComponent* createRaw(const std::string &name, const utils::Identifier &uuid) override {
-    auto ptr = dynamic_cast<minifi::python::processors::ExecutePythonProcessor*>(DefautObjectFactory::createRaw(name, uuid));
+  org::apache::nifi::minifi::core::CoreComponent* createRaw(const std::string &name, const org::apache::nifi::minifi::utils::Identifier &uuid) override {
+    auto ptr = dynamic_cast<org::apache::nifi::minifi::python::processors::ExecutePythonProcessor*>(DefautObjectFactory::createRaw(name, uuid));
     ptr->initialize();
-    ptr->setProperty(minifi::python::processors::ExecutePythonProcessor::ScriptFile, file_);
-    return dynamic_cast<core::CoreComponent*>(ptr);
+    ptr->setProperty(org::apache::nifi::minifi::python::processors::ExecutePythonProcessor::ScriptFile, file_);
+    return dynamic_cast<org::apache::nifi::minifi::core::CoreComponent*>(ptr);
   }
 
  private:
diff --git a/extensions/script/pythonloader/PyProcLoader.cpp b/extensions/script/pythonloader/PyProcLoader.cpp
index b2c0802..e17bbbd 100644
--- a/extensions/script/pythonloader/PyProcLoader.cpp
+++ b/extensions/script/pythonloader/PyProcLoader.cpp
@@ -19,6 +19,8 @@
 #include "PythonCreator.h"
 #include "PythonBindings.h"
 
+namespace minifi = org::apache::nifi::minifi;
+
 static minifi::python::PythonCreator& getPythonCreator() {
   static minifi::python::PythonCreator instance("PythonCreator");
   return instance;
diff --git a/extensions/sensors/GetEnvironmentalSensors.h b/extensions/sensors/GetEnvironmentalSensors.h
index 437e41c..9df17db 100644
--- a/extensions/sensors/GetEnvironmentalSensors.h
+++ b/extensions/sensors/GetEnvironmentalSensors.h
@@ -46,10 +46,7 @@ class GetEnvironmentalSensors : public SensorBase {
    * Create a new processor
    */
   explicit GetEnvironmentalSensors(const std::string& name, const utils::Identifier& uuid = {})
-      : SensorBase(name, uuid),
-        humidity_sensor_(nullptr),
-        pressure_sensor_(nullptr),
-        logger_(logging::LoggerFactory<GetEnvironmentalSensors>::getLogger()) {
+      : SensorBase(name, uuid) {
   }
   // Destructor
   ~GetEnvironmentalSensors() override;
@@ -66,9 +63,9 @@ class GetEnvironmentalSensors : public SensorBase {
   void notifyStop() override;
 
  private:
-  RTHumidity *humidity_sensor_;
-  RTPressure *pressure_sensor_;
-  std::shared_ptr<logging::Logger> logger_;
+  RTHumidity *humidity_sensor_ = nullptr;
+  RTPressure *pressure_sensor_ = nullptr;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<GetEnvironmentalSensors>::getLogger();
   static std::shared_ptr<utils::IdGenerator> id_generator_;
 };
 
diff --git a/extensions/sensors/GetMovementSensors.h b/extensions/sensors/GetMovementSensors.h
index 80f92c1..d7d54d5 100644
--- a/extensions/sensors/GetMovementSensors.h
+++ b/extensions/sensors/GetMovementSensors.h
@@ -46,8 +46,7 @@ class GetMovementSensors : public SensorBase {
    * Create a new processor
    */
   explicit GetMovementSensors(const std::string& name, const utils::Identifier& uuid = {})
-      : SensorBase(name, uuid),
-        logger_(logging::LoggerFactory<GetMovementSensors>::getLogger()) {
+      : SensorBase(name, uuid) {
   }
   // Destructor
   virtual ~GetMovementSensors();
@@ -60,7 +59,7 @@ class GetMovementSensors : public SensorBase {
   void initialize() override;
 
  private:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<GetMovementSensors>::getLogger();
 };
 
 } /* namespace processors */
diff --git a/extensions/sensors/SensorBase.h b/extensions/sensors/SensorBase.h
index d050174..6a889b7 100644
--- a/extensions/sensors/SensorBase.h
+++ b/extensions/sensors/SensorBase.h
@@ -41,8 +41,7 @@ class SensorBase : public core::Processor {
    * Create a new processor
    */
   explicit SensorBase(const std::string& name, const utils::Identifier& uuid = {})
-      : Processor(name, uuid),
-        logger_(logging::LoggerFactory<SensorBase>::getLogger()) {
+    : Processor(name, uuid) {
   }
   // Destructor
   ~SensorBase() override;
@@ -70,7 +69,7 @@ class SensorBase : public core::Processor {
  protected:
   std::optional<RTIMUSettings> settings_;
   std::unique_ptr<RTIMU> imu_;
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<SensorBase>::getLogger();
 };
 
 } /* namespace processors */
diff --git a/extensions/sftp/client/SFTPClient.cpp b/extensions/sftp/client/SFTPClient.cpp
index b94047a..172a153 100644
--- a/extensions/sftp/client/SFTPClient.cpp
+++ b/extensions/sftp/client/SFTPClient.cpp
@@ -138,7 +138,7 @@ LastSFTPError::operator SFTPError() const {
 
 
 SFTPClient::SFTPClient(const std::string &hostname, uint16_t port, const std::string& username)
-    : logger_(logging::LoggerFactory<SFTPClient>::getLogger()),
+    : logger_(core::logging::LoggerFactory<SFTPClient>::getLogger()),
       hostname_(hostname),
       port_(port),
       username_(username),
diff --git a/extensions/sftp/client/SFTPClient.h b/extensions/sftp/client/SFTPClient.h
index c07bdd4..6305380 100644
--- a/extensions/sftp/client/SFTPClient.h
+++ b/extensions/sftp/client/SFTPClient.h
@@ -163,7 +163,7 @@ class SFTPClient {
    */
   static constexpr size_t MAX_BUFFER_SIZE = 30000U;
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_;
 
   const std::string hostname_;
   const uint16_t port_;
diff --git a/extensions/sftp/processors/FetchSFTP.cpp b/extensions/sftp/processors/FetchSFTP.cpp
index 5326b9d..423fbce 100644
--- a/extensions/sftp/processors/FetchSFTP.cpp
+++ b/extensions/sftp/processors/FetchSFTP.cpp
@@ -129,7 +129,7 @@ FetchSFTP::FetchSFTP(const std::string& name, const utils::Identifier& uuid /*=
     : SFTPProcessorBase(name, uuid),
       create_directory_(false),
       disable_directory_listing_(false) {
-  logger_ = logging::LoggerFactory<FetchSFTP>::getLogger();
+  logger_ = core::logging::LoggerFactory<FetchSFTP>::getLogger();
 }
 
 FetchSFTP::~FetchSFTP() = default;
@@ -160,8 +160,7 @@ void FetchSFTP::onSchedule(const std::shared_ptr<core::ProcessContext> &context,
 
 FetchSFTP::WriteCallback::WriteCallback(const std::string& remote_file,
                                     utils::SFTPClient& client)
-    : logger_(logging::LoggerFactory<FetchSFTP::WriteCallback>::getLogger())
-    , remote_file_(remote_file)
+    : remote_file_(remote_file)
     , client_(client) {
 }
 
diff --git a/extensions/sftp/processors/FetchSFTP.h b/extensions/sftp/processors/FetchSFTP.h
index d8dce60..5270d4b 100644
--- a/extensions/sftp/processors/FetchSFTP.h
+++ b/extensions/sftp/processors/FetchSFTP.h
@@ -49,7 +49,7 @@ class FetchSFTP : public SFTPProcessorBase {
    * Create a new processor
    */
   explicit FetchSFTP(const std::string& name, const utils::Identifier& uuid = {});
-  virtual ~FetchSFTP();
+  ~FetchSFTP() override;
 
   // Supported Properties
   static core::Property RemoteFile;
@@ -78,11 +78,11 @@ class FetchSFTP : public SFTPProcessorBase {
    public:
     WriteCallback(const std::string& remote_file,
                  utils::SFTPClient& client);
-    ~WriteCallback();
+    ~WriteCallback() override;
     int64_t process(const std::shared_ptr<io::BaseStream>& stream) override;
 
    private:
-    std::shared_ptr<logging::Logger> logger_;
+    std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<FetchSFTP::WriteCallback>::getLogger();
     const std::string remote_file_;
     utils::SFTPClient& client_;
   };
diff --git a/extensions/sftp/processors/ListSFTP.cpp b/extensions/sftp/processors/ListSFTP.cpp
index 9c4f91a..de482dc 100644
--- a/extensions/sftp/processors/ListSFTP.cpp
+++ b/extensions/sftp/processors/ListSFTP.cpp
@@ -203,7 +203,7 @@ ListSFTP::ListSFTP(const std::string& name, const utils::Identifier& uuid /*= ut
     , last_listed_latest_entry_timestamp_(0U)
     , last_processed_latest_entry_timestamp_(0U)
     , initial_listing_complete_(false) {
-  logger_ = logging::LoggerFactory<ListSFTP>::getLogger();
+  logger_ = core::logging::LoggerFactory<ListSFTP>::getLogger();
 }
 
 ListSFTP::~ListSFTP() = default;
diff --git a/extensions/sftp/processors/PutSFTP.cpp b/extensions/sftp/processors/PutSFTP.cpp
index a794dbe..5c6e958 100644
--- a/extensions/sftp/processors/PutSFTP.cpp
+++ b/extensions/sftp/processors/PutSFTP.cpp
@@ -177,7 +177,7 @@ PutSFTP::PutSFTP(const std::string& name, const utils::Identifier& uuid /*= util
     batch_size_(0),
     reject_zero_byte_(false),
     dot_rename_(false) {
-  logger_ = logging::LoggerFactory<PutSFTP>::getLogger();
+  logger_ = core::logging::LoggerFactory<PutSFTP>::getLogger();
 }
 
 PutSFTP::~PutSFTP() = default;
@@ -215,8 +215,7 @@ void PutSFTP::onSchedule(const std::shared_ptr<core::ProcessContext> &context, c
 PutSFTP::ReadCallback::ReadCallback(const std::string& target_path,
                                     utils::SFTPClient& client,
                                     const std::string& conflict_resolution)
-    : logger_(logging::LoggerFactory<PutSFTP::ReadCallback>::getLogger())
-    , target_path_(target_path)
+    : target_path_(target_path)
     , client_(client)
     , conflict_resolution_(conflict_resolution) {
 }
diff --git a/extensions/sftp/processors/PutSFTP.h b/extensions/sftp/processors/PutSFTP.h
index 4aceeca..9f6ff3c 100644
--- a/extensions/sftp/processors/PutSFTP.h
+++ b/extensions/sftp/processors/PutSFTP.h
@@ -59,7 +59,7 @@ class PutSFTP : public SFTPProcessorBase {
    * Create a new processor
    */
   explicit PutSFTP(const std::string& name, const utils::Identifier& uuid = {});
-  virtual ~PutSFTP();
+  ~PutSFTP() override;
 
   // Supported Properties
   static core::Property RemotePath;
@@ -94,11 +94,11 @@ class PutSFTP : public SFTPProcessorBase {
     ReadCallback(const std::string& target_path,
         utils::SFTPClient& client,
         const std::string& conflict_resolution);
-    ~ReadCallback();
+    ~ReadCallback() override;
     int64_t process(const std::shared_ptr<io::BaseStream>& stream) override;
 
    private:
-    std::shared_ptr<logging::Logger> logger_;
+    std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<PutSFTP::ReadCallback>::getLogger();
     const std::string target_path_;
     utils::SFTPClient& client_;
     const std::string conflict_resolution_;
diff --git a/extensions/sftp/processors/SFTPProcessorBase.h b/extensions/sftp/processors/SFTPProcessorBase.h
index e738589..cb1a7a6 100644
--- a/extensions/sftp/processors/SFTPProcessorBase.h
+++ b/extensions/sftp/processors/SFTPProcessorBase.h
@@ -71,7 +71,7 @@ class SFTPProcessorBase : public core::Processor {
   void notifyStop() override;
 
  protected:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_;
 
   int64_t connection_timeout_;
   int64_t data_timeout_;
diff --git a/extensions/sftp/tests/FetchSFTPTests.cpp b/extensions/sftp/tests/FetchSFTPTests.cpp
index d8cee1b..33d1d6e 100644
--- a/extensions/sftp/tests/FetchSFTPTests.cpp
+++ b/extensions/sftp/tests/FetchSFTPTests.cpp
@@ -65,11 +65,11 @@ class FetchSFTPTestsFixture {
     LogTestController::getInstance().setDebug<minifi::core::ProcessGroup>();
     LogTestController::getInstance().setDebug<minifi::core::Processor>();
     LogTestController::getInstance().setTrace<minifi::core::ProcessSession>();
-    LogTestController::getInstance().setDebug<processors::GenerateFlowFile>();
+    LogTestController::getInstance().setDebug<minifi::processors::GenerateFlowFile>();
     LogTestController::getInstance().setTrace<minifi::utils::SFTPClient>();
-    LogTestController::getInstance().setTrace<processors::FetchSFTP>();
-    LogTestController::getInstance().setTrace<processors::PutFile>();
-    LogTestController::getInstance().setDebug<processors::LogAttribute>();
+    LogTestController::getInstance().setTrace<minifi::processors::FetchSFTP>();
+    LogTestController::getInstance().setTrace<minifi::processors::PutFile>();
+    LogTestController::getInstance().setDebug<minifi::processors::LogAttribute>();
     LogTestController::getInstance().setDebug<SFTPTestServer>();
 
     REQUIRE_FALSE(src_dir.empty());
@@ -113,7 +113,7 @@ class FetchSFTPTestsFixture {
     plan->setProperty(fetch_sftp, "Port", std::to_string(sftp_server->getPort()));
     plan->setProperty(fetch_sftp, "Username", "nifiuser");
     plan->setProperty(fetch_sftp, "Password", "nifipassword");
-    plan->setProperty(fetch_sftp, "Completion Strategy", processors::FetchSFTP::COMPLETION_STRATEGY_NONE);
+    plan->setProperty(fetch_sftp, "Completion Strategy", minifi::processors::FetchSFTP::COMPLETION_STRATEGY_NONE);
     plan->setProperty(fetch_sftp, "Connection Timeout", "30 sec");
     plan->setProperty(fetch_sftp, "Data Timeout", "30 sec");
     plan->setProperty(fetch_sftp, "Strict Host Key Checking", "false");
@@ -122,7 +122,7 @@ class FetchSFTPTestsFixture {
 
     // Configure PutFile processor
     plan->setProperty(put_file, "Directory", dst_dir + "/${path}");
-    plan->setProperty(put_file, "Conflict Resolution Strategy", processors::PutFile::CONFLICT_RESOLUTION_STRATEGY_FAIL);
+    plan->setProperty(put_file, "Conflict Resolution Strategy", minifi::processors::PutFile::CONFLICT_RESOLUTION_STRATEGY_FAIL);
     plan->setProperty(put_file, "Create Missing Directories", "true");
   }
 
@@ -283,7 +283,7 @@ TEST_CASE_METHOD(FetchSFTPTestsFixture, "FetchSFTP fetch connection error", "[Fe
 
 TEST_CASE_METHOD(FetchSFTPTestsFixture, "FetchSFTP Completion Strategy Delete File success", "[FetchSFTP][completion-strategy]") {
   plan->setProperty(fetch_sftp, "Remote File", "nifi_test/tstFile.ext");
-  plan->setProperty(fetch_sftp, "Completion Strategy", processors::FetchSFTP::COMPLETION_STRATEGY_DELETE_FILE);
+  plan->setProperty(fetch_sftp, "Completion Strategy", minifi::processors::FetchSFTP::COMPLETION_STRATEGY_DELETE_FILE);
 
   createFile("nifi_test/tstFile.ext", "Test content 1");
 
@@ -306,7 +306,7 @@ TEST_CASE_METHOD(FetchSFTPTestsFixture, "FetchSFTP Completion Strategy Delete Fi
     return;
   }
   plan->setProperty(fetch_sftp, "Remote File", "nifi_test/tstFile.ext");
-  plan->setProperty(fetch_sftp, "Completion Strategy", processors::FetchSFTP::COMPLETION_STRATEGY_DELETE_FILE);
+  plan->setProperty(fetch_sftp, "Completion Strategy", minifi::processors::FetchSFTP::COMPLETION_STRATEGY_DELETE_FILE);
 
   createFile("nifi_test/tstFile.ext", "Test content 1");
   /* By making the parent directory non-writable we make it impossible do delete the source file */
@@ -332,7 +332,7 @@ TEST_CASE_METHOD(FetchSFTPTestsFixture, "FetchSFTP Completion Strategy Delete Fi
 
 TEST_CASE_METHOD(FetchSFTPTestsFixture, "FetchSFTP Completion Strategy Move File success", "[FetchSFTP][completion-strategy]") {
   plan->setProperty(fetch_sftp, "Remote File", "nifi_test/tstFile.ext");
-  plan->setProperty(fetch_sftp, "Completion Strategy", processors::FetchSFTP::COMPLETION_STRATEGY_MOVE_FILE);
+  plan->setProperty(fetch_sftp, "Completion Strategy", minifi::processors::FetchSFTP::COMPLETION_STRATEGY_MOVE_FILE);
   plan->setProperty(fetch_sftp, "Move Destination Directory", "nifi_done/");
   plan->setProperty(fetch_sftp, "Create Directory", "true");
 
@@ -353,7 +353,7 @@ TEST_CASE_METHOD(FetchSFTPTestsFixture, "FetchSFTP Completion Strategy Move File
 
 TEST_CASE_METHOD(FetchSFTPTestsFixture, "FetchSFTP Completion Strategy Move File fail", "[FetchSFTP][completion-strategy]") {
   plan->setProperty(fetch_sftp, "Remote File", "nifi_test/tstFile.ext");
-  plan->setProperty(fetch_sftp, "Completion Strategy", processors::FetchSFTP::COMPLETION_STRATEGY_MOVE_FILE);
+  plan->setProperty(fetch_sftp, "Completion Strategy", minifi::processors::FetchSFTP::COMPLETION_STRATEGY_MOVE_FILE);
   plan->setProperty(fetch_sftp, "Move Destination Directory", "nifi_done/");
 
   /* The completion strategy should fail because the target directory does not exist and we don't create it */
@@ -398,7 +398,7 @@ TEST_CASE_METHOD(FetchSFTPTestsFixture, "FetchSFTP expression language test", "[
   plan->setProperty(fetch_sftp, "Remote File", "${'attr_Remote File'}");
   plan->setProperty(fetch_sftp, "Move Destination Directory", "${'attr_Move Destination Directory'}");
 
-  plan->setProperty(fetch_sftp, "Completion Strategy", processors::FetchSFTP::COMPLETION_STRATEGY_MOVE_FILE);
+  plan->setProperty(fetch_sftp, "Completion Strategy", minifi::processors::FetchSFTP::COMPLETION_STRATEGY_MOVE_FILE);
   plan->setProperty(fetch_sftp, "Create Directory", "true");
 
   createFile("nifi_test/tstFile.ext", "Test content 1");
diff --git a/extensions/sftp/tests/ListSFTPTests.cpp b/extensions/sftp/tests/ListSFTPTests.cpp
index ebeac3d..ec373f3 100644
--- a/extensions/sftp/tests/ListSFTPTests.cpp
+++ b/extensions/sftp/tests/ListSFTPTests.cpp
@@ -65,10 +65,10 @@ class ListSFTPTestsFixture {
     LogTestController::getInstance().setDebug<minifi::core::ProcessGroup>();
     LogTestController::getInstance().setDebug<minifi::core::Processor>();
     LogTestController::getInstance().setTrace<minifi::core::ProcessSession>();
-    LogTestController::getInstance().setDebug<processors::GenerateFlowFile>();
+    LogTestController::getInstance().setDebug<minifi::processors::GenerateFlowFile>();
     LogTestController::getInstance().setTrace<minifi::utils::SFTPClient>();
-    LogTestController::getInstance().setTrace<processors::ListSFTP>();
-    LogTestController::getInstance().setDebug<processors::LogAttribute>();
+    LogTestController::getInstance().setTrace<minifi::processors::ListSFTP>();
+    LogTestController::getInstance().setDebug<minifi::processors::LogAttribute>();
     LogTestController::getInstance().setDebug<SFTPTestServer>();
 
     REQUIRE_FALSE(src_dir.empty());
@@ -110,7 +110,7 @@ class ListSFTPTestsFixture {
                                        true);
 
     // Configure ListSFTP processor
-    plan->setProperty(list_sftp, "Listing Strategy", processors::ListSFTP::LISTING_STRATEGY_TRACKING_TIMESTAMPS);
+    plan->setProperty(list_sftp, "Listing Strategy", minifi::processors::ListSFTP::LISTING_STRATEGY_TRACKING_TIMESTAMPS);
     plan->setProperty(list_sftp, "Hostname", "localhost");
     plan->setProperty(list_sftp, "Port", std::to_string(sftp_server->getPort()));
     plan->setProperty(list_sftp, "Username", "nifiuser");
@@ -122,7 +122,7 @@ class ListSFTPTestsFixture {
     plan->setProperty(list_sftp, "Connection Timeout", "30 sec");
     plan->setProperty(list_sftp, "Data Timeout", "30 sec");
     plan->setProperty(list_sftp, "Send Keep Alive On Timeout", "true");
-    plan->setProperty(list_sftp, "Target System Timestamp Precision", processors::ListSFTP::TARGET_SYSTEM_TIMESTAMP_PRECISION_AUTO_DETECT);
+    plan->setProperty(list_sftp, "Target System Timestamp Precision", minifi::processors::ListSFTP::TARGET_SYSTEM_TIMESTAMP_PRECISION_AUTO_DETECT);
     plan->setProperty(list_sftp, "Minimum File Age", "0 sec");
     plan->setProperty(list_sftp, "Minimum File Size", "0 B");
     plan->setProperty(list_sftp, "Target System Timestamp Precision", "Seconds");
@@ -970,7 +970,7 @@ TEST_CASE_METHOD(ListSFTPTestsFixture, "ListSFTP Tracking Entities changed confi
 
 TEST_CASE_METHOD(ListSFTPTestsFixture, "ListSFTP Tracking Entities Initial Listing Target Tracking Time Window entity outside window", "[ListSFTP][tracking-entities]") {
   plan->setProperty(list_sftp, "Listing Strategy", "Tracking Entities");
-  plan->setProperty(list_sftp, "Entity Tracking Initial Listing Target", processors::ListSFTP::ENTITY_TRACKING_INITIAL_LISTING_TARGET_TRACKING_TIME_WINDOW);
+  plan->setProperty(list_sftp, "Entity Tracking Initial Listing Target", minifi::processors::ListSFTP::ENTITY_TRACKING_INITIAL_LISTING_TARGET_TRACKING_TIME_WINDOW);
   plan->setProperty(list_sftp, "Entity Tracking Time Window", "10 minutes");
 
   createFileWithModificationTimeDiff("nifi_test/file1.ext", "Test content 1", -20*60 /* 20 minutes ago */);
@@ -983,7 +983,7 @@ TEST_CASE_METHOD(ListSFTPTestsFixture, "ListSFTP Tracking Entities Initial Listi
 
 TEST_CASE_METHOD(ListSFTPTestsFixture, "ListSFTP Tracking Entities Initial Listing Target Tracking Time Window entity inside window", "[ListSFTP][tracking-entities]") {
   plan->setProperty(list_sftp, "Listing Strategy", "Tracking Entities");
-  plan->setProperty(list_sftp, "Entity Tracking Initial Listing Target", processors::ListSFTP::ENTITY_TRACKING_INITIAL_LISTING_TARGET_TRACKING_TIME_WINDOW);
+  plan->setProperty(list_sftp, "Entity Tracking Initial Listing Target", minifi::processors::ListSFTP::ENTITY_TRACKING_INITIAL_LISTING_TARGET_TRACKING_TIME_WINDOW);
   plan->setProperty(list_sftp, "Entity Tracking Time Window", "10 minutes");
 
   createFileWithModificationTimeDiff("nifi_test/file1.ext", "Test content 1");
diff --git a/extensions/sftp/tests/ListThenFetchSFTPTests.cpp b/extensions/sftp/tests/ListThenFetchSFTPTests.cpp
index e167c32..d9cdc4f 100644
--- a/extensions/sftp/tests/ListThenFetchSFTPTests.cpp
+++ b/extensions/sftp/tests/ListThenFetchSFTPTests.cpp
@@ -63,12 +63,12 @@ class ListThenFetchSFTPTestsFixture {
     LogTestController::getInstance().setDebug<minifi::core::ProcessGroup>();
     LogTestController::getInstance().setDebug<minifi::core::Processor>();
     LogTestController::getInstance().setTrace<minifi::core::ProcessSession>();
-    LogTestController::getInstance().setDebug<processors::GenerateFlowFile>();
+    LogTestController::getInstance().setDebug<minifi::processors::GenerateFlowFile>();
     LogTestController::getInstance().setTrace<minifi::utils::SFTPClient>();
-    LogTestController::getInstance().setTrace<processors::ListSFTP>();
-    LogTestController::getInstance().setTrace<processors::FetchSFTP>();
-    LogTestController::getInstance().setTrace<processors::PutFile>();
-    LogTestController::getInstance().setDebug<processors::LogAttribute>();
+    LogTestController::getInstance().setTrace<minifi::processors::ListSFTP>();
+    LogTestController::getInstance().setTrace<minifi::processors::FetchSFTP>();
+    LogTestController::getInstance().setTrace<minifi::processors::PutFile>();
+    LogTestController::getInstance().setDebug<minifi::processors::LogAttribute>();
     LogTestController::getInstance().setDebug<SFTPTestServer>();
 
     REQUIRE_FALSE(src_dir.empty());
@@ -101,7 +101,7 @@ class ListThenFetchSFTPTestsFixture {
          true);
 
     // Configure ListSFTP processor
-    plan->setProperty(list_sftp, "Listing Strategy", processors::ListSFTP::LISTING_STRATEGY_TRACKING_TIMESTAMPS);
+    plan->setProperty(list_sftp, "Listing Strategy", minifi::processors::ListSFTP::LISTING_STRATEGY_TRACKING_TIMESTAMPS);
     plan->setProperty(list_sftp, "Hostname", "localhost");
     plan->setProperty(list_sftp, "Port", std::to_string(sftp_server->getPort()));
     plan->setProperty(list_sftp, "Username", "nifiuser");
@@ -113,7 +113,7 @@ class ListThenFetchSFTPTestsFixture {
     plan->setProperty(list_sftp, "Connection Timeout", "30 sec");
     plan->setProperty(list_sftp, "Data Timeout", "30 sec");
     plan->setProperty(list_sftp, "Send Keep Alive On Timeout", "true");
-    plan->setProperty(list_sftp, "Target System Timestamp Precision", processors::ListSFTP::TARGET_SYSTEM_TIMESTAMP_PRECISION_AUTO_DETECT);
+    plan->setProperty(list_sftp, "Target System Timestamp Precision", minifi::processors::ListSFTP::TARGET_SYSTEM_TIMESTAMP_PRECISION_AUTO_DETECT);
     plan->setProperty(list_sftp, "Minimum File Age", "0 sec");
     plan->setProperty(list_sftp, "Minimum File Size", "0 B");
     plan->setProperty(list_sftp, "Target System Timestamp Precision", "Seconds");
@@ -125,7 +125,7 @@ class ListThenFetchSFTPTestsFixture {
     plan->setProperty(fetch_sftp, "Port", std::to_string(sftp_server->getPort()));
     plan->setProperty(fetch_sftp, "Username", "nifiuser");
     plan->setProperty(fetch_sftp, "Password", "nifipassword");
-    plan->setProperty(fetch_sftp, "Completion Strategy", processors::FetchSFTP::COMPLETION_STRATEGY_NONE);
+    plan->setProperty(fetch_sftp, "Completion Strategy", minifi::processors::FetchSFTP::COMPLETION_STRATEGY_NONE);
     plan->setProperty(fetch_sftp, "Connection Timeout", "30 sec");
     plan->setProperty(fetch_sftp, "Data Timeout", "30 sec");
     plan->setProperty(fetch_sftp, "Strict Host Key Checking", "false");
@@ -138,7 +138,7 @@ class ListThenFetchSFTPTestsFixture {
 
     // Configure PutFile processor
     plan->setProperty(put_file, "Directory", dst_dir + "/${path}");
-    plan->setProperty(put_file, "Conflict Resolution Strategy", processors::PutFile::CONFLICT_RESOLUTION_STRATEGY_FAIL);
+    plan->setProperty(put_file, "Conflict Resolution Strategy", minifi::processors::PutFile::CONFLICT_RESOLUTION_STRATEGY_FAIL);
     plan->setProperty(put_file, "Create Missing Directories", "true");
   }
 
@@ -154,7 +154,7 @@ class ListThenFetchSFTPTestsFixture {
     auto full_path = ss.str();
     std::deque<std::string> parent_dirs;
     std::string parent_dir = full_path;
-    while ((parent_dir = utils::file::FileUtils::get_parent_path(parent_dir)) != "") {
+    while (!(parent_dir = utils::file::FileUtils::get_parent_path(parent_dir)).empty()) {
       parent_dirs.push_front(parent_dir);
     }
     for (const auto& dir : parent_dirs) {
diff --git a/extensions/sftp/tests/PutSFTPTests.cpp b/extensions/sftp/tests/PutSFTPTests.cpp
index 8309d98..6231c5e 100644
--- a/extensions/sftp/tests/PutSFTPTests.cpp
+++ b/extensions/sftp/tests/PutSFTPTests.cpp
@@ -68,11 +68,11 @@ class PutSFTPTestsFixture {
     LogTestController::getInstance().setDebug<minifi::core::ProcessGroup>();
     LogTestController::getInstance().setDebug<minifi::core::Processor>();
     LogTestController::getInstance().setTrace<minifi::core::ProcessSession>();
-    LogTestController::getInstance().setDebug<processors::GetFile>();
+    LogTestController::getInstance().setDebug<minifi::processors::GetFile>();
     LogTestController::getInstance().setTrace<minifi::utils::SFTPClient>();
-    LogTestController::getInstance().setTrace<processors::PutSFTP>();
-    LogTestController::getInstance().setTrace<processors::ExtractText>();
-    LogTestController::getInstance().setDebug<processors::LogAttribute>();
+    LogTestController::getInstance().setTrace<minifi::processors::PutSFTP>();
+    LogTestController::getInstance().setTrace<minifi::processors::ExtractText>();
+    LogTestController::getInstance().setDebug<minifi::processors::LogAttribute>();
     LogTestController::getInstance().setDebug<SFTPTestServer>();
 
     REQUIRE_FALSE(src_dir.empty());
@@ -112,7 +112,7 @@ class PutSFTPTestsFixture {
     plan->setProperty(put, "Batch Size", "2");
     plan->setProperty(put, "Connection Timeout", "30 sec");
     plan->setProperty(put, "Data Timeout", "30 sec");
-    plan->setProperty(put, "Conflict Resolution", processors::PutSFTP::CONFLICT_RESOLUTION_RENAME);
+    plan->setProperty(put, "Conflict Resolution", minifi::processors::PutSFTP::CONFLICT_RESOLUTION_RENAME);
     plan->setProperty(put, "Strict Host Key Checking", "false");
     plan->setProperty(put, "Send Keep Alive On Timeout", "true");
     plan->setProperty(put, "Use Compression", "false");
@@ -357,7 +357,7 @@ TEST_CASE_METHOD(PutSFTPTestsFixture, "PutSFTP host key checking mismatch strict
 }
 
 TEST_CASE_METHOD(PutSFTPTestsFixture, "PutSFTP conflict resolution rename", "[PutSFTP][conflict-resolution]") {
-  plan->setProperty(put, "Conflict Resolution", processors::PutSFTP::CONFLICT_RESOLUTION_RENAME);
+  plan->setProperty(put, "Conflict Resolution", minifi::processors::PutSFTP::CONFLICT_RESOLUTION_RENAME);
 
   createFile(src_dir, "tstFile1.ext", "content 1");
   REQUIRE(0 == utils::file::FileUtils::create_dir(utils::file::FileUtils::concat_path(dst_dir, "vfs/nifi_test")));
@@ -371,7 +371,7 @@ TEST_CASE_METHOD(PutSFTPTestsFixture, "PutSFTP conflict resolution rename", "[Pu
 }
 
 TEST_CASE_METHOD(PutSFTPTestsFixture, "PutSFTP conflict resolution reject", "[PutSFTP][conflict-resolution]") {
-  plan->setProperty(put, "Conflict Resolution", processors::PutSFTP::CONFLICT_RESOLUTION_REJECT);
+  plan->setProperty(put, "Conflict Resolution", minifi::processors::PutSFTP::CONFLICT_RESOLUTION_REJECT);
 
   createFile(src_dir, "tstFile1.ext", "content 1");
   REQUIRE(0 == utils::file::FileUtils::create_dir(utils::file::FileUtils::concat_path(dst_dir, "vfs/nifi_test")));
@@ -384,7 +384,7 @@ TEST_CASE_METHOD(PutSFTPTestsFixture, "PutSFTP conflict resolution reject", "[Pu
 }
 
 TEST_CASE_METHOD(PutSFTPTestsFixture, "PutSFTP conflict resolution fail", "[PutSFTP][conflict-resolution]") {
-  plan->setProperty(put, "Conflict Resolution", processors::PutSFTP::CONFLICT_RESOLUTION_FAIL);
+  plan->setProperty(put, "Conflict Resolution", minifi::processors::PutSFTP::CONFLICT_RESOLUTION_FAIL);
 
   createFile(src_dir, "tstFile1.ext", "content 1");
   REQUIRE(0 == utils::file::FileUtils::create_dir(utils::file::FileUtils::concat_path(dst_dir, "vfs/nifi_test")));
@@ -397,7 +397,7 @@ TEST_CASE_METHOD(PutSFTPTestsFixture, "PutSFTP conflict resolution fail", "[PutS
 }
 
 TEST_CASE_METHOD(PutSFTPTestsFixture, "PutSFTP conflict resolution ignore", "[PutSFTP][conflict-resolution]") {
-  plan->setProperty(put, "Conflict Resolution", processors::PutSFTP::CONFLICT_RESOLUTION_IGNORE);
+  plan->setProperty(put, "Conflict Resolution", minifi::processors::PutSFTP::CONFLICT_RESOLUTION_IGNORE);
 
   createFile(src_dir, "tstFile1.ext", "content 1");
   REQUIRE(0 == utils::file::FileUtils::create_dir(utils::file::FileUtils::concat_path(dst_dir, "vfs/nifi_test")));
@@ -411,7 +411,7 @@ TEST_CASE_METHOD(PutSFTPTestsFixture, "PutSFTP conflict resolution ignore", "[Pu
 }
 
 TEST_CASE_METHOD(PutSFTPTestsFixture, "PutSFTP conflict resolution replace", "[PutSFTP][conflict-resolution]") {
-  plan->setProperty(put, "Conflict Resolution", processors::PutSFTP::CONFLICT_RESOLUTION_REPLACE);
+  plan->setProperty(put, "Conflict Resolution", minifi::processors::PutSFTP::CONFLICT_RESOLUTION_REPLACE);
 
   createFile(src_dir, "tstFile1.ext", "content 1");
   REQUIRE(0 == utils::file::FileUtils::create_dir(utils::file::FileUtils::concat_path(dst_dir, "vfs/nifi_test")));
@@ -424,7 +424,7 @@ TEST_CASE_METHOD(PutSFTPTestsFixture, "PutSFTP conflict resolution replace", "[P
 }
 
 TEST_CASE_METHOD(PutSFTPTestsFixture, "PutSFTP conflict resolution none", "[PutSFTP][conflict-resolution]") {
-  plan->setProperty(put, "Conflict Resolution", processors::PutSFTP::CONFLICT_RESOLUTION_NONE);
+  plan->setProperty(put, "Conflict Resolution", minifi::processors::PutSFTP::CONFLICT_RESOLUTION_NONE);
 
   createFile(src_dir, "tstFile1.ext", "content 1");
   REQUIRE(0 == utils::file::FileUtils::create_dir(utils::file::FileUtils::concat_path(dst_dir, "vfs/nifi_test")));
@@ -439,22 +439,22 @@ TEST_CASE_METHOD(PutSFTPTestsFixture, "PutSFTP conflict resolution none", "[PutS
 TEST_CASE_METHOD(PutSFTPTestsFixture, "PutSFTP conflict resolution with directory existing at target", "[PutSFTP][conflict-resolution]") {
   bool should_predetect_failure = true;
   SECTION("with conflict resolution rename") {
-    plan->setProperty(put, "Conflict Resolution", processors::PutSFTP::CONFLICT_RESOLUTION_RENAME);
+    plan->setProperty(put, "Conflict Resolution", minifi::processors::PutSFTP::CONFLICT_RESOLUTION_RENAME);
   }
   SECTION("with conflict resolution reject") {
-    plan->setProperty(put, "Conflict Resolution", processors::PutSFTP::CONFLICT_RESOLUTION_REJECT);
+    plan->setProperty(put, "Conflict Resolution", minifi::processors::PutSFTP::CONFLICT_RESOLUTION_REJECT);
   }
   SECTION("with conflict resolution fail") {
-    plan->setProperty(put, "Conflict Resolution", processors::PutSFTP::CONFLICT_RESOLUTION_FAIL);
+    plan->setProperty(put, "Conflict Resolution", minifi::processors::PutSFTP::CONFLICT_RESOLUTION_FAIL);
   }
   SECTION("with conflict resolution ignore") {
-    plan->setProperty(put, "Conflict Resolution", processors::PutSFTP::CONFLICT_RESOLUTION_IGNORE);
+    plan->setProperty(put, "Conflict Resolution", minifi::processors::PutSFTP::CONFLICT_RESOLUTION_IGNORE);
   }
   SECTION("with conflict resolution replace") {
-    plan->setProperty(put, "Conflict Resolution", processors::PutSFTP::CONFLICT_RESOLUTION_REPLACE);
+    plan->setProperty(put, "Conflict Resolution", minifi::processors::PutSFTP::CONFLICT_RESOLUTION_REPLACE);
   }
   SECTION("with conflict resolution none") {
-    plan->setProperty(put, "Conflict Resolution", processors::PutSFTP::CONFLICT_RESOLUTION_NONE);
+    plan->setProperty(put, "Conflict Resolution", minifi::processors::PutSFTP::CONFLICT_RESOLUTION_NONE);
     should_predetect_failure = false;
   }
 
@@ -614,7 +614,7 @@ TEST_CASE_METHOD(PutSFTPTestsFixture, "PutSFTP test temporary filename", "[PutSF
 }
 
 TEST_CASE_METHOD(PutSFTPTestsFixture, "PutSFTP test temporary file cleanup", "[PutSFTP]") {
-  plan->setProperty(put, "Conflict Resolution", processors::PutSFTP::CONFLICT_RESOLUTION_NONE);
+  plan->setProperty(put, "Conflict Resolution", minifi::processors::PutSFTP::CONFLICT_RESOLUTION_NONE);
 
   createFile(src_dir, "tstFile1.ext", "content 1");
   REQUIRE(0 == utils::file::FileUtils::create_dir(utils::file::FileUtils::concat_path(dst_dir, "vfs/nifi_test")));
@@ -720,7 +720,7 @@ TEST_CASE_METHOD(PutSFTPTestsFixture, "PutSFTP connection caching reaches limit"
   plan->setProperty(put, "Batch Size", "2");
   plan->setProperty(put, "Connection Timeout", "30 sec");
   plan->setProperty(put, "Data Timeout", "30 sec");
-  plan->setProperty(put, "Conflict Resolution", processors::PutSFTP::CONFLICT_RESOLUTION_RENAME);
+  plan->setProperty(put, "Conflict Resolution", minifi::processors::PutSFTP::CONFLICT_RESOLUTION_RENAME);
   plan->setProperty(put, "Strict Host Key Checking", "false");
   plan->setProperty(put, "Send Keep Alive On Timeout", "true");
   plan->setProperty(put, "Use Compression", "false");
@@ -782,7 +782,7 @@ TEST_CASE_METHOD(PutSFTPTestsFixture, "PutSFTP batching two files in two batches
 
 TEST_CASE_METHOD(PutSFTPTestsFixture, "PutSFTP batching does not fail even if one is routed to Failure", "[PutSFTP][batching]") {
   plan->setProperty(put, "Batch Size", "3");
-  plan->setProperty(put, "Conflict Resolution", processors::PutSFTP::CONFLICT_RESOLUTION_FAIL);
+  plan->setProperty(put, "Conflict Resolution", minifi::processors::PutSFTP::CONFLICT_RESOLUTION_FAIL);
 
   createFile(src_dir, "tstFile1.ext", "content 1");
   createFile(src_dir, "tstFile2.ext", "content 2");
@@ -869,7 +869,7 @@ TEST_CASE_METHOD(PutSFTPTestsFixture, "PutSFTP expression language test", "[PutS
   plan->setProperty(put, "Batch Size", "2");
   plan->setProperty(put, "Connection Timeout", "30 sec");
   plan->setProperty(put, "Data Timeout", "30 sec");
-  plan->setProperty(put, "Conflict Resolution", processors::PutSFTP::CONFLICT_RESOLUTION_RENAME);
+  plan->setProperty(put, "Conflict Resolution", minifi::processors::PutSFTP::CONFLICT_RESOLUTION_RENAME);
   plan->setProperty(put, "Strict Host Key Checking", "false");
   plan->setProperty(put, "Send Keep Alive On Timeout", "true");
   plan->setProperty(put, "Use Compression", "false");
diff --git a/extensions/sftp/tests/tools/SFTPTestServer.cpp b/extensions/sftp/tests/tools/SFTPTestServer.cpp
index fd086d5..d21bba3 100644
--- a/extensions/sftp/tests/tools/SFTPTestServer.cpp
+++ b/extensions/sftp/tests/tools/SFTPTestServer.cpp
@@ -17,9 +17,11 @@
  */
 
 #include "SFTPTestServer.h"
+
+#include <exception>
+#include <fstream>
 #include <vector>
 #include <thread>
-#include <exception>
 
 #ifndef WIN32
 #include <signal.h>
@@ -33,11 +35,12 @@
 
 #include "utils/file/FileUtils.h"
 
+namespace utils = org::apache::nifi::minifi::utils;
+
 SFTPTestServer::SFTPTestServer(const std::string& working_directory,
                                const std::string& host_key_file /*= "resources/host.pem"*/,
                                const std::string& jar_path /*= "tools/sftp-test-server/target/SFTPTestServer-1.0.0.jar"*/)
-    : logger_(logging::LoggerFactory<SFTPTestServer>::getLogger()),
-      working_directory_(working_directory),
+    : working_directory_(working_directory),
       started_(false),
       port_(0U)
 #ifndef WIN32
diff --git a/extensions/sftp/tests/tools/SFTPTestServer.h b/extensions/sftp/tests/tools/SFTPTestServer.h
index 2484f98..5f4e9fd 100644
--- a/extensions/sftp/tests/tools/SFTPTestServer.h
+++ b/extensions/sftp/tests/tools/SFTPTestServer.h
@@ -43,7 +43,7 @@ class SFTPTestServer {
   uint16_t getPort();
 
  private:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<org::apache::nifi::minifi::core::logging::Logger> logger_ = org::apache::nifi::minifi::core::logging::LoggerFactory<SFTPTestServer>::getLogger();
 
   std::string host_key_file_;
   std::string jar_path_;
diff --git a/extensions/sql/processors/ExecuteSQL.cpp b/extensions/sql/processors/ExecuteSQL.cpp
index 4bd0baf..596ed68 100644
--- a/extensions/sql/processors/ExecuteSQL.cpp
+++ b/extensions/sql/processors/ExecuteSQL.cpp
@@ -57,7 +57,7 @@ const std::string ExecuteSQL::RESULT_ROW_COUNT = "executesql.row.count";
 const std::string ExecuteSQL::INPUT_FLOW_FILE_UUID = "input.flowfile.uuid";
 
 ExecuteSQL::ExecuteSQL(const std::string& name, const utils::Identifier& uuid)
-  : SQLProcessor(name, uuid, logging::LoggerFactory<ExecuteSQL>::getLogger()) {
+  : SQLProcessor(name, uuid, core::logging::LoggerFactory<ExecuteSQL>::getLogger()) {
 }
 
 void ExecuteSQL::initialize() {
diff --git a/extensions/sql/processors/PutSQL.cpp b/extensions/sql/processors/PutSQL.cpp
index c4fdfa5..417df29 100644
--- a/extensions/sql/processors/PutSQL.cpp
+++ b/extensions/sql/processors/PutSQL.cpp
@@ -55,7 +55,7 @@ const core::Property PutSQL::SQLStatement(
 const core::Relationship PutSQL::Success("success", "Database is successfully updated.");
 
 PutSQL::PutSQL(const std::string& name, const utils::Identifier& uuid)
-  : SQLProcessor(name, uuid, logging::LoggerFactory<PutSQL>::getLogger()) {
+  : SQLProcessor(name, uuid, core::logging::LoggerFactory<PutSQL>::getLogger()) {
 }
 
 void PutSQL::initialize() {
diff --git a/extensions/sql/processors/QueryDatabaseTable.cpp b/extensions/sql/processors/QueryDatabaseTable.cpp
index 766adb7..e97094c 100644
--- a/extensions/sql/processors/QueryDatabaseTable.cpp
+++ b/extensions/sql/processors/QueryDatabaseTable.cpp
@@ -94,7 +94,7 @@ const std::string QueryDatabaseTable::MAXVALUE_KEY_PREFIX = "maxvalue.";
 
 // QueryDatabaseTable
 QueryDatabaseTable::QueryDatabaseTable(const std::string& name, const utils::Identifier& uuid)
-  : SQLProcessor(name, uuid, logging::LoggerFactory<QueryDatabaseTable>::getLogger()) {
+  : SQLProcessor(name, uuid, core::logging::LoggerFactory<QueryDatabaseTable>::getLogger()) {
 }
 
 void QueryDatabaseTable::initialize() {
diff --git a/extensions/sql/processors/SQLProcessor.h b/extensions/sql/processors/SQLProcessor.h
index 8da0de5..df9d989 100644
--- a/extensions/sql/processors/SQLProcessor.h
+++ b/extensions/sql/processors/SQLProcessor.h
@@ -38,7 +38,7 @@ class SQLProcessor: public core::Processor {
   static const core::Property DBControllerService;
 
  protected:
-  SQLProcessor(const std::string& name, const utils::Identifier& uuid, std::shared_ptr<logging::Logger> logger)
+  SQLProcessor(const std::string& name, const utils::Identifier& uuid, std::shared_ptr<core::logging::Logger> logger)
     : core::Processor(name, uuid), logger_(std::move(logger)) {
   }
 
@@ -59,7 +59,7 @@ class SQLProcessor: public core::Processor {
     connection_.reset();
   }
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_;
   std::shared_ptr<sql::controllers::DatabaseService> db_service_;
   std::unique_ptr<sql::Connection> connection_;
 };
diff --git a/extensions/sql/services/DatabaseService.h b/extensions/sql/services/DatabaseService.h
index 78bf55e..7d4e612 100644
--- a/extensions/sql/services/DatabaseService.h
+++ b/extensions/sql/services/DatabaseService.h
@@ -40,15 +40,13 @@ class DatabaseService : public core::controller::ControllerService {
  public:
   explicit DatabaseService(const std::string &name, const utils::Identifier &uuid = {})
       : ControllerService(name, uuid),
-        initialized_(false),
-        logger_(logging::LoggerFactory<DatabaseService>::getLogger()) {
+        initialized_(false) {
     initialize();
   }
 
   explicit DatabaseService(const std::string &name, const std::shared_ptr<Configure> &configuration)
       : ControllerService(name),
-        initialized_(false),
-        logger_(logging::LoggerFactory<DatabaseService>::getLogger()) {
+        initialized_(false) {
     setConfiguration(configuration);
     initialize();
   }
@@ -88,7 +86,7 @@ class DatabaseService : public core::controller::ControllerService {
 
  private:
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<DatabaseService>::getLogger();
 };
 
 } /* namespace controllers */
diff --git a/extensions/sql/services/ODBCConnector.h b/extensions/sql/services/ODBCConnector.h
index dc66124..d18851c 100644
--- a/extensions/sql/services/ODBCConnector.h
+++ b/extensions/sql/services/ODBCConnector.h
@@ -39,14 +39,12 @@ namespace controllers {
 class ODBCService : public DatabaseService {
  public:
   explicit ODBCService(const std::string &name, const utils::Identifier &uuid = {})
-    : DatabaseService(name, uuid),
-      logger_(logging::LoggerFactory<ODBCService>::getLogger()) {
+    : DatabaseService(name, uuid) {
     initialize();
   }
 
   explicit ODBCService(const std::string &name, const std::shared_ptr<Configure> &configuration)
-      : DatabaseService(name),
-        logger_(logging::LoggerFactory<ODBCService>::getLogger()) {
+      : DatabaseService(name) {
     setConfiguration(configuration);
     initialize();
   }
@@ -54,7 +52,7 @@ class ODBCService : public DatabaseService {
   std::unique_ptr<sql::Connection> getConnection() const override;
 
  private:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<ODBCService>::getLogger();
 };
 
 } /* namespace controllers */
diff --git a/extensions/standard-processors/controllers/UnorderedMapKeyValueStoreService.cpp b/extensions/standard-processors/controllers/UnorderedMapKeyValueStoreService.cpp
index 4a324f2..af0374d 100644
--- a/extensions/standard-processors/controllers/UnorderedMapKeyValueStoreService.cpp
+++ b/extensions/standard-processors/controllers/UnorderedMapKeyValueStoreService.cpp
@@ -25,13 +25,11 @@ namespace minifi {
 namespace controllers {
 
 UnorderedMapKeyValueStoreService::UnorderedMapKeyValueStoreService(const std::string& name, const utils::Identifier& uuid /*= utils::Identifier()*/)
-    : PersistableKeyValueStoreService(name, uuid)
-    , logger_(logging::LoggerFactory<UnorderedMapKeyValueStoreService>::getLogger()) {
+    : PersistableKeyValueStoreService(name, uuid) {
 }
 
 UnorderedMapKeyValueStoreService::UnorderedMapKeyValueStoreService(const std::string& name, const std::shared_ptr<Configure> &configuration)
-    : PersistableKeyValueStoreService(name)
-    , logger_(logging::LoggerFactory<UnorderedMapKeyValueStoreService>::getLogger())  {
+    : PersistableKeyValueStoreService(name) {
   setConfiguration(configuration);
   initialize();
 }
diff --git a/extensions/standard-processors/controllers/UnorderedMapKeyValueStoreService.h b/extensions/standard-processors/controllers/UnorderedMapKeyValueStoreService.h
index 8b40b9a..22aece6 100644
--- a/extensions/standard-processors/controllers/UnorderedMapKeyValueStoreService.h
+++ b/extensions/standard-processors/controllers/UnorderedMapKeyValueStoreService.h
@@ -65,7 +65,7 @@ class UnorderedMapKeyValueStoreService : virtual public PersistableKeyValueStore
   std::recursive_mutex mutex_;
 
  private:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<UnorderedMapKeyValueStoreService>::getLogger();
 };
 
 }  // namespace controllers
diff --git a/extensions/standard-processors/controllers/UnorderedMapPersistableKeyValueStoreService.cpp b/extensions/standard-processors/controllers/UnorderedMapPersistableKeyValueStoreService.cpp
index 44cfa61..9fd1c1f 100644
--- a/extensions/standard-processors/controllers/UnorderedMapPersistableKeyValueStoreService.cpp
+++ b/extensions/standard-processors/controllers/UnorderedMapPersistableKeyValueStoreService.cpp
@@ -62,15 +62,13 @@ core::Property UnorderedMapPersistableKeyValueStoreService::File(
 UnorderedMapPersistableKeyValueStoreService::UnorderedMapPersistableKeyValueStoreService(const std::string& name, const utils::Identifier& uuid /*= utils::Identifier()*/)
     : PersistableKeyValueStoreService(name, uuid)
     , AbstractAutoPersistingKeyValueStoreService(name, uuid)
-    , UnorderedMapKeyValueStoreService(name, uuid)
-    , logger_(logging::LoggerFactory<UnorderedMapPersistableKeyValueStoreService>::getLogger()) {
+    , UnorderedMapKeyValueStoreService(name, uuid) {
 }
 
 UnorderedMapPersistableKeyValueStoreService::UnorderedMapPersistableKeyValueStoreService(const std::string& name, const std::shared_ptr<Configure> &configuration)
     : PersistableKeyValueStoreService(name)
     , AbstractAutoPersistingKeyValueStoreService(name)
-    , UnorderedMapKeyValueStoreService(name)
-    , logger_(logging::LoggerFactory<UnorderedMapPersistableKeyValueStoreService>::getLogger())  {
+    , UnorderedMapKeyValueStoreService(name) {
   setConfiguration(configuration);
   initializeNonVirtual();
 }
diff --git a/extensions/standard-processors/controllers/UnorderedMapPersistableKeyValueStoreService.h b/extensions/standard-processors/controllers/UnorderedMapPersistableKeyValueStoreService.h
index f25cd33..8ffa8a6 100644
--- a/extensions/standard-processors/controllers/UnorderedMapPersistableKeyValueStoreService.h
+++ b/extensions/standard-processors/controllers/UnorderedMapPersistableKeyValueStoreService.h
@@ -84,7 +84,7 @@ class UnorderedMapPersistableKeyValueStoreService : public AbstractAutoPersistin
   void initializeNonVirtual();
   bool persistNonVirtual();
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<UnorderedMapPersistableKeyValueStoreService>::getLogger();
 };
 
 static_assert(std::is_convertible<UnorderedMapKeyValueStoreService*, PersistableKeyValueStoreService*>::value, "UnorderedMapKeyValueStoreService is a PersistableKeyValueStoreService");
diff --git a/extensions/standard-processors/processors/AppendHostInfo.h b/extensions/standard-processors/processors/AppendHostInfo.h
index 1775be2..10bef17 100644
--- a/extensions/standard-processors/processors/AppendHostInfo.h
+++ b/extensions/standard-processors/processors/AppendHostInfo.h
@@ -47,10 +47,9 @@ class AppendHostInfo : public core::Processor {
 
   explicit AppendHostInfo(const std::string& name, const utils::Identifier& uuid = {})
       : core::Processor(name, uuid),
-        logger_(logging::LoggerFactory<AppendHostInfo>::getLogger()),
         refresh_on_trigger_(false) {
   }
-  virtual ~AppendHostInfo() = default;
+  ~AppendHostInfo() override = default;
   static constexpr char const* ProcessorName = "AppendHostInfo";
 
   EXTENSIONAPI static core::Property InterfaceNameFilter;
@@ -70,7 +69,7 @@ class AppendHostInfo : public core::Processor {
 
  private:
   std::shared_mutex shared_mutex_;
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<AppendHostInfo>::getLogger();
   std::string hostname_attribute_name_;
   std::string ipaddress_attribute_name_;
   std::optional<std::regex> interface_name_filter_;
diff --git a/extensions/standard-processors/processors/AttributesToJSON.h b/extensions/standard-processors/processors/AttributesToJSON.h
index b1ea1d1..e5014ba 100644
--- a/extensions/standard-processors/processors/AttributesToJSON.h
+++ b/extensions/standard-processors/processors/AttributesToJSON.h
@@ -58,8 +58,7 @@ class AttributesToJSON : public core::Processor {
   )
 
   explicit AttributesToJSON(const std::string& name, const utils::Identifier& uuid = {})
-      : core::Processor(name, uuid),
-        logger_(logging::LoggerFactory<AttributesToJSON>::getLogger()) {
+      : core::Processor(name, uuid) {
   }
 
   void initialize() override;
@@ -87,7 +86,7 @@ class AttributesToJSON : public core::Processor {
   void addAttributeToJson(rapidjson::Document& document, const std::string& key, const std::optional<std::string>& value);
   std::string buildAttributeJsonData(const core::FlowFile::AttributeMap& flowfile_attributes);
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<AttributesToJSON>::getLogger();
   std::vector<std::string> attribute_list_;
   std::optional<std::regex> attributes_regular_expression_;
   WriteDestination write_destination_;
diff --git a/extensions/standard-processors/processors/ExecuteProcess.h b/extensions/standard-processors/processors/ExecuteProcess.h
index 517bed1..bdf14b5 100644
--- a/extensions/standard-processors/processors/ExecuteProcess.h
+++ b/extensions/standard-processors/processors/ExecuteProcess.h
@@ -58,8 +58,7 @@ class ExecuteProcess : public core::Processor {
    * Create a new processor
    */
   ExecuteProcess(const std::string& name, const utils::Identifier& uuid = {}) // NOLINT
-      : Processor(name, uuid),
-        logger_(logging::LoggerFactory<ExecuteProcess>::getLogger()) {
+      : Processor(name, uuid) {
     _redirectErrorStream = false;
     _batchDuration = 0;
     _workingDir = ".";
@@ -67,7 +66,7 @@ class ExecuteProcess : public core::Processor {
     _pid = 0;
   }
   // Destructor
-  virtual ~ExecuteProcess() {
+  ~ExecuteProcess() override {
     if (_processRunning && _pid > 0)
       kill(_pid, SIGTERM);
   }
@@ -101,13 +100,13 @@ class ExecuteProcess : public core::Processor {
 
  public:
   // OnTrigger method, implemented by NiFi ExecuteProcess
-  virtual void onTrigger(core::ProcessContext *context, core::ProcessSession *session);
+  void onTrigger(core::ProcessContext *context, core::ProcessSession *session) override;
   // Initialize, over write by NiFi ExecuteProcess
-  virtual void initialize(void);
+  void initialize() override;
 
  private:
   // Logger
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<ExecuteProcess>::getLogger();
   // Property
   std::string _command;
   std::string _commandArgument;
diff --git a/extensions/standard-processors/processors/ExtractText.cpp b/extensions/standard-processors/processors/ExtractText.cpp
index 30aa277..14c3550 100644
--- a/extensions/standard-processors/processors/ExtractText.cpp
+++ b/extensions/standard-processors/processors/ExtractText.cpp
@@ -215,7 +215,7 @@ int64_t ExtractText::ReadCallback::process(const std::shared_ptr<io::BaseStream>
   return gsl::narrow<int64_t>(read_size);
 }
 
-ExtractText::ReadCallback::ReadCallback(std::shared_ptr<core::FlowFile> flowFile, core::ProcessContext *ctx,  std::shared_ptr<logging::Logger> lgr)
+ExtractText::ReadCallback::ReadCallback(std::shared_ptr<core::FlowFile> flowFile, core::ProcessContext *ctx,  std::shared_ptr<core::logging::Logger> lgr)
     : flowFile_(std::move(flowFile)),
       ctx_(ctx),
       logger_(std::move(lgr)) {
diff --git a/extensions/standard-processors/processors/ExtractText.h b/extensions/standard-processors/processors/ExtractText.h
index b9cf78e..ef71ef6 100644
--- a/extensions/standard-processors/processors/ExtractText.h
+++ b/extensions/standard-processors/processors/ExtractText.h
@@ -38,60 +38,56 @@ namespace processors {
 //! ExtractText Class
 class ExtractText : public core::Processor {
  public:
-    //! Constructor
-    /*!
-     * Create a new processor
-     */
-    explicit ExtractText(const std::string& name,  const utils::Identifier& uuid = {})
-    : Processor(name, uuid) {
-        logger_ = logging::LoggerFactory<ExtractText>::getLogger();
-    }
-    //! Processor Name
-    EXTENSIONAPI static constexpr char const* ProcessorName = "ExtractText";
-    //! Supported Properties
-    EXTENSIONAPI static core::Property Attribute;
-    EXTENSIONAPI static core::Property SizeLimit;
-
-    EXTENSIONAPI static core::Property RegexMode;
-    EXTENSIONAPI static core::Property IgnoreCaptureGroupZero;
-    EXTENSIONAPI static core::Property InsensitiveMatch;
-    EXTENSIONAPI static core::Property MaxCaptureGroupLen;
-    EXTENSIONAPI static core::Property EnableRepeatingCaptureGroup;
-
-    //! Supported Relationships
-    EXTENSIONAPI static core::Relationship Success;
-    //! Default maximum bytes to read into an attribute
-    EXTENSIONAPI static constexpr int DEFAULT_SIZE_LIMIT = 2 * 1024 * 1024;
-
-    //! OnTrigger method, implemented by NiFi ExtractText
-    void onTrigger(core::ProcessContext *context, core::ProcessSession *session) override;
-    //! Initialize, over write by NiFi ExtractText
-    void initialize(void) override;
-
-    bool supportsDynamicProperties() override {
-      return true;
-    }
-
-    class ReadCallback : public InputStreamCallback {
-     public:
-        ReadCallback(std::shared_ptr<core::FlowFile> flowFile, core::ProcessContext *ct, std::shared_ptr<logging::Logger> lgr);
-        ~ReadCallback() = default;
-        int64_t process(const std::shared_ptr<io::BaseStream>& stream);
-
-     private:
-        std::shared_ptr<core::FlowFile> flowFile_;
-        core::ProcessContext *ctx_;
-        std::vector<uint8_t> buffer_;
-        std::shared_ptr<logging::Logger> logger_;
-    };
+  explicit ExtractText(const std::string& name,  const utils::Identifier& uuid = {})
+      : Processor(name, uuid) {
+  }
+
+  EXTENSIONAPI static constexpr char const* ProcessorName = "ExtractText";
+
+  //! Supported Properties
+  EXTENSIONAPI static core::Property Attribute;
+  EXTENSIONAPI static core::Property SizeLimit;
+
+  EXTENSIONAPI static core::Property RegexMode;
+  EXTENSIONAPI static core::Property IgnoreCaptureGroupZero;
+  EXTENSIONAPI static core::Property InsensitiveMatch;
+  EXTENSIONAPI static core::Property MaxCaptureGroupLen;
+  EXTENSIONAPI static core::Property EnableRepeatingCaptureGroup;
+
+  //! Supported Relationships
+  EXTENSIONAPI static core::Relationship Success;
+  //! Default maximum bytes to read into an attribute
+  EXTENSIONAPI static constexpr int DEFAULT_SIZE_LIMIT = 2 * 1024 * 1024;
+
+  //! OnTrigger method, implemented by NiFi ExtractText
+  void onTrigger(core::ProcessContext *context, core::ProcessSession *session) override;
+  //! Initialize, over write by NiFi ExtractText
+  void initialize() override;
+
+  bool supportsDynamicProperties() override {
+    return true;
+  }
+
+  class ReadCallback : public InputStreamCallback {
+   public:
+    ReadCallback(std::shared_ptr<core::FlowFile> flowFile, core::ProcessContext *ct, std::shared_ptr<core::logging::Logger> lgr);
+    ~ReadCallback() override = default;
+    int64_t process(const std::shared_ptr<io::BaseStream>& stream) override;
+
+   private:
+    std::shared_ptr<core::FlowFile> flowFile_;
+    core::ProcessContext *ctx_;
+    std::vector<uint8_t> buffer_;
+    std::shared_ptr<core::logging::Logger> logger_;
+  };
 
  private:
-    core::annotation::Input getInputRequirement() const override {
-      return core::annotation::Input::INPUT_REQUIRED;
-    }
+  core::annotation::Input getInputRequirement() const override {
+    return core::annotation::Input::INPUT_REQUIRED;
+  }
 
-    //! Logger
-    std::shared_ptr<logging::Logger> logger_;
+  //! Logger
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<ExtractText>::getLogger();
 };
 
 }  // namespace processors
diff --git a/extensions/standard-processors/processors/GenerateFlowFile.h b/extensions/standard-processors/processors/GenerateFlowFile.h
index ed77bd0..343e733 100644
--- a/extensions/standard-processors/processors/GenerateFlowFile.h
+++ b/extensions/standard-processors/processors/GenerateFlowFile.h
@@ -45,7 +45,7 @@ class GenerateFlowFile : public core::Processor {
    * Create a new processor
    */
   GenerateFlowFile(const std::string& name, const utils::Identifier& uuid = {}) // NOLINT
-      : Processor(name, uuid), logger_(logging::LoggerFactory<GenerateFlowFile>::getLogger()) {
+      : Processor(name, uuid) {
     batchSize_ = 1;
     uniqueFlowFile_ = true;
     fileSize_ = 1024;
@@ -99,7 +99,7 @@ class GenerateFlowFile : public core::Processor {
   }
 
   // logger instance
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<GenerateFlowFile>::getLogger();
 };
 
 }  // namespace processors
diff --git a/extensions/standard-processors/processors/GetFile.h b/extensions/standard-processors/processors/GetFile.h
index 122d939..71fc6ff 100644
--- a/extensions/standard-processors/processors/GetFile.h
+++ b/extensions/standard-processors/processors/GetFile.h
@@ -114,8 +114,7 @@ class GetFile : public core::Processor, public state::response::MetricsNodeSourc
   explicit GetFile(const std::string& name, const utils::Identifier& uuid = {})
       : Processor(name, uuid),
         metrics_(std::make_shared<GetFileMetrics>()),
-        last_listing_time_(0),
-        logger_(logging::LoggerFactory<GetFile>::getLogger()) {
+        last_listing_time_(0) {
   }
   // Destructor
   ~GetFile() override = default;
@@ -153,7 +152,7 @@ class GetFile : public core::Processor, public state::response::MetricsNodeSourc
   void onTrigger(core::ProcessContext *context, core::ProcessSession *session) override;
 
   // Initialize, over write by NiFi GetFile
-  void initialize(void) override;
+  void initialize() override;
   /**
    * performs a listing on the directory.
    * @param request get file request.
@@ -178,7 +177,7 @@ class GetFile : public core::Processor, public state::response::MetricsNodeSourc
   std::queue<std::string> directory_listing_;
   mutable std::mutex directory_listing_mutex_;
   std::atomic<uint64_t> last_listing_time_;
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<GetFile>::getLogger();
 };
 
 }  // namespace processors
diff --git a/extensions/standard-processors/processors/GetTCP.h b/extensions/standard-processors/processors/GetTCP.h
index 4daa4ee..a962f29 100644
--- a/extensions/standard-processors/processors/GetTCP.h
+++ b/extensions/standard-processors/processors/GetTCP.h
@@ -182,8 +182,7 @@ class GetTCP : public core::Processor, public state::response::MetricsNodeSource
         reconnect_interval_(5000),
         receive_buffer_size_(16 * 1024 * 1024),
         connection_attempt_limit_(3),
-        ssl_service_(nullptr),
-        logger_(logging::LoggerFactory<GetTCP>::getLogger()) {
+        ssl_service_(nullptr) {
     metrics_ = std::make_shared<GetTCPMetrics>();
   }
 // Destructor
@@ -274,7 +273,7 @@ class GetTCP : public core::Processor, public state::response::MetricsNodeSource
   // last listing time for root directory ( if recursive, we will consider the root
   // as the top level time.
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<GetTCP>::getLogger();
 };
 
 }  // namespace processors
diff --git a/extensions/standard-processors/processors/HashContent.h b/extensions/standard-processors/processors/HashContent.h
index 8b6ebe2..e6d05aa 100644
--- a/extensions/standard-processors/processors/HashContent.h
+++ b/extensions/standard-processors/processors/HashContent.h
@@ -66,7 +66,7 @@ namespace { // NOLINT
     if (ret_val.second > 0) {
       unsigned char digest[MD5_DIGEST_LENGTH];
       MD5_Final(digest, &context);
-      ret_val.first = utils::StringUtils::to_hex(digest, MD5_DIGEST_LENGTH, true /*uppercase*/);
+      ret_val.first = org::apache::nifi::minifi::utils::StringUtils::to_hex(digest, MD5_DIGEST_LENGTH, true /*uppercase*/);
     }
     return ret_val;
   }
@@ -90,7 +90,7 @@ namespace { // NOLINT
     if (ret_val.second > 0) {
       unsigned char digest[SHA_DIGEST_LENGTH];
       SHA1_Final(digest, &context);
-      ret_val.first = utils::StringUtils::to_hex(digest, SHA_DIGEST_LENGTH, true /*uppercase*/);
+      ret_val.first = org::apache::nifi::minifi::utils::StringUtils::to_hex(digest, SHA_DIGEST_LENGTH, true /*uppercase*/);
     }
     return ret_val;
   }
@@ -114,7 +114,7 @@ namespace { // NOLINT
     if (ret_val.second > 0) {
       unsigned char digest[SHA256_DIGEST_LENGTH];
       SHA256_Final(digest, &context);
-      ret_val.first = utils::StringUtils::to_hex(digest, SHA256_DIGEST_LENGTH, true /*uppercase*/);
+      ret_val.first = org::apache::nifi::minifi::utils::StringUtils::to_hex(digest, SHA256_DIGEST_LENGTH, true /*uppercase*/);
     }
     return ret_val;
   }
@@ -139,7 +139,6 @@ class HashContent : public core::Processor {
   */
   explicit HashContent(const std::string& name,  const utils::Identifier& uuid = {})
       : Processor(name, uuid) {
-    logger_ = logging::LoggerFactory<HashContent>::getLogger();
   }
   //! Processor Name
   EXTENSIONAPI static constexpr char const* ProcessorName = "HashContent";
@@ -175,7 +174,7 @@ class HashContent : public core::Processor {
   }
 
   //! Logger
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<HashContent>::getLogger();
   std::string algoName_;
   std::string attrKey_;
   bool failOnEmpty_;
diff --git a/extensions/standard-processors/processors/ListenSyslog.h b/extensions/standard-processors/processors/ListenSyslog.h
index 8f6375d..afdd774 100644
--- a/extensions/standard-processors/processors/ListenSyslog.h
+++ b/extensions/standard-processors/processors/ListenSyslog.h
@@ -74,8 +74,7 @@ class ListenSyslog : public core::Processor {
    * Create a new processor
    */
   ListenSyslog(const std::string& name,  const utils::Identifier& uuid = {}) // NOLINT
-      : Processor(name, uuid),
-        logger_(logging::LoggerFactory<ListenSyslog>::getLogger()) {
+      : Processor(name, uuid) {
     _eventQueueByteSize = 0;
     _serverSocket = 0;
     _recvBufSize = 65507;
@@ -152,7 +151,7 @@ class ListenSyslog : public core::Processor {
   }
 
   // Logger
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<ListenSyslog>::getLogger();
   // Run function for the thread
   static void run(ListenSyslog *process);
   // Run Thread
diff --git a/extensions/standard-processors/processors/LogAttribute.cpp b/extensions/standard-processors/processors/LogAttribute.cpp
index 8d041b8..61f54c8 100644
--- a/extensions/standard-processors/processors/LogAttribute.cpp
+++ b/extensions/standard-processors/processors/LogAttribute.cpp
@@ -169,19 +169,19 @@ void LogAttribute::onTrigger(const std::shared_ptr<core::ProcessContext> &contex
 
     switch (level) {
       case LogAttrLevelInfo:
-        logging::LOG_INFO(logger_) << output;
+        core::logging::LOG_INFO(logger_) << output;
         break;
       case LogAttrLevelDebug:
-        logging::LOG_DEBUG(logger_) << output;
+        core::logging::LOG_DEBUG(logger_) << output;
         break;
       case LogAttrLevelError:
-        logging::LOG_ERROR(logger_) << output;
+        core::logging::LOG_ERROR(logger_) << output;
         break;
       case LogAttrLevelTrace:
-        logging::LOG_TRACE(logger_) << output;
+        core::logging::LOG_TRACE(logger_) << output;
         break;
       case LogAttrLevelWarn:
-        logging::LOG_WARN(logger_) << output;
+        core::logging::LOG_WARN(logger_) << output;
         break;
       default:
         break;
diff --git a/extensions/standard-processors/processors/LogAttribute.h b/extensions/standard-processors/processors/LogAttribute.h
index 5cd5c82..e9b4f35 100644
--- a/extensions/standard-processors/processors/LogAttribute.h
+++ b/extensions/standard-processors/processors/LogAttribute.h
@@ -50,8 +50,7 @@ class LogAttribute : public core::Processor {
       : Processor(name, uuid),
         flowfiles_to_log_(1),
         hexencode_(false),
-        max_line_length_(80U),
-        logger_(logging::LoggerFactory<LogAttribute>::getLogger()) {
+        max_line_length_(80U) {
   }
   // Destructor
   ~LogAttribute() override = default;
@@ -99,7 +98,7 @@ class LogAttribute : public core::Processor {
   // Nest Callback Class for read stream
   class ReadCallback : public InputStreamCallback {
    public:
-    ReadCallback(std::shared_ptr<logging::Logger> logger, size_t size)
+    ReadCallback(std::shared_ptr<core::logging::Logger> logger, size_t size)
         : logger_(std::move(logger))
         , buffer_(size)  {
     }
@@ -112,7 +111,7 @@ class LogAttribute : public core::Processor {
       }
       return gsl::narrow<int64_t>(buffer_.size());
     }
-    std::shared_ptr<logging::Logger> logger_;
+    std::shared_ptr<core::logging::Logger> logger_;
     std::vector<uint8_t> buffer_;
   };
 
@@ -132,7 +131,7 @@ class LogAttribute : public core::Processor {
   bool hexencode_;
   uint32_t max_line_length_;
   // Logger
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<LogAttribute>::getLogger();
 };
 
 }  // namespace processors
diff --git a/extensions/standard-processors/processors/PutFile.h b/extensions/standard-processors/processors/PutFile.h
index cbef1da..31899e7 100644
--- a/extensions/standard-processors/processors/PutFile.h
+++ b/extensions/standard-processors/processors/PutFile.h
@@ -50,8 +50,7 @@ class PutFile : public core::Processor {
    * Create a new processor
    */
   PutFile(const std::string& name,  const utils::Identifier& uuid = {}) // NOLINT
-      : core::Processor(std::move(name), uuid),
-        logger_(logging::LoggerFactory<PutFile>::getLogger()) {
+      : core::Processor(name, uuid) {
   }
 
   ~PutFile() override = default;
@@ -88,7 +87,7 @@ class PutFile : public core::Processor {
     bool commit();
 
    private:
-    std::shared_ptr<logging::Logger> logger_{ logging::LoggerFactory<PutFile::ReadCallback>::getLogger() };
+    std::shared_ptr<core::logging::Logger> logger_{ core::logging::LoggerFactory<PutFile::ReadCallback>::getLogger() };
     bool write_succeeded_ = false;
     std::string tmp_file_;
     std::string dest_file_;
@@ -116,7 +115,7 @@ class PutFile : public core::Processor {
                const std::string &tmpFile,
                const std::string &destFile,
                const std::string &destDir);
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<PutFile>::getLogger();
   static std::shared_ptr<utils::IdGenerator> id_generator_;
 
 #ifndef WIN32
diff --git a/extensions/standard-processors/processors/RetryFlowFile.h b/extensions/standard-processors/processors/RetryFlowFile.h
index a8e2067..3792b00 100644
--- a/extensions/standard-processors/processors/RetryFlowFile.h
+++ b/extensions/standard-processors/processors/RetryFlowFile.h
@@ -44,10 +44,9 @@ namespace processors {
 class RetryFlowFile : public core::Processor {
  public:
   explicit RetryFlowFile(const std::string& name, const utils::Identifier& uuid = {})
-      : Processor(name, uuid),
-        logger_(logging::LoggerFactory<RetryFlowFile>::getLogger()) {}
+      : Processor(name, uuid) {}
   // Destructor
-  virtual ~RetryFlowFile() = default;
+  ~RetryFlowFile() override = default;
   // Processor Name
   EXTENSIONAPI static constexpr char const* ProcessorName = "RetryFlowFile";
   // Supported Properties
@@ -103,7 +102,7 @@ class RetryFlowFile : public core::Processor {
   std::string reuse_mode_;
   std::vector<core::Property> exceeded_flowfile_attribute_keys_;
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<RetryFlowFile>::getLogger();
 };
 
 } /* namespace processors */
diff --git a/extensions/standard-processors/processors/RouteOnAttribute.h b/extensions/standard-processors/processors/RouteOnAttribute.h
index 869249b..be39c9c 100644
--- a/extensions/standard-processors/processors/RouteOnAttribute.h
+++ b/extensions/standard-processors/processors/RouteOnAttribute.h
@@ -38,9 +38,8 @@ namespace processors {
 
 class RouteOnAttribute : public core::Processor {
  public:
-  RouteOnAttribute(const std::string& name, const utils::Identifier& uuid = {}) // NOLINT
-      : core::Processor(name, uuid),
-        logger_(logging::LoggerFactory<RouteOnAttribute>::getLogger()) {
+  explicit RouteOnAttribute(const std::string& name, const utils::Identifier& uuid = {})
+      : core::Processor(name, uuid) {
   }
 
   /**
@@ -71,7 +70,7 @@ class RouteOnAttribute : public core::Processor {
     return core::annotation::Input::INPUT_REQUIRED;
   }
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<RouteOnAttribute>::getLogger();
   std::map<std::string, core::Property> route_properties_;
   std::map<std::string, core::Relationship> route_rels_;
 };
diff --git a/extensions/standard-processors/processors/TailFile.cpp b/extensions/standard-processors/processors/TailFile.cpp
index 6180a2b..d971f73 100644
--- a/extensions/standard-processors/processors/TailFile.cpp
+++ b/extensions/standard-processors/processors/TailFile.cpp
@@ -179,7 +179,7 @@ std::map<std::string, TailState> update_keys_in_legacy_states(const std::map<std
   return new_tail_states;
 }
 
-void openFile(const std::string &file_name, uint64_t offset, std::ifstream &input_stream, const std::shared_ptr<logging::Logger> &logger) {
+void openFile(const std::string &file_name, uint64_t offset, std::ifstream &input_stream, const std::shared_ptr<core::logging::Logger> &logger) {
   logger->log_debug("Opening %s", file_name);
   input_stream.open(file_name.c_str(), std::fstream::in | std::fstream::binary);
   if (!input_stream.is_open() || !input_stream.good()) {
@@ -204,8 +204,7 @@ class FileReaderCallback : public OutputStreamCallback {
                      char input_delimiter,
                      uint64_t checksum)
     : input_delimiter_(input_delimiter),
-      checksum_(checksum),
-      logger_(logging::LoggerFactory<TailFile>::getLogger()) {
+      checksum_(checksum) {
     openFile(file_name, offset, input_stream_, logger_);
   }
 
@@ -260,7 +259,7 @@ class FileReaderCallback : public OutputStreamCallback {
   char input_delimiter_;
   uint64_t checksum_;
   std::ifstream input_stream_;
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<TailFile>::getLogger();
 
   std::array<char, BUFFER_SIZE> buffer_;
   char *begin_ = buffer_.data();
@@ -274,8 +273,7 @@ class WholeFileReaderCallback : public OutputStreamCallback {
   WholeFileReaderCallback(const std::string &file_name,
                           uint64_t offset,
                           uint64_t checksum)
-    : checksum_(checksum),
-      logger_(logging::LoggerFactory<TailFile>::getLogger()) {
+    : checksum_(checksum) {
     openFile(file_name, offset, input_stream_, logger_);
   }
 
@@ -310,7 +308,7 @@ class WholeFileReaderCallback : public OutputStreamCallback {
  private:
   uint64_t checksum_;
   std::ifstream input_stream_;
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<TailFile>::getLogger();
 };
 }  // namespace
 
@@ -557,8 +555,8 @@ bool TailFile::getStateFromLegacyStateFile(const std::shared_ptr<core::ProcessCo
 
 void TailFile::logState() {
   logger_->log_info("State of the TailFile processor %s:", name_);
-  for (const auto& key_value_pair : tail_states_) {
-    logging::LOG_INFO(logger_) << key_value_pair.first << " => { " << key_value_pair.second << " }";
+  for (const auto& [key, value] : tail_states_) {
+    core::logging::LOG_INFO(logger_) << key << " => { " << value << " }";
   }
 }
 
diff --git a/extensions/standard-processors/processors/TailFile.h b/extensions/standard-processors/processors/TailFile.h
index dc2048c..bcf4258 100644
--- a/extensions/standard-processors/processors/TailFile.h
+++ b/extensions/standard-processors/processors/TailFile.h
@@ -82,8 +82,7 @@ SMART_ENUM(InitialStartPositions,
 class TailFile : public core::Processor {
  public:
   explicit TailFile(const std::string& name, const utils::Identifier& uuid = {})
-      : core::Processor(std::move(name), uuid),
-        logger_(logging::LoggerFactory<TailFile>::getLogger()) {
+      : core::Processor(name, uuid) {
   }
 
   ~TailFile() override = default;
@@ -186,7 +185,7 @@ class TailFile : public core::Processor {
   std::string rolling_filename_pattern_;
   InitialStartPositions initial_start_position_;
   bool first_trigger_{true};
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<TailFile>::getLogger();
 };
 
 }  // namespace processors
diff --git a/extensions/standard-processors/processors/UpdateAttribute.h b/extensions/standard-processors/processors/UpdateAttribute.h
index 1263167..3a2c047 100644
--- a/extensions/standard-processors/processors/UpdateAttribute.h
+++ b/extensions/standard-processors/processors/UpdateAttribute.h
@@ -39,8 +39,7 @@ namespace processors {
 class UpdateAttribute : public core::Processor {
  public:
   UpdateAttribute(const std::string& name,  const utils::Identifier& uuid = {}) // NOLINT
-      : core::Processor(name, uuid),
-        logger_(logging::LoggerFactory<UpdateAttribute>::getLogger()) {
+      : core::Processor(name, uuid) {
   }
 
   /**
@@ -69,7 +68,7 @@ class UpdateAttribute : public core::Processor {
     return core::annotation::Input::INPUT_REQUIRED;
   }
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<UpdateAttribute>::getLogger();
   std::vector<core::Property> attributes_;
 };
 
diff --git a/extensions/standard-processors/tests/integration/SecureSocketGetTCPTest.cpp b/extensions/standard-processors/tests/integration/SecureSocketGetTCPTest.cpp
index 22d26ea..d4093e4 100644
--- a/extensions/standard-processors/tests/integration/SecureSocketGetTCPTest.cpp
+++ b/extensions/standard-processors/tests/integration/SecureSocketGetTCPTest.cpp
@@ -63,7 +63,7 @@ class SecureSocketTest : public IntegrationBase {
     LogTestController::getInstance().setDebug<minifi::io::TLSContext>();
     LogTestController::getInstance().setDebug<core::ProcessSession>();
     LogTestController::getInstance().setTrace<minifi::io::TLSSocket>();
-    LogTestController::getInstance().setTrace<processors::GetTCP>();
+    LogTestController::getInstance().setTrace<minifi::processors::GetTCP>();
     std::fstream file;
     ss << dir << utils::file::FileUtils::get_separator() << "tstFile.ext";
     file.open(ss.str(), std::ios::out);
diff --git a/extensions/standard-processors/tests/integration/TLSClientSocketSupportedProtocolsTest.cpp b/extensions/standard-processors/tests/integration/TLSClientSocketSupportedProtocolsTest.cpp
index efe7caa..928bc56 100644
--- a/extensions/standard-processors/tests/integration/TLSClientSocketSupportedProtocolsTest.cpp
+++ b/extensions/standard-processors/tests/integration/TLSClientSocketSupportedProtocolsTest.cpp
@@ -27,6 +27,8 @@
 #include "properties/Configure.h"
 #include "io/tls/TLSSocket.h"
 
+namespace minifi = org::apache::nifi::minifi;
+
 #ifdef WIN32
 #pragma comment(lib, "Ws2_32.lib")
 using SocketDescriptor = SOCKET;
@@ -144,7 +146,7 @@ class TLSClientSocketSupportedProtocolsTest {
 
  protected:
   void configureSecurity() {
-    host_ = org::apache::nifi::minifi::io::Socket::getMyHostName();
+    host_ = minifi::io::Socket::getMyHostName();
     port_ = "38777";
     if (!key_dir_.empty()) {
       configuration_->set(minifi::Configure::nifi_remote_input_secure, "true");
@@ -167,8 +169,8 @@ class TLSClientSocketSupportedProtocolsTest {
     TLSTestSever server(port_, key_dir_);
     server.waitForConnection();
 
-    const auto socket_context = std::make_shared<org::apache::nifi::minifi::io::TLSContext>(configuration_);
-    client_socket_ = std::make_unique<org::apache::nifi::minifi::io::TLSSocket>(socket_context, host_, std::stoi(port_), 0);
+    const auto socket_context = std::make_shared<minifi::io::TLSContext>(configuration_);
+    client_socket_ = std::make_unique<minifi::io::TLSSocket>(socket_context, host_, std::stoi(port_), 0);
     const bool client_initialized_successfully = (client_socket_->initialize() == 0);
     assert(client_initialized_successfully == should_be_compatible);
     server.shutdownServer();
@@ -176,7 +178,7 @@ class TLSClientSocketSupportedProtocolsTest {
   }
 
  protected:
-    std::unique_ptr<org::apache::nifi::minifi::io::TLSSocket> client_socket_;
+    std::unique_ptr<minifi::io::TLSSocket> client_socket_;
     std::string host_;
     std::string port_;
     std::string key_dir_;
diff --git a/extensions/standard-processors/tests/integration/TLSServerSocketSupportedProtocolsTest.cpp b/extensions/standard-processors/tests/integration/TLSServerSocketSupportedProtocolsTest.cpp
index 3651aa8..2ad3d01 100644
--- a/extensions/standard-processors/tests/integration/TLSServerSocketSupportedProtocolsTest.cpp
+++ b/extensions/standard-processors/tests/integration/TLSServerSocketSupportedProtocolsTest.cpp
@@ -38,6 +38,8 @@
 #include "io/tls/TLSSocket.h"
 #include "io/tls/TLSServerSocket.h"
 
+namespace minifi = org::apache::nifi::minifi;
+
 #ifdef WIN32
 using SocketDescriptor = SOCKET;
 #else
@@ -105,7 +107,7 @@ std::string str_addr(const sockaddr* const sa) {
   }
 }
 
-void log_addrinfo(addrinfo* const ai, logging::Logger& logger) {
+void log_addrinfo(addrinfo* const ai, minifi::core::logging::Logger& logger) {
   logger.log_debug(".ai_family: %d %s\n", ai->ai_family, str_family(ai->ai_family));
   logger.log_debug(".ai_socktype: %d %s\n", ai->ai_socktype, str_socktype(ai->ai_socktype));
   logger.log_debug(".ai_protocol: %d %s\n", ai->ai_protocol, str_proto(ai->ai_protocol));
@@ -149,9 +151,9 @@ class SimpleSSLTestClient  {
   SocketDescriptor sfd_;
   std::string host_;
   std::string port_;
-  gsl::not_null<std::shared_ptr<logging::Logger>> logger_{gsl::make_not_null(logging::LoggerFactory<SimpleSSLTestClient>::getLogger())};
+  gsl::not_null<std::shared_ptr<minifi::core::logging::Logger>> logger_{gsl::make_not_null(minifi::core::logging::LoggerFactory<SimpleSSLTestClient>::getLogger())};
 
-  static SocketDescriptor openConnection(const char *host_name, const char *port, logging::Logger& logger) {
+  static SocketDescriptor openConnection(const char *host_name, const char *port, minifi::core::logging::Logger& logger) {
     struct addrinfo hints;
     memset(&hints, 0, sizeof(hints));
     hints.ai_family = AF_UNSPEC;
@@ -231,7 +233,7 @@ class TLSServerSocketSupportedProtocolsTest {
 
  protected:
     void configureSecurity() {
-      host_ = org::apache::nifi::minifi::io::Socket::getMyHostName();
+      host_ = minifi::io::Socket::getMyHostName();
       port_ = "38778";
       if (!key_dir_.empty()) {
         configuration_->set(minifi::Configure::nifi_remote_input_secure, "true");
@@ -244,8 +246,8 @@ class TLSServerSocketSupportedProtocolsTest {
     }
 
     void createServerSocket() {
-      const auto socket_context = std::make_shared<org::apache::nifi::minifi::io::TLSContext>(configuration_);
-      server_socket_ = std::make_unique<org::apache::nifi::minifi::io::TLSServerSocket>(socket_context, host_, std::stoi(port_), 3);
+      const auto socket_context = std::make_shared<minifi::io::TLSContext>(configuration_);
+      server_socket_ = std::make_unique<minifi::io::TLSServerSocket>(socket_context, host_, std::stoi(port_), 3);
       assert(0 == server_socket_->initialize());
 
       is_running_ = true;
@@ -275,7 +277,7 @@ class TLSServerSocketSupportedProtocolsTest {
     }
 
     std::atomic<bool> is_running_;
-    std::unique_ptr<org::apache::nifi::minifi::io::TLSServerSocket> server_socket_;
+    std::unique_ptr<minifi::io::TLSServerSocket> server_socket_;
     std::string host_;
     std::string port_;
     std::string key_dir_;
diff --git a/extensions/standard-processors/tests/unit/AppendHostInfoTests.cpp b/extensions/standard-processors/tests/unit/AppendHostInfoTests.cpp
index 97014e0..63b82c5 100644
--- a/extensions/standard-processors/tests/unit/AppendHostInfoTests.cpp
+++ b/extensions/standard-processors/tests/unit/AppendHostInfoTests.cpp
@@ -26,8 +26,8 @@ using LogAttribute = org::apache::nifi::minifi::processors::LogAttribute;
 TEST_CASE("AppendHostInfoTest", "[appendhostinfotest]") {
   TestController testController;
   std::shared_ptr<TestPlan> plan = testController.createPlan();
-  LogTestController::getInstance().setTrace<processors::AppendHostInfo>();
-  LogTestController::getInstance().setTrace<processors::LogAttribute>();
+  LogTestController::getInstance().setTrace<minifi::processors::AppendHostInfo>();
+  LogTestController::getInstance().setTrace<minifi::processors::LogAttribute>();
   std::shared_ptr<core::Processor> generate_flow_file = plan->addProcessor("GenerateFlowFile", "generate_flow_file");
   std::shared_ptr<core::Processor> append_host_info = plan->addProcessor("AppendHostInfo", "append_host_info", core::Relationship("success", "description"), true);
   std::shared_ptr<core::Processor> log_attribute = plan->addProcessor("LogAttribute", "log_attributes", core::Relationship("success", "description"), true);
@@ -41,8 +41,8 @@ TEST_CASE("AppendHostInfoTest", "[appendhostinfotest]") {
 TEST_CASE("AppendHostInfoTestWithUnmatchableRegex", "[appendhostinfotestunmatchableregex]") {
   TestController testController;
   std::shared_ptr<TestPlan> plan = testController.createPlan();
-  LogTestController::getInstance().setTrace<processors::AppendHostInfo>();
-  LogTestController::getInstance().setTrace<processors::LogAttribute>();
+  LogTestController::getInstance().setTrace<minifi::processors::AppendHostInfo>();
+  LogTestController::getInstance().setTrace<minifi::processors::LogAttribute>();
   std::shared_ptr<core::Processor> generate_flow_file = plan->addProcessor("GenerateFlowFile", "generate_flow_file");
   std::shared_ptr<core::Processor> append_host_info = plan->addProcessor("AppendHostInfo", "append_host_info", core::Relationship("success", "description"), true);
   std::shared_ptr<core::Processor> log_attribute = plan->addProcessor("LogAttribute", "log_attributes", core::Relationship("success", "description"), true);
@@ -59,8 +59,8 @@ TEST_CASE("AppendHostInfoTestWithUnmatchableRegex", "[appendhostinfotestunmatcha
 TEST_CASE("AppendHostInfoTestCanFilterOutLoopbackInterfacesWithRegex", "[appendhostinfotestfilterloopback]") {
   TestController testController;
   std::shared_ptr<TestPlan> plan = testController.createPlan();
-  LogTestController::getInstance().setTrace<processors::AppendHostInfo>();
-  LogTestController::getInstance().setTrace<processors::LogAttribute>();
+  LogTestController::getInstance().setTrace<minifi::processors::AppendHostInfo>();
+  LogTestController::getInstance().setTrace<minifi::processors::LogAttribute>();
   std::shared_ptr<core::Processor> generate_flow_file = plan->addProcessor("GenerateFlowFile", "generate_flow_file");
   std::shared_ptr<core::Processor> append_host_info = plan->addProcessor("AppendHostInfo", "append_host_info", core::Relationship("success", "description"), true);
   std::shared_ptr<core::Processor> log_attribute = plan->addProcessor("LogAttribute", "log_attributes", core::Relationship("success", "description"), true);
diff --git a/extensions/standard-processors/tests/unit/ExtractTextTests.cpp b/extensions/standard-processors/tests/unit/ExtractTextTests.cpp
index f57db51..1b05c5d 100644
--- a/extensions/standard-processors/tests/unit/ExtractTextTests.cpp
+++ b/extensions/standard-processors/tests/unit/ExtractTextTests.cpp
@@ -26,6 +26,8 @@
 
 #include "TestBase.h"
 #include "core/Core.h"
+#include "unit/ProvenanceTestHelper.h"
+#include "repository/VolatileContentRepository.h"
 
 #include "core/FlowFile.h"
 #include "core/Processor.h"
diff --git a/extensions/standard-processors/tests/unit/GetFileTests.cpp b/extensions/standard-processors/tests/unit/GetFileTests.cpp
index 5f7671d..c20a739 100644
--- a/extensions/standard-processors/tests/unit/GetFileTests.cpp
+++ b/extensions/standard-processors/tests/unit/GetFileTests.cpp
@@ -26,6 +26,7 @@
 #include "GetFile.h"
 #include "utils/file/FileUtils.h"
 #include "utils/TestUtils.h"
+#include "unit/ProvenanceTestHelper.h"
 
 #ifdef WIN32
 #include <fileapi.h>
@@ -47,8 +48,8 @@ class GetFileTestController {
 
 GetFileTestController::GetFileTestController() {
   LogTestController::getInstance().setTrace<TestPlan>();
-  LogTestController::getInstance().setTrace<processors::GetFile>();
-  LogTestController::getInstance().setTrace<processors::LogAttribute>();
+  LogTestController::getInstance().setTrace<minifi::processors::GetFile>();
+  LogTestController::getInstance().setTrace<minifi::processors::LogAttribute>();
 
   test_plan_ = test_controller_.createPlan();
   auto repo = std::make_shared<TestRepository>();
@@ -63,9 +64,9 @@ GetFileTestController::GetFileTestController() {
 
   // Build MiNiFi processing graph
   get_file_processor_ = test_plan_->addProcessor("GetFile", "Get");
-  test_plan_->setProperty(get_file_processor_, processors::GetFile::Directory.getName(), temp_dir);
+  test_plan_->setProperty(get_file_processor_, minifi::processors::GetFile::Directory.getName(), temp_dir);
   auto log_attr = test_plan_->addProcessor("LogAttribute", "Log", core::Relationship("success", "description"), true);
-  test_plan_->setProperty(log_attr, processors::LogAttribute::FlowFilesToLog.getName(), "0");
+  test_plan_->setProperty(log_attr, minifi::processors::LogAttribute::FlowFilesToLog.getName(), "0");
 
   // Write test input.
   std::ofstream in_file_stream(input_file_name_);
@@ -98,8 +99,8 @@ void GetFileTestController::runSession() {
 TEST_CASE("GetFile ignores hidden files and files larger than MaxSize", "[GetFile]") {
   GetFileTestController test_controller;
   SECTION("IgnoreHiddenFile not set, so defaults to true") {}
-  SECTION("IgnoreHiddenFile set to true explicitly") { test_controller.setProperty(processors::GetFile::IgnoreHiddenFile, "true"); }
-  test_controller.setProperty(processors::GetFile::MaxSize, "50 B");
+  SECTION("IgnoreHiddenFile set to true explicitly") { test_controller.setProperty(minifi::processors::GetFile::IgnoreHiddenFile, "true"); }
+  test_controller.setProperty(minifi::processors::GetFile::MaxSize, "50 B");
 
   test_controller.runSession();
 
@@ -117,7 +118,7 @@ TEST_CASE("GetFile ignores hidden files and files larger than MaxSize", "[GetFil
 TEST_CASE("GetFile onSchedule() throws if the required Directory property is not set", "[GetFile]") {
   TestController test_controller;
   LogTestController::getInstance().setTrace<TestPlan>();
-  LogTestController::getInstance().setTrace<processors::GetFile>();
+  LogTestController::getInstance().setTrace<minifi::processors::GetFile>();
   auto plan = test_controller.createPlan();
   auto get_file = plan->addProcessor("GetFile", "Get");
   REQUIRE_THROWS_AS(plan->runNextProcessor(), minifi::Exception);
@@ -126,7 +127,7 @@ TEST_CASE("GetFile onSchedule() throws if the required Directory property is not
 TEST_CASE("GetFile removes the source file if KeepSourceFile is false") {
   GetFileTestController test_controller;
   SECTION("KeepSourceFile is not set, so defaults to false") {}
-  SECTION("KeepSourceFile is set to false explicitly") { test_controller.setProperty(processors::GetFile::KeepSourceFile, "false"); }
+  SECTION("KeepSourceFile is set to false explicitly") { test_controller.setProperty(minifi::processors::GetFile::KeepSourceFile, "false"); }
 
   test_controller.runSession();
 
@@ -135,7 +136,7 @@ TEST_CASE("GetFile removes the source file if KeepSourceFile is false") {
 
 TEST_CASE("GetFile keeps the source file if KeepSourceFile is true") {
   GetFileTestController test_controller;
-  test_controller.setProperty(processors::GetFile::KeepSourceFile, "true");
+  test_controller.setProperty(minifi::processors::GetFile::KeepSourceFile, "true");
 
   test_controller.runSession();
 
@@ -145,8 +146,8 @@ TEST_CASE("GetFile keeps the source file if KeepSourceFile is true") {
 TEST_CASE("GetFileHiddenPropertyCheck", "[getFileProperty]") {
   TestController testController;
   LogTestController::getInstance().setTrace<TestPlan>();
-  LogTestController::getInstance().setTrace<processors::GetFile>();
-  LogTestController::getInstance().setTrace<processors::LogAttribute>();
+  LogTestController::getInstance().setTrace<minifi::processors::GetFile>();
+  LogTestController::getInstance().setTrace<minifi::processors::LogAttribute>();
   auto plan = testController.createPlan();
 
   auto temp_path = testController.createTempDirectory();
@@ -154,11 +155,11 @@ TEST_CASE("GetFileHiddenPropertyCheck", "[getFileProperty]") {
   std::string hidden_in_file(temp_path + utils::file::FileUtils::get_separator() + ".testfifo");
 
   auto get_file = plan->addProcessor("GetFile", "Get");
-  plan->setProperty(get_file, processors::GetFile::IgnoreHiddenFile.getName(), "false");
+  plan->setProperty(get_file, minifi::processors::GetFile::IgnoreHiddenFile.getName(), "false");
 
-  plan->setProperty(get_file, processors::GetFile::Directory.getName(), temp_path);
+  plan->setProperty(get_file, minifi::processors::GetFile::Directory.getName(), temp_path);
   auto log_attr = plan->addProcessor("LogAttribute", "Log", core::Relationship("success", "description"), true);
-  plan->setProperty(log_attr, processors::LogAttribute::FlowFilesToLog.getName(), "0");
+  plan->setProperty(log_attr, minifi::processors::LogAttribute::FlowFilesToLog.getName(), "0");
 
   std::ofstream in_file_stream(in_file);
   in_file_stream << "This file is not hidden" << std::endl;
diff --git a/extensions/standard-processors/tests/unit/HashContentTest.cpp b/extensions/standard-processors/tests/unit/HashContentTest.cpp
index fd672bc..e9893b1 100644
--- a/extensions/standard-processors/tests/unit/HashContentTest.cpp
+++ b/extensions/standard-processors/tests/unit/HashContentTest.cpp
@@ -29,6 +29,7 @@
 #include "TestBase.h"
 #include "TestUtils.h"
 #include "core/Core.h"
+#include "unit/ProvenanceTestHelper.h"
 
 #include "core/FlowFile.h"
 #include "core/Processor.h"
@@ -131,7 +132,7 @@ TEST_CASE("Test usage of ExtractText", "[extracttextTest]") {
 }
 
 TEST_CASE("TestingFailOnEmptyProperty", "[HashContentPropertiesCheck]") {
-  using processors::HashContent;
+  using minifi::processors::HashContent;
   TestController testController;
   LogTestController::getInstance().setTrace<org::apache::nifi::minifi::processors::LogAttribute>();
   LogTestController::getInstance().setTrace<org::apache::nifi::minifi::processors::GetFile>();
diff --git a/extensions/standard-processors/tests/unit/ProcessorTests.cpp b/extensions/standard-processors/tests/unit/ProcessorTests.cpp
index 0242704..7620f28 100644
--- a/extensions/standard-processors/tests/unit/ProcessorTests.cpp
+++ b/extensions/standard-processors/tests/unit/ProcessorTests.cpp
@@ -242,8 +242,8 @@ TEST_CASE("TestConnectionFull", "[ConnectionFull]") {
   content_repo->initialize(std::make_shared<minifi::Configure>());
   std::shared_ptr<core::Processor> processor = std::make_shared<org::apache::nifi::minifi::processors::GenerateFlowFile>("GFF");
   processor->initialize();
-  processor->setProperty(processors::GenerateFlowFile::BatchSize, "10");
-  processor->setProperty(processors::GenerateFlowFile::FileSize, "0");
+  processor->setProperty(minifi::processors::GenerateFlowFile::BatchSize, "10");
+  processor->setProperty(minifi::processors::GenerateFlowFile::FileSize, "0");
 
 
   std::shared_ptr<core::Repository> test_repo = std::make_shared<TestRepository>();
@@ -455,7 +455,7 @@ TEST_CASE("Test Find file", "[getfileCreate3]") {
   REQUIRE(2 == repo->getRepoMap().size());
 
   for (auto entry : repo->getRepoMap()) {
-    provenance::ProvenanceEventRecord newRecord;
+    minifi::provenance::ProvenanceEventRecord newRecord;
     newRecord.DeSerialize(reinterpret_cast<uint8_t*>(const_cast<char*>(entry.second.data())), entry.second.length());
 
     bool found = false;
@@ -478,7 +478,7 @@ TEST_CASE("Test Find file", "[getfileCreate3]") {
       org::apache::nifi::minifi::core::reporting::SiteToSiteProvenanceReportingTask>(processorReport);
   taskReport->setBatchSize(1);
   std::vector<std::shared_ptr<core::SerializableComponent>> recordsReport;
-  recordsReport.push_back(std::make_shared<provenance::ProvenanceEventRecord>());
+  recordsReport.push_back(std::make_shared<minifi::provenance::ProvenanceEventRecord>());
   processorReport->incrementActiveTasks();
   processorReport->setScheduledState(core::ScheduledState::RUNNING);
   std::string jsonStr;
@@ -634,7 +634,7 @@ ProcessorWithIncomingConnectionTest::ProcessorWithIncomingConnectionTest() {
   const auto content_repo = std::make_shared<core::repository::VolatileContentRepository>();
   content_repo->initialize(std::make_shared<minifi::Configure>());
 
-  processor_ = std::make_shared<processors::LogAttribute>("test_processor");
+  processor_ = std::make_shared<minifi::processors::LogAttribute>("test_processor");
   incoming_connection_ = std::make_shared<minifi::Connection>(repo, content_repo, "incoming_connection");
   incoming_connection_->addRelationship(core::Relationship{"success", ""});
   incoming_connection_->setDestinationUUID(processor_->getUUID());
diff --git a/extensions/standard-processors/tests/unit/PutFileTests.cpp b/extensions/standard-processors/tests/unit/PutFileTests.cpp
index c5c1a3d..0903006 100644
--- a/extensions/standard-processors/tests/unit/PutFileTests.cpp
+++ b/extensions/standard-processors/tests/unit/PutFileTests.cpp
@@ -216,7 +216,7 @@ TEST_CASE("PutFileTestFileExistsIgnore", "[getfileputpfile]") {
   file.open(movedFile.str(), std::ios::out);
   file << "tempFile";
   file.close();
-  auto filemodtime = fileutils::FileUtils::last_write_time(movedFile.str());
+  auto filemodtime = utils::file::last_write_time(movedFile.str());
 
   std::this_thread::sleep_for(std::chrono::milliseconds(1000));
   plan->reset();
@@ -237,7 +237,7 @@ TEST_CASE("PutFileTestFileExistsIgnore", "[getfileputpfile]") {
   // verify that the fle was moved
   REQUIRE(false == std::ifstream(ss.str()).good());
   REQUIRE(true == std::ifstream(movedFile.str()).good());
-  REQUIRE(filemodtime == fileutils::FileUtils::last_write_time(movedFile.str()));
+  REQUIRE(filemodtime == utils::file::last_write_time(movedFile.str()));
   LogTestController::getInstance().reset();
 }
 
@@ -282,7 +282,7 @@ TEST_CASE("PutFileTestFileExistsReplace", "[getfileputpfile]") {
   file.open(movedFile.str(), std::ios::out);
   file << "tempFile";
   file.close();
-  auto filemodtime = fileutils::FileUtils::last_write_time(movedFile.str());
+  auto filemodtime = utils::file::last_write_time(movedFile.str());
 
   std::this_thread::sleep_for(std::chrono::milliseconds(1000));
   plan->reset();
@@ -304,7 +304,7 @@ TEST_CASE("PutFileTestFileExistsReplace", "[getfileputpfile]") {
   REQUIRE(false == std::ifstream(ss.str()).good());
   REQUIRE(true == std::ifstream(movedFile.str()).good());
 #ifndef WIN32
-  REQUIRE(filemodtime != fileutils::FileUtils::last_write_time(movedFile.str()));
+  REQUIRE(filemodtime != utils::file::last_write_time(movedFile.str()));
 #endif
   LogTestController::getInstance().reset();
 }
diff --git a/extensions/standard-processors/tests/unit/TailFileTests.cpp b/extensions/standard-processors/tests/unit/TailFileTests.cpp
index b76beae..8e7eb08 100644
--- a/extensions/standard-processors/tests/unit/TailFileTests.cpp
+++ b/extensions/standard-processors/tests/unit/TailFileTests.cpp
@@ -598,8 +598,8 @@ TEST_CASE("TailFile processes a very long line correctly", "[simple]") {
 
   TestController testController;
   LogTestController::getInstance().setTrace<TestPlan>();
-  LogTestController::getInstance().setTrace<processors::TailFile>();
-  LogTestController::getInstance().setTrace<processors::LogAttribute>();
+  LogTestController::getInstance().setTrace<minifi::processors::TailFile>();
+  LogTestController::getInstance().setTrace<minifi::processors::LogAttribute>();
   LogTestController::getInstance().setTrace<core::ProcessSession>();
 
   std::shared_ptr<TestPlan> plan = testController.createPlan();
@@ -617,9 +617,9 @@ TEST_CASE("TailFile processes a very long line correctly", "[simple]") {
   plan->setProperty(tailfile, org::apache::nifi::minifi::processors::TailFile::Delimiter.getName(), "\n");
 
   std::shared_ptr<core::Processor> log_attr = plan->addProcessor("LogAttribute", "Log", core::Relationship("success", "description"), true);
-  plan->setProperty(log_attr, processors::LogAttribute::FlowFilesToLog.getName(), "0");
-  plan->setProperty(log_attr, processors::LogAttribute::LogPayload.getName(), "true");
-  plan->setProperty(log_attr, processors::LogAttribute::HexencodePayload.getName(), "true");
+  plan->setProperty(log_attr, minifi::processors::LogAttribute::FlowFilesToLog.getName(), "0");
+  plan->setProperty(log_attr, minifi::processors::LogAttribute::LogPayload.getName(), "true");
+  plan->setProperty(log_attr, minifi::processors::LogAttribute::HexencodePayload.getName(), "true");
 
   uint32_t line_length = 0U;
   SECTION("with line length 80") {
@@ -627,15 +627,15 @@ TEST_CASE("TailFile processes a very long line correctly", "[simple]") {
   }
   SECTION("with line length 200") {
     line_length = 200U;
-    plan->setProperty(log_attr, processors::LogAttribute::MaxPayloadLineLength.getName(), "200");
+    plan->setProperty(log_attr, minifi::processors::LogAttribute::MaxPayloadLineLength.getName(), "200");
   }
   SECTION("with line length 0") {
     line_length = 0U;
-    plan->setProperty(log_attr, processors::LogAttribute::MaxPayloadLineLength.getName(), "0");
+    plan->setProperty(log_attr, minifi::processors::LogAttribute::MaxPayloadLineLength.getName(), "0");
   }
   SECTION("with line length 16") {
     line_length = 16U;
-    plan->setProperty(log_attr, processors::LogAttribute::MaxPayloadLineLength.getName(), "16");
+    plan->setProperty(log_attr, minifi::processors::LogAttribute::MaxPayloadLineLength.getName(), "16");
   }
 
   testController.runSession(plan, true);
@@ -675,8 +675,8 @@ TEST_CASE("TailFile processes a long line followed by multiple newlines correctl
 
   TestController testController;
   LogTestController::getInstance().setTrace<TestPlan>();
-  LogTestController::getInstance().setTrace<processors::TailFile>();
-  LogTestController::getInstance().setTrace<processors::LogAttribute>();
+  LogTestController::getInstance().setTrace<minifi::processors::TailFile>();
+  LogTestController::getInstance().setTrace<minifi::processors::LogAttribute>();
   LogTestController::getInstance().setTrace<core::ProcessSession>();
 
   std::shared_ptr<TestPlan> plan = testController.createPlan();
@@ -693,9 +693,9 @@ TEST_CASE("TailFile processes a long line followed by multiple newlines correctl
   plan->setProperty(tailfile, org::apache::nifi::minifi::processors::TailFile::Delimiter.getName(), "\n");
 
   std::shared_ptr<core::Processor> log_attr = plan->addProcessor("LogAttribute", "Log", core::Relationship("success", "description"), true);
-  plan->setProperty(log_attr, processors::LogAttribute::FlowFilesToLog.getName(), "0");
-  plan->setProperty(log_attr, processors::LogAttribute::LogPayload.getName(), "true");
-  plan->setProperty(log_attr, processors::LogAttribute::HexencodePayload.getName(), "true");
+  plan->setProperty(log_attr, minifi::processors::LogAttribute::FlowFilesToLog.getName(), "0");
+  plan->setProperty(log_attr, minifi::processors::LogAttribute::LogPayload.getName(), "true");
+  plan->setProperty(log_attr, minifi::processors::LogAttribute::HexencodePayload.getName(), "true");
 
   testController.runSession(plan, true);
 
@@ -760,8 +760,8 @@ TEST_CASE("TailFile onSchedule throws in Multiple mode if the Base Directory doe
 
   std::shared_ptr<TestPlan> plan = testController.createPlan();
   std::shared_ptr<core::Processor> tailfile = plan->addProcessor("TailFile", "tailfileProc");
-  plan->setProperty(tailfile, processors::TailFile::TailMode.getName(), "Multiple file");
-  plan->setProperty(tailfile, processors::TailFile::FileName.getName(), ".*\\.log");
+  plan->setProperty(tailfile, minifi::processors::TailFile::TailMode.getName(), "Multiple file");
+  plan->setProperty(tailfile, minifi::processors::TailFile::FileName.getName(), ".*\\.log");
 
   SECTION("No Base Directory is set") {
     REQUIRE_THROWS(plan->runNextProcessor());
@@ -769,15 +769,15 @@ TEST_CASE("TailFile onSchedule throws in Multiple mode if the Base Directory doe
 
   SECTION("Base Directory is set, but does not exist") {
     std::string nonexistent_file_name{"/no-such-directory/688b01d0-9e5f-11ea-820d-f338c34d39a1/31d1a81a-9e5f-11ea-a77b-8b27d514a452"};
-    plan->setProperty(tailfile, processors::TailFile::BaseDirectory.getName(), nonexistent_file_name);
+    plan->setProperty(tailfile, minifi::processors::TailFile::BaseDirectory.getName(), nonexistent_file_name);
     REQUIRE_THROWS(plan->runNextProcessor());
   }
 
   SECTION("Base Directory is set and it exists") {
     std::string directory = testController.createTempDirectory();
 
-    plan->setProperty(tailfile, processors::TailFile::BaseDirectory.getName(), directory);
-    plan->setProperty(tailfile, processors::TailFile::LookupFrequency.getName(), "0 sec");
+    plan->setProperty(tailfile, minifi::processors::TailFile::BaseDirectory.getName(), directory);
+    plan->setProperty(tailfile, minifi::processors::TailFile::LookupFrequency.getName(), "0 sec");
     REQUIRE_NOTHROW(plan->runNextProcessor());
   }
 }
@@ -789,8 +789,8 @@ TEST_CASE("TailFile finds and finishes the renamed file and continues with the n
   size_t expected_pieces = std::count(NEWLINE_FILE.begin(), NEWLINE_FILE.end(), DELIM);  // The last piece is left as considered unfinished
 
   LogTestController::getInstance().setTrace<TestPlan>();
-  LogTestController::getInstance().setTrace<processors::TailFile>();
-  LogTestController::getInstance().setTrace<processors::LogAttribute>();
+  LogTestController::getInstance().setTrace<minifi::processors::TailFile>();
+  LogTestController::getInstance().setTrace<minifi::processors::LogAttribute>();
 
   auto plan = testController.createPlan();
   auto dir = testController.createTempDirectory();
@@ -802,10 +802,10 @@ TEST_CASE("TailFile finds and finishes the renamed file and continues with the n
 
   // Build MiNiFi processing graph
   auto tail_file = plan->addProcessor("TailFile", "Tail");
-  plan->setProperty(tail_file, processors::TailFile::Delimiter.getName(), std::string(1, DELIM));
+  plan->setProperty(tail_file, minifi::processors::TailFile::Delimiter.getName(), std::string(1, DELIM));
 
   SECTION("single") {
-    plan->setProperty(tail_file, processors::TailFile::FileName.getName(), in_file);
+    plan->setProperty(tail_file, minifi::processors::TailFile::FileName.getName(), in_file);
   }
   SECTION("Multiple") {
     plan->setProperty(tail_file, org::apache::nifi::minifi::processors::TailFile::FileName.getName(), "testfifo.txt");
@@ -815,8 +815,8 @@ TEST_CASE("TailFile finds and finishes the renamed file and continues with the n
   }
 
   auto log_attr = plan->addProcessor("LogAttribute", "Log", core::Relationship("success", "description"), true);
-  plan->setProperty(log_attr, processors::LogAttribute::FlowFilesToLog.getName(), "0");
-  plan->setProperty(log_attr, processors::LogAttribute::LogPayload.getName(), "true");
+  plan->setProperty(log_attr, minifi::processors::LogAttribute::FlowFilesToLog.getName(), "0");
+  plan->setProperty(log_attr, minifi::processors::LogAttribute::LogPayload.getName(), "true");
   // Log as many FFs as it can to make sure exactly the expected amount is produced
 
   plan->runNextProcessor();  // Tail
@@ -856,8 +856,8 @@ TEST_CASE("TailFile finds and finishes multiple rotated files and continues with
   const char DELIM = ':';
 
   LogTestController::getInstance().setTrace<TestPlan>();
-  LogTestController::getInstance().setTrace<processors::TailFile>();
-  LogTestController::getInstance().setTrace<processors::LogAttribute>();
+  LogTestController::getInstance().setTrace<minifi::processors::TailFile>();
+  LogTestController::getInstance().setTrace<minifi::processors::LogAttribute>();
   auto plan = testController.createPlan();
   auto dir = testController.createTempDirectory();
   std::string test_file = dir + utils::file::FileUtils::get_separator() + "fruits.log";
@@ -868,10 +868,10 @@ TEST_CASE("TailFile finds and finishes multiple rotated files and continues with
 
   // Build MiNiFi processing graph
   auto tail_file = plan->addProcessor("TailFile", "Tail");
-  plan->setProperty(tail_file, processors::TailFile::Delimiter.getName(), std::string(1, DELIM));
-  plan->setProperty(tail_file, processors::TailFile::FileName.getName(), test_file);
+  plan->setProperty(tail_file, minifi::processors::TailFile::Delimiter.getName(), std::string(1, DELIM));
+  plan->setProperty(tail_file, minifi::processors::TailFile::FileName.getName(), test_file);
   auto log_attr = plan->addProcessor("LogAttribute", "Log", core::Relationship("success", "description"), true);
-  plan->setProperty(log_attr, processors::LogAttribute::FlowFilesToLog.getName(), "0");
+  plan->setProperty(log_attr, minifi::processors::LogAttribute::FlowFilesToLog.getName(), "0");
 
   testController.runSession(plan, true);
 
@@ -957,8 +957,8 @@ TEST_CASE("TailFile rotation works with multiple input files", "[rotation][multi
   TestController testController;
 
   LogTestController::getInstance().setTrace<TestPlan>();
-  LogTestController::getInstance().setTrace<processors::TailFile>();
-  LogTestController::getInstance().setTrace<processors::LogAttribute>();
+  LogTestController::getInstance().setTrace<minifi::processors::TailFile>();
+  LogTestController::getInstance().setTrace<minifi::processors::LogAttribute>();
 
   auto plan = testController.createPlan();
   auto dir = testController.createTempDirectory();
@@ -968,14 +968,14 @@ TEST_CASE("TailFile rotation works with multiple input files", "[rotation][multi
   createTempFile(dir, "color.log", "red\nblue\nyellow\npurple\n");
 
   auto tail_file = plan->addProcessor("TailFile", "Tail");
-  plan->setProperty(tail_file, processors::TailFile::Delimiter.getName(), "\n");
-  plan->setProperty(tail_file, processors::TailFile::TailMode.getName(), "Multiple file");
-  plan->setProperty(tail_file, processors::TailFile::FileName.getName(), ".*\\.log");
-  plan->setProperty(tail_file, processors::TailFile::BaseDirectory.getName(), dir);
-  plan->setProperty(tail_file, processors::TailFile::LookupFrequency.getName(), "0 sec");
+  plan->setProperty(tail_file, minifi::processors::TailFile::Delimiter.getName(), "\n");
+  plan->setProperty(tail_file, minifi::processors::TailFile::TailMode.getName(), "Multiple file");
+  plan->setProperty(tail_file, minifi::processors::TailFile::FileName.getName(), ".*\\.log");
+  plan->setProperty(tail_file, minifi::processors::TailFile::BaseDirectory.getName(), dir);
+  plan->setProperty(tail_file, minifi::processors::TailFile::LookupFrequency.getName(), "0 sec");
 
   auto log_attribute = plan->addProcessor("LogAttribute", "Log", core::Relationship("success", "description"), true);
-  plan->setProperty(log_attribute, processors::LogAttribute::FlowFilesToLog.getName(), "0");
+  plan->setProperty(log_attribute, minifi::processors::LogAttribute::FlowFilesToLog.getName(), "0");
 
   testController.runSession(plan, true);
 
@@ -1021,8 +1021,8 @@ TEST_CASE("TailFile handles the Rolling Filename Pattern property correctly", "[
   TestController testController;
 
   LogTestController::getInstance().setTrace<TestPlan>();
-  LogTestController::getInstance().setTrace<processors::TailFile>();
-  LogTestController::getInstance().setTrace<processors::LogAttribute>();
+  LogTestController::getInstance().setTrace<minifi::processors::TailFile>();
+  LogTestController::getInstance().setTrace<minifi::processors::LogAttribute>();
 
   auto plan = testController.createPlan();
   auto dir = testController.createTempDirectory();
@@ -1030,8 +1030,8 @@ TEST_CASE("TailFile handles the Rolling Filename Pattern property correctly", "[
 
   // Build MiNiFi processing graph
   auto tail_file = plan->addProcessor("TailFile", "Tail");
-  plan->setProperty(tail_file, processors::TailFile::Delimiter.getName(), "\n");
-  plan->setProperty(tail_file, processors::TailFile::FileName.getName(), test_file);
+  plan->setProperty(tail_file, minifi::processors::TailFile::Delimiter.getName(), "\n");
+  plan->setProperty(tail_file, minifi::processors::TailFile::FileName.getName(), test_file);
 
   std::vector<std::string> expected_log_lines;
 
@@ -1042,21 +1042,21 @@ TEST_CASE("TailFile handles the Rolling Filename Pattern property correctly", "[
   }
 
   SECTION("If a pattern is set to exclude the unrelated file, we no longer pick it up") {
-    plan->setProperty(tail_file, processors::TailFile::RollingFilenamePattern.getName(), "${filename}.*.log");
+    plan->setProperty(tail_file, minifi::processors::TailFile::RollingFilenamePattern.getName(), "${filename}.*.log");
 
     expected_log_lines = std::vector<std::string>{"Logged 1 flow file",
                                                   "test.rolled.11-24.log"};
   }
 
   SECTION("We can also set the pattern to not include the file name") {
-    plan->setProperty(tail_file, processors::TailFile::RollingFilenamePattern.getName(), "other_roll??.log");
+    plan->setProperty(tail_file, minifi::processors::TailFile::RollingFilenamePattern.getName(), "other_roll??.log");
 
     expected_log_lines = std::vector<std::string>{"Logged 1 flow file",
                                                   "other_rolled.11-24.log"};
   }
 
   auto log_attr = plan->addProcessor("LogAttribute", "Log", core::Relationship("success", "description"), true);
-  plan->setProperty(log_attr, processors::LogAttribute::FlowFilesToLog.getName(), "0");
+  plan->setProperty(log_attr, minifi::processors::LogAttribute::FlowFilesToLog.getName(), "0");
 
   testController.runSession(plan, true);
 
@@ -1084,8 +1084,8 @@ TEST_CASE("TailFile finds and finishes the renamed file and continues with the n
   TestController testController;
 
   LogTestController::getInstance().setTrace<TestPlan>();
-  LogTestController::getInstance().setTrace<processors::TailFile>();
-  LogTestController::getInstance().setTrace<processors::LogAttribute>();
+  LogTestController::getInstance().setTrace<minifi::processors::TailFile>();
+  LogTestController::getInstance().setTrace<minifi::processors::LogAttribute>();
 
   auto log_dir = testController.createTempDirectory();
 
@@ -1103,10 +1103,10 @@ TEST_CASE("TailFile finds and finishes the renamed file and continues with the n
   {
     auto test_plan = testController.createPlan(configuration, state_dir.c_str());
     auto tail_file = test_plan->addProcessor("TailFile", tail_file_uuid, "Tail", {success_relationship});
-    test_plan->setProperty(tail_file, processors::TailFile::FileName.getName(), test_file);
+    test_plan->setProperty(tail_file, minifi::processors::TailFile::FileName.getName(), test_file);
     auto log_attr = test_plan->addProcessor("LogAttribute", "Log", success_relationship, true);
-    test_plan->setProperty(log_attr, processors::LogAttribute::FlowFilesToLog.getName(), "0");
-    test_plan->setProperty(log_attr, processors::LogAttribute::LogPayload.getName(), "true");
+    test_plan->setProperty(log_attr, minifi::processors::LogAttribute::FlowFilesToLog.getName(), "0");
+    test_plan->setProperty(log_attr, minifi::processors::LogAttribute::LogPayload.getName(), "true");
 
     testController.runSession(test_plan, true);
     REQUIRE(LogTestController::getInstance().contains("Logged 3 flow files"));
@@ -1124,10 +1124,10 @@ TEST_CASE("TailFile finds and finishes the renamed file and continues with the n
   {
     auto test_plan = testController.createPlan(configuration, state_dir.c_str());
     auto tail_file = test_plan->addProcessor("TailFile", tail_file_uuid, "Tail", {success_relationship});
-    test_plan->setProperty(tail_file, processors::TailFile::FileName.getName(), test_file);
+    test_plan->setProperty(tail_file, minifi::processors::TailFile::FileName.getName(), test_file);
     auto log_attr = test_plan->addProcessor("LogAttribute", "Log", success_relationship, true);
-    test_plan->setProperty(log_attr, processors::LogAttribute::FlowFilesToLog.getName(), "0");
-    test_plan->setProperty(log_attr, processors::LogAttribute::LogPayload.getName(), "true");
+    test_plan->setProperty(log_attr, minifi::processors::LogAttribute::FlowFilesToLog.getName(), "0");
+    test_plan->setProperty(log_attr, minifi::processors::LogAttribute::LogPayload.getName(), "true");
 
     testController.runSession(test_plan, true);
     REQUIRE(LogTestController::getInstance().contains("Logged 2 flow files"));
@@ -1140,17 +1140,17 @@ TEST_CASE("TailFile yields if no work is done", "[yield]") {
   TestController testController;
 
   LogTestController::getInstance().setTrace<TestPlan>();
-  LogTestController::getInstance().setTrace<processors::TailFile>();
-  LogTestController::getInstance().setTrace<processors::LogAttribute>();
+  LogTestController::getInstance().setTrace<minifi::processors::TailFile>();
+  LogTestController::getInstance().setTrace<minifi::processors::LogAttribute>();
 
   auto temp_directory = testController.createTempDirectory();
   auto plan = testController.createPlan();
   auto tail_file = plan->addProcessor("TailFile", "Tail");
-  plan->setProperty(tail_file, processors::TailFile::Delimiter.getName(), "\n");
-  plan->setProperty(tail_file, processors::TailFile::TailMode.getName(), "Multiple file");
-  plan->setProperty(tail_file, processors::TailFile::FileName.getName(), ".*\\.log");
-  plan->setProperty(tail_file, processors::TailFile::BaseDirectory.getName(), temp_directory);
-  plan->setProperty(tail_file, processors::TailFile::LookupFrequency.getName(), "0 sec");
+  plan->setProperty(tail_file, minifi::processors::TailFile::Delimiter.getName(), "\n");
+  plan->setProperty(tail_file, minifi::processors::TailFile::TailMode.getName(), "Multiple file");
+  plan->setProperty(tail_file, minifi::processors::TailFile::FileName.getName(), ".*\\.log");
+  plan->setProperty(tail_file, minifi::processors::TailFile::BaseDirectory.getName(), temp_directory);
+  plan->setProperty(tail_file, minifi::processors::TailFile::LookupFrequency.getName(), "0 sec");
 
   SECTION("Empty log file => yield") {
     createTempFile(temp_directory, "first.log", "");
@@ -1213,17 +1213,17 @@ TEST_CASE("TailFile yields if no work is done on any files", "[yield][multiple_f
   TestController testController;
 
   LogTestController::getInstance().setTrace<TestPlan>();
-  LogTestController::getInstance().setTrace<processors::TailFile>();
-  LogTestController::getInstance().setTrace<processors::LogAttribute>();
+  LogTestController::getInstance().setTrace<minifi::processors::TailFile>();
+  LogTestController::getInstance().setTrace<minifi::processors::LogAttribute>();
 
   auto temp_directory = testController.createTempDirectory();
   auto plan = testController.createPlan();
   auto tail_file = plan->addProcessor("TailFile", "Tail");
-  plan->setProperty(tail_file, processors::TailFile::Delimiter.getName(), "\n");
-  plan->setProperty(tail_file, processors::TailFile::TailMode.getName(), "Multiple file");
-  plan->setProperty(tail_file, processors::TailFile::FileName.getName(), ".*\\.log");
-  plan->setProperty(tail_file, processors::TailFile::BaseDirectory.getName(), temp_directory);
-  plan->setProperty(tail_file, processors::TailFile::LookupFrequency.getName(), "0 sec");
+  plan->setProperty(tail_file, minifi::processors::TailFile::Delimiter.getName(), "\n");
+  plan->setProperty(tail_file, minifi::processors::TailFile::TailMode.getName(), "Multiple file");
+  plan->setProperty(tail_file, minifi::processors::TailFile::FileName.getName(), ".*\\.log");
+  plan->setProperty(tail_file, minifi::processors::TailFile::BaseDirectory.getName(), temp_directory);
+  plan->setProperty(tail_file, minifi::processors::TailFile::LookupFrequency.getName(), "0 sec");
 
   createTempFile(temp_directory, "first.log", "stuff\n");
   createTempFile(temp_directory, "second.log", "different stuff\n");
@@ -1270,8 +1270,8 @@ TEST_CASE("TailFile doesn't yield if work was done on rotated files only", "[yie
   TestController testController;
 
   LogTestController::getInstance().setTrace<TestPlan>();
-  LogTestController::getInstance().setTrace<processors::TailFile>();
-  LogTestController::getInstance().setTrace<processors::LogAttribute>();
+  LogTestController::getInstance().setTrace<minifi::processors::TailFile>();
+  LogTestController::getInstance().setTrace<minifi::processors::LogAttribute>();
 
   auto temp_directory = testController.createTempDirectory();
   std::string full_file_name = createTempFile(temp_directory, "test.log", "stuff\n");
@@ -1279,8 +1279,8 @@ TEST_CASE("TailFile doesn't yield if work was done on rotated files only", "[yie
   auto plan = testController.createPlan();
 
   auto tail_file = plan->addProcessor("TailFile", "Tail");
-  plan->setProperty(tail_file, processors::TailFile::Delimiter.getName(), "\n");
-  plan->setProperty(tail_file, processors::TailFile::FileName.getName(), full_file_name);
+  plan->setProperty(tail_file, minifi::processors::TailFile::Delimiter.getName(), "\n");
+  plan->setProperty(tail_file, minifi::processors::TailFile::FileName.getName(), full_file_name);
 
   testController.runSession(plan, true);
 
@@ -1329,8 +1329,8 @@ TEST_CASE("TailFile handles the Delimiter setting correctly", "[delimiter]") {
     TestController testController;
 
     LogTestController::getInstance().setTrace<TestPlan>();
-    LogTestController::getInstance().setTrace<processors::TailFile>();
-    LogTestController::getInstance().setTrace<processors::LogAttribute>();
+    LogTestController::getInstance().setTrace<minifi::processors::TailFile>();
+    LogTestController::getInstance().setTrace<minifi::processors::LogAttribute>();
 
     auto temp_directory = testController.createTempDirectory();
 
@@ -1340,11 +1340,11 @@ TEST_CASE("TailFile handles the Delimiter setting correctly", "[delimiter]") {
     auto plan = testController.createPlan();
 
     auto tail_file = plan->addProcessor("TailFile", "Tail");
-    plan->setProperty(tail_file, processors::TailFile::Delimiter.getName(), test_case.first);
-    plan->setProperty(tail_file, processors::TailFile::FileName.getName(), full_file_name);
+    plan->setProperty(tail_file, minifi::processors::TailFile::Delimiter.getName(), test_case.first);
+    plan->setProperty(tail_file, minifi::processors::TailFile::FileName.getName(), full_file_name);
 
     auto log_attribute = plan->addProcessor("LogAttribute", "Log", core::Relationship("success", "description"), true);
-    plan->setProperty(log_attribute, processors::LogAttribute::FlowFilesToLog.getName(), "0");
+    plan->setProperty(log_attribute, minifi::processors::LogAttribute::FlowFilesToLog.getName(), "0");
 
     testController.runSession(plan, true);
 
@@ -1363,8 +1363,8 @@ TEST_CASE("TailFile handles Unix/Windows line endings correctly", "[simple]") {
   TestController testController;
 
   LogTestController::getInstance().setTrace<TestPlan>();
-  LogTestController::getInstance().setTrace<processors::TailFile>();
-  LogTestController::getInstance().setTrace<processors::LogAttribute>();
+  LogTestController::getInstance().setTrace<minifi::processors::TailFile>();
+  LogTestController::getInstance().setTrace<minifi::processors::LogAttribute>();
 
   auto temp_directory = testController.createTempDirectory();
   std::string full_file_name = createTempFile(temp_directory, "test.log", "line1\nline two\n", std::ios::out);  // write in text mode
@@ -1372,10 +1372,10 @@ TEST_CASE("TailFile handles Unix/Windows line endings correctly", "[simple]") {
   auto plan = testController.createPlan();
 
   auto tail_file = plan->addProcessor("TailFile", "Tail");
-  plan->setProperty(tail_file, processors::TailFile::FileName.getName(), full_file_name);
+  plan->setProperty(tail_file, minifi::processors::TailFile::FileName.getName(), full_file_name);
 
   auto log_attribute = plan->addProcessor("LogAttribute", "Log", core::Relationship("success", "description"), true);
-  plan->setProperty(log_attribute, processors::LogAttribute::FlowFilesToLog.getName(), "0");
+  plan->setProperty(log_attribute, minifi::processors::LogAttribute::FlowFilesToLog.getName(), "0");
 
   testController.runSession(plan, true);
 
@@ -1393,8 +1393,8 @@ TEST_CASE("TailFile can tail all files in a directory recursively", "[multiple]"
   TestController testController;
 
   LogTestController::getInstance().setTrace<TestPlan>();
-  LogTestController::getInstance().setTrace<processors::TailFile>();
-  LogTestController::getInstance().setTrace<processors::LogAttribute>();
+  LogTestController::getInstance().setTrace<minifi::processors::TailFile>();
+  LogTestController::getInstance().setTrace<minifi::processors::LogAttribute>();
 
   std::string base_directory = testController.createTempDirectory();
   std::string directory1 = base_directory + utils::file::FileUtils::get_separator() + "one";
@@ -1413,14 +1413,14 @@ TEST_CASE("TailFile can tail all files in a directory recursively", "[multiple]"
   auto plan = testController.createPlan();
 
   auto tail_file = plan->addProcessor("TailFile", "Tail");
-  plan->setProperty(tail_file, processors::TailFile::TailMode.getName(), "Multiple file");
-  plan->setProperty(tail_file, processors::TailFile::BaseDirectory.getName(), base_directory);
-  plan->setProperty(tail_file, processors::TailFile::LookupFrequency.getName(), "0 sec");
-  plan->setProperty(tail_file, processors::TailFile::FileName.getName(), ".*\\.log");
+  plan->setProperty(tail_file, minifi::processors::TailFile::TailMode.getName(), "Multiple file");
+  plan->setProperty(tail_file, minifi::processors::TailFile::BaseDirectory.getName(), base_directory);
+  plan->setProperty(tail_file, minifi::processors::TailFile::LookupFrequency.getName(), "0 sec");
+  plan->setProperty(tail_file, minifi::processors::TailFile::FileName.getName(), ".*\\.log");
 
   auto log_attribute = plan->addProcessor("LogAttribute", "Log", core::Relationship("success", "description"), true);
-  plan->setProperty(log_attribute, processors::LogAttribute::FlowFilesToLog.getName(), "0");
-  plan->setProperty(log_attribute, processors::LogAttribute::LogPayload.getName(), "true");
+  plan->setProperty(log_attribute, minifi::processors::LogAttribute::FlowFilesToLog.getName(), "0");
+  plan->setProperty(log_attribute, minifi::processors::LogAttribute::LogPayload.getName(), "true");
 
   SECTION("Recursive lookup not set => defaults to false") {
     testController.runSession(plan, true);
@@ -1428,13 +1428,13 @@ TEST_CASE("TailFile can tail all files in a directory recursively", "[multiple]"
   }
 
   SECTION("Recursive lookup set to false") {
-    plan->setProperty(tail_file, processors::TailFile::RecursiveLookup.getName(), "false");
+    plan->setProperty(tail_file, minifi::processors::TailFile::RecursiveLookup.getName(), "false");
     testController.runSession(plan, true);
     REQUIRE(LogTestController::getInstance().contains("Logged 1 flow file"));
   }
 
   SECTION("Recursive lookup set to true") {
-    plan->setProperty(tail_file, processors::TailFile::RecursiveLookup.getName(), "true");
+    plan->setProperty(tail_file, minifi::processors::TailFile::RecursiveLookup.getName(), "true");
     testController.runSession(plan, true);
     REQUIRE(LogTestController::getInstance().contains("Logged 5 flow files"));
   }
@@ -1444,8 +1444,8 @@ TEST_CASE("TailFile interprets the lookup frequency property correctly", "[multi
   TestController testController;
 
   LogTestController::getInstance().setTrace<TestPlan>();
-  LogTestController::getInstance().setTrace<processors::TailFile>();
-  LogTestController::getInstance().setTrace<processors::LogAttribute>();
+  LogTestController::getInstance().setTrace<minifi::processors::TailFile>();
+  LogTestController::getInstance().setTrace<minifi::processors::LogAttribute>();
 
   std::string directory = testController.createTempDirectory();
   createTempFile(directory, "test.red.log", "cherry\n");
@@ -1453,23 +1453,23 @@ TEST_CASE("TailFile interprets the lookup frequency property correctly", "[multi
   auto plan = testController.createPlan();
 
   auto tail_file = plan->addProcessor("TailFile", "Tail");
-  plan->setProperty(tail_file, processors::TailFile::TailMode.getName(), "Multiple file");
-  plan->setProperty(tail_file, processors::TailFile::BaseDirectory.getName(), directory);
-  plan->setProperty(tail_file, processors::TailFile::FileName.getName(), ".*\\.log");
+  plan->setProperty(tail_file, minifi::processors::TailFile::TailMode.getName(), "Multiple file");
+  plan->setProperty(tail_file, minifi::processors::TailFile::BaseDirectory.getName(), directory);
+  plan->setProperty(tail_file, minifi::processors::TailFile::FileName.getName(), ".*\\.log");
 
   auto log_attribute = plan->addProcessor("LogAttribute", "Log", core::Relationship("success", "description"), true);
-  plan->setProperty(log_attribute, processors::LogAttribute::FlowFilesToLog.getName(), "0");
+  plan->setProperty(log_attribute, minifi::processors::LogAttribute::FlowFilesToLog.getName(), "0");
 
   SECTION("Lookup frequency not set => defaults to 10 minutes") {
     testController.runSession(plan, true);
 
-    std::shared_ptr<processors::TailFile> tail_file_processor = std::dynamic_pointer_cast<processors::TailFile>(tail_file);
+    const auto tail_file_processor = std::dynamic_pointer_cast<minifi::processors::TailFile>(tail_file);
     REQUIRE(tail_file_processor);
     REQUIRE(tail_file_processor->getLookupFrequency() == std::chrono::minutes{10});
   }
 
   SECTION("Lookup frequency set to zero => new files are picked up immediately") {
-    plan->setProperty(tail_file, processors::TailFile::LookupFrequency.getName(), "0 sec");
+    plan->setProperty(tail_file, minifi::processors::TailFile::LookupFrequency.getName(), "0 sec");
     testController.runSession(plan, true);
     REQUIRE(LogTestController::getInstance().contains("Logged 1 flow files"));
 
@@ -1485,7 +1485,7 @@ TEST_CASE("TailFile interprets the lookup frequency property correctly", "[multi
   }
 
   SECTION("Lookup frequency set to 500 ms => new files are only picked up after 500 ms") {
-    plan->setProperty(tail_file, processors::TailFile::LookupFrequency.getName(), "500 ms");
+    plan->setProperty(tail_file, minifi::processors::TailFile::LookupFrequency.getName(), "500 ms");
     testController.runSession(plan, true);
     REQUIRE(LogTestController::getInstance().contains("Logged 1 flow files"));
 
@@ -1507,7 +1507,7 @@ TEST_CASE("TailFile interprets the lookup frequency property correctly", "[multi
   }
 
   SECTION("Lookup frequency set to a thousand years => files already present when started are still picked up") {
-    plan->setProperty(tail_file, processors::TailFile::LookupFrequency.getName(), "365000 days");
+    plan->setProperty(tail_file, minifi::processors::TailFile::LookupFrequency.getName(), "365000 days");
     testController.runSession(plan, true);
     REQUIRE(LogTestController::getInstance().contains("Logged 1 flow files"));
   }
diff --git a/extensions/standard-processors/tests/unit/YamlConnectionParserTest.cpp b/extensions/standard-processors/tests/unit/YamlConnectionParserTest.cpp
index 79bad0e..a0015e8 100644
--- a/extensions/standard-processors/tests/unit/YamlConnectionParserTest.cpp
+++ b/extensions/standard-processors/tests/unit/YamlConnectionParserTest.cpp
@@ -68,8 +68,8 @@ TEST_CASE("Connections components are parsed from yaml", "[YamlConfiguration]")
     const utils::Identifier expected_source_id = utils::generateUUID();
     const utils::Identifier expected_destination_id = utils::generateUUID();
     std::string serialized_yaml;
-    parent.addProcessor(std::static_pointer_cast<core::Processor>(std::make_shared<processors::TailFile>("TailFile_1", expected_source_id)));
-    parent.addProcessor(std::static_pointer_cast<core::Processor>(std::make_shared<processors::TailFile>("TailFile_2", expected_destination_id)));
+    parent.addProcessor(std::static_pointer_cast<core::Processor>(std::make_shared<minifi::processors::TailFile>("TailFile_1", expected_source_id)));
+    parent.addProcessor(std::static_pointer_cast<core::Processor>(std::make_shared<minifi::processors::TailFile>("TailFile_2", expected_destination_id)));
     SECTION("Directly from configuration") {
       serialized_yaml = std::string {
           "source id: " + expected_source_id.to_string() + "\n"
diff --git a/extensions/usb-camera/GetUSBCamera.cpp b/extensions/usb-camera/GetUSBCamera.cpp
index fcfd699..2eaff3e 100644
--- a/extensions/usb-camera/GetUSBCamera.cpp
+++ b/extensions/usb-camera/GetUSBCamera.cpp
@@ -403,8 +403,7 @@ GetUSBCamera::PNGWriteCallback::PNGWriteCallback(std::shared_ptr<std::mutex> wri
     : png_write_mtx_(std::move(write_mtx)),
       frame_(frame),
       width_(width),
-      height_(height),
-      logger_(logging::LoggerFactory<PNGWriteCallback>::getLogger()) {
+      height_(height) {
 }
 
 int64_t GetUSBCamera::PNGWriteCallback::process(const std::shared_ptr<io::BaseStream>& stream) {
@@ -468,8 +467,7 @@ int64_t GetUSBCamera::PNGWriteCallback::process(const std::shared_ptr<io::BaseSt
 }
 
 GetUSBCamera::RawWriteCallback::RawWriteCallback(uvc_frame_t *frame)
-    : frame_(frame),
-      logger_(logging::LoggerFactory<RawWriteCallback>::getLogger()) {
+    : frame_(frame) {
 }
 
 int64_t GetUSBCamera::RawWriteCallback::process(const std::shared_ptr<io::BaseStream>& stream) {
diff --git a/extensions/usb-camera/GetUSBCamera.h b/extensions/usb-camera/GetUSBCamera.h
index 2f133b6..307b03c 100644
--- a/extensions/usb-camera/GetUSBCamera.h
+++ b/extensions/usb-camera/GetUSBCamera.h
@@ -41,13 +41,12 @@ namespace processors {
 class GetUSBCamera : public core::Processor {
  public:
   explicit GetUSBCamera(const std::string &name, const utils::Identifier &uuid = {})
-      : core::Processor(name, uuid),
-        logger_(logging::LoggerFactory<GetUSBCamera>::getLogger()) {
+      : core::Processor(name, uuid) {
     png_write_mtx_ = std::make_shared<std::mutex>();
     dev_access_mtx_ = std::make_shared<std::recursive_mutex>();
   }
 
-  virtual ~GetUSBCamera() {
+  ~GetUSBCamera() override {
     // We cannot interrupt the PNG write process
     std::lock_guard<std::mutex> lock(*png_write_mtx_);
     cleanupUvc();
@@ -79,7 +78,7 @@ class GetUSBCamera : public core::Processor {
   typedef struct {
     core::ProcessContext *context;
     core::ProcessSessionFactory *session_factory;
-    std::shared_ptr<logging::Logger> logger;
+    std::shared_ptr<core::logging::Logger> logger;
     std::shared_ptr<std::mutex> png_write_mtx;
     std::shared_ptr<std::recursive_mutex> dev_access_mtx;
     std::string format;
@@ -105,7 +104,7 @@ class GetUSBCamera : public core::Processor {
     const uint32_t width_;
     const uint32_t height_;
     std::vector<uint8_t> png_output_buf_;
-    std::shared_ptr<logging::Logger> logger_;
+    std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<PNGWriteCallback>::getLogger();
   };
 
   // Write callback for storing camera capture data as a raw RGB pixel buffer
@@ -116,11 +115,11 @@ class GetUSBCamera : public core::Processor {
 
    private:
     uvc_frame_t *frame_;
-    std::shared_ptr<logging::Logger> logger_;
+    std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<RawWriteCallback>::getLogger();
   };
 
  private:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<GetUSBCamera>::getLogger();
   static std::shared_ptr<utils::IdGenerator> id_generator_;
 
   std::shared_ptr<std::thread> camera_thread_;
diff --git a/extensions/windows-event-log/Bookmark.cpp b/extensions/windows-event-log/Bookmark.cpp
index 7896c1b..34363e9 100644
--- a/extensions/windows-event-log/Bookmark.cpp
+++ b/extensions/windows-event-log/Bookmark.cpp
@@ -21,6 +21,7 @@
 #include <direct.h>
 #include <vector>
 #include <unordered_map>
+#include <utility>
 #include <fstream>
 
 #include "wel/UnicodeConversion.h"
@@ -39,8 +40,8 @@ Bookmark::Bookmark(const std::wstring& channel,
     const utils::Identifier& uuid,
     bool processOldEvents,
     std::shared_ptr<core::CoreComponentStateManager> state_manager,
-    std::shared_ptr<logging::Logger> logger)
-    : logger_(logger),
+    std::shared_ptr<core::logging::Logger> logger)
+    : logger_(std::move(logger)),
       state_manager_(state_manager) {
   std::unordered_map<std::string, std::string> state_map;
   if (state_manager_->get(state_map) && state_map.count(BOOKMARK_KEY) == 1U) {
diff --git a/extensions/windows-event-log/Bookmark.h b/extensions/windows-event-log/Bookmark.h
index 8def098..34602b2 100644
--- a/extensions/windows-event-log/Bookmark.h
+++ b/extensions/windows-event-log/Bookmark.h
@@ -27,6 +27,7 @@
 #include "core/ProcessContext.h"
 #include "core/ProcessSession.h"
 #include "wel/UniqueEvtHandle.h"
+#include "logging/Logger.h"
 
 namespace org {
 namespace apache {
@@ -44,7 +45,7 @@ class Bookmark {
       const utils::Identifier& uuid,
       bool processOldEvents,
       std::shared_ptr<core::CoreComponentStateManager> state_manager,
-      std::shared_ptr<logging::Logger> logger);
+      std::shared_ptr<core::logging::Logger> logger);
   ~Bookmark();
   explicit operator bool() const noexcept;
 
@@ -58,7 +59,7 @@ class Bookmark {
 
   using unique_evt_handle = wel::unique_evt_handle;
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_;
   std::shared_ptr<core::CoreComponentStateManager> state_manager_;
   std::string filePath_;
   bool ok_{};
diff --git a/extensions/windows-event-log/CollectorInitiatedSubscription.cpp b/extensions/windows-event-log/CollectorInitiatedSubscription.cpp
index 415df05..bbbe447 100644
--- a/extensions/windows-event-log/CollectorInitiatedSubscription.cpp
+++ b/extensions/windows-event-log/CollectorInitiatedSubscription.cpp
@@ -59,7 +59,7 @@ static core::Relationship s_success("success", "Relationship for successfully co
 
 
 CollectorInitiatedSubscription::CollectorInitiatedSubscription(const std::string& name, const utils::Identifier& uuid)
-  : core::Processor(name, uuid), logger_(logging::LoggerFactory<CollectorInitiatedSubscription>::getLogger()) {
+  : core::Processor(name, uuid), logger_(core::logging::LoggerFactory<CollectorInitiatedSubscription>::getLogger()) {
   char buff[MAX_COMPUTERNAME_LENGTH + 1];
   DWORD size = sizeof(buff);
   if (GetComputerName(buff, &size)) {
diff --git a/extensions/windows-event-log/CollectorInitiatedSubscription.h b/extensions/windows-event-log/CollectorInitiatedSubscription.h
index 50a2d17..9e092e8 100644
--- a/extensions/windows-event-log/CollectorInitiatedSubscription.h
+++ b/extensions/windows-event-log/CollectorInitiatedSubscription.h
@@ -84,7 +84,7 @@ class CollectorInitiatedSubscription : public core::Processor {
 
  private:
   // Logger
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_;
   moodycamel::ConcurrentQueue<std::string> renderedXMLs_;
   std::string provenanceUri_;
   std::string computerName_;
diff --git a/extensions/windows-event-log/ConsumeWindowsEventLog.cpp b/extensions/windows-event-log/ConsumeWindowsEventLog.cpp
index 340b9e3..3d5c7eb 100644
--- a/extensions/windows-event-log/ConsumeWindowsEventLog.cpp
+++ b/extensions/windows-event-log/ConsumeWindowsEventLog.cpp
@@ -44,6 +44,7 @@
 #include "core/Resource.h"
 #include "Bookmark.h"
 #include "utils/Deleters.h"
+#include "logging/LoggerConfiguration.h"
 
 #include "utils/gsl.h"
 
@@ -177,7 +178,7 @@ core::Relationship ConsumeWindowsEventLog::Success("success", "Relationship for
 
 ConsumeWindowsEventLog::ConsumeWindowsEventLog(const std::string& name, const utils::Identifier& uuid)
   : core::Processor(name, uuid),
-    logger_(logging::LoggerFactory<ConsumeWindowsEventLog>::getLogger()) {
+    logger_(core::logging::LoggerFactory<ConsumeWindowsEventLog>::getLogger()) {
   char buff[MAX_COMPUTERNAME_LENGTH + 1];
   DWORD size = sizeof(buff);
   if (GetComputerName(buff, &size)) {
@@ -467,8 +468,8 @@ void ConsumeWindowsEventLog::substituteXMLPercentageItems(pugi::xml_document& do
   }
 
   struct TreeWalker: public pugi::xml_tree_walker {
-    TreeWalker(HMODULE hMsobjsDll, std::unordered_map<std::string, std::string>& xmlPercentageItemsResolutions, std::shared_ptr<logging::Logger> logger)
-      : hMsobjsDll_(hMsobjsDll), xmlPercentageItemsResolutions_(xmlPercentageItemsResolutions), logger_(logger) {
+    TreeWalker(HMODULE hMsobjsDll, std::unordered_map<std::string, std::string>& xmlPercentageItemsResolutions, std::shared_ptr<core::logging::Logger> logger)
+      : hMsobjsDll_(hMsobjsDll), xmlPercentageItemsResolutions_(xmlPercentageItemsResolutions), logger_(std::move(logger)) {
     }
 
     bool for_each(pugi::xml_node& node) override {
@@ -534,7 +535,7 @@ void ConsumeWindowsEventLog::substituteXMLPercentageItems(pugi::xml_document& do
    private:
     HMODULE hMsobjsDll_;
     std::unordered_map<std::string, std::string>& xmlPercentageItemsResolutions_;
-    std::shared_ptr<logging::Logger> logger_;
+    std::shared_ptr<core::logging::Logger> logger_;
   } treeWalker(hMsobjsDll_, xmlPercentageItemsResolutions_, logger_);
 
   doc.traverse(treeWalker);
diff --git a/extensions/windows-event-log/ConsumeWindowsEventLog.h b/extensions/windows-event-log/ConsumeWindowsEventLog.h
index ea26a4d..a614b6c 100644
--- a/extensions/windows-event-log/ConsumeWindowsEventLog.h
+++ b/extensions/windows-event-log/ConsumeWindowsEventLog.h
@@ -146,7 +146,7 @@ class ConsumeWindowsEventLog : public core::Processor {
     const std::shared_ptr<core::ProcessSession> &session, const EVT_HANDLE& event_query_results);
 
   // Logger
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_;
   std::shared_ptr<core::CoreComponentStateManager> state_manager_;
   wel::METADATA_NAMES header_names_;
   std::string header_delimiter_;
diff --git a/extensions/windows-event-log/TailEventLog.h b/extensions/windows-event-log/TailEventLog.h
index 9b8b548..958f3a9 100644
--- a/extensions/windows-event-log/TailEventLog.h
+++ b/extensions/windows-event-log/TailEventLog.h
@@ -40,7 +40,7 @@ const char log_name[255] = "Application";
 class TailEventLog : public core::Processor {
  public:
   explicit TailEventLog(const std::string& name, const utils::Identifier& uuid = {})
-  : core::Processor(name, uuid), logger_(logging::LoggerFactory<TailEventLog>::getLogger()), max_events_(1) {
+      : core::Processor(name, uuid) {
   }
   virtual ~TailEventLog() = default;
   static const std::string ProcessorName;
@@ -129,13 +129,13 @@ class TailEventLog : public core::Processor {
  private:
   std::mutex log_mutex_;
   std::string log_source_;
-  uint32_t max_events_;
+  uint32_t max_events_ = 1;
   DWORD current_record_;
   DWORD num_records_;
 
   HANDLE log_handle_;
   // Logger
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<TailEventLog>::getLogger();
 };
 
 } /* namespace processors */
diff --git a/libminifi/include/Connection.h b/libminifi/include/Connection.h
index 70f354d..39a3ec4 100644
--- a/libminifi/include/Connection.h
+++ b/libminifi/include/Connection.h
@@ -207,7 +207,7 @@ class Connection : public core::Connectable, public std::enable_shared_from_this
   utils::FlowFileQueue queue_;
   // flow repository
   // Logger
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<Connection>::getLogger();
   // Prevent default copy constructor and assignment operation
   // Only support pass by reference or pointer
   Connection(const Connection &parent);
diff --git a/libminifi/include/FlowControlProtocol.h b/libminifi/include/FlowControlProtocol.h
index 3238cc2..9321371 100644
--- a/libminifi/include/FlowControlProtocol.h
+++ b/libminifi/include/FlowControlProtocol.h
@@ -152,8 +152,7 @@ class FlowControlProtocol {
   /*!
    * Create a new control protocol
    */
-  FlowControlProtocol(FlowController *controller, const std::shared_ptr<Configure> &configure)
-      : logger_(logging::LoggerFactory<FlowControlProtocol>::getLogger()) {
+  FlowControlProtocol(FlowController *controller, const std::shared_ptr<Configure> &configure) {
     _controller = controller;
     _socket = 0;
     _serverName = "localhost";
@@ -251,7 +250,7 @@ class FlowControlProtocol {
   }
 
   std::mutex mutex_;
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<FlowControlProtocol>::getLogger();
   // NiFi server Name
   std::string _serverName;
   // NiFi server port
diff --git a/libminifi/include/FlowController.h b/libminifi/include/FlowController.h
index 50ae9e9..d3b039d 100644
--- a/libminifi/include/FlowController.h
+++ b/libminifi/include/FlowController.h
@@ -236,7 +236,7 @@ class FlowController : public core::controller::ForwardingControllerServiceProvi
 
  private:
   std::chrono::milliseconds shutdown_check_interval_{1000};
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<FlowController>::getLogger();
   std::string serial_number_;
 };
 
diff --git a/libminifi/include/FlowFileRecord.h b/libminifi/include/FlowFileRecord.h
index 334c37f..03b2699 100644
--- a/libminifi/include/FlowFileRecord.h
+++ b/libminifi/include/FlowFileRecord.h
@@ -82,7 +82,7 @@ class FlowFileRecord : public core::FlowFile {
   static std::atomic<uint64_t> local_flow_seq_number_;
 
  private:
-  static std::shared_ptr<logging::Logger> logger_;
+  static std::shared_ptr<core::logging::Logger> logger_;
 };
 
 }  // namespace minifi
diff --git a/libminifi/include/RemoteProcessorGroupPort.h b/libminifi/include/RemoteProcessorGroupPort.h
index f3bcc35..fea3e7a 100644
--- a/libminifi/include/RemoteProcessorGroupPort.h
+++ b/libminifi/include/RemoteProcessorGroupPort.h
@@ -91,7 +91,7 @@ class RemoteProcessorGroupPort : public core::Processor {
         http_enabled_(false),
         bypass_rest_api_(false),
         ssl_service(nullptr),
-        logger_(logging::LoggerFactory<RemoteProcessorGroupPort>::getLogger()) {
+        logger_(core::logging::LoggerFactory<RemoteProcessorGroupPort>::getLogger()) {
     client_type_ = sitetosite::CLIENT_TYPE::RAW;
     stream_factory_ = stream_factory;
     protocol_uuid_ = uuid;
@@ -233,7 +233,7 @@ class RemoteProcessorGroupPort : public core::Processor {
 
  private:
   // Logger
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_;
   static const char* RPG_SSL_CONTEXT_SERVICE_NAME;
 };
 
diff --git a/libminifi/include/ResourceClaim.h b/libminifi/include/ResourceClaim.h
index 9a4070d..95b42fc 100644
--- a/libminifi/include/ResourceClaim.h
+++ b/libminifi/include/ResourceClaim.h
@@ -103,7 +103,7 @@ class ResourceClaim {
 
  private:
   // Logger
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_;
   // Prevent default copy constructor and assignment operation
   // Only support pass by reference or pointer
   ResourceClaim(const ResourceClaim &parent);
diff --git a/libminifi/include/SchedulingAgent.h b/libminifi/include/SchedulingAgent.h
index 6f6a3d9..be95708 100644
--- a/libminifi/include/SchedulingAgent.h
+++ b/libminifi/include/SchedulingAgent.h
@@ -67,7 +67,7 @@ class SchedulingAgent {
         content_repo_(content_repo),
         thread_pool_(thread_pool),
         controller_service_provider_(controller_service_provider),
-        logger_(logging::LoggerFactory<SchedulingAgent>::getLogger()),
+        logger_(core::logging::LoggerFactory<SchedulingAgent>::getLogger()),
         alert_time_(configuration->getInt(Configure::nifi_flow_engine_alert_period, SCHEDULING_WATCHDOG_DEFAULT_ALERT_PERIOD_MS)) {
     running_ = false;
     repo_ = repo;
@@ -155,7 +155,7 @@ class SchedulingAgent {
   };
 
   // Logger
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_;
   mutable std::mutex watchdog_mtx_;  // used to protect the set below
   std::set<SchedulingInfo> scheduled_processors_;  // set was chosen to avoid iterator invalidation
   std::unique_ptr<utils::CallBackTimer> watchDogTimer_;
diff --git a/libminifi/include/ThreadedSchedulingAgent.h b/libminifi/include/ThreadedSchedulingAgent.h
index 2b1b461..3033afa 100644
--- a/libminifi/include/ThreadedSchedulingAgent.h
+++ b/libminifi/include/ThreadedSchedulingAgent.h
@@ -36,7 +36,6 @@ namespace apache {
 namespace nifi {
 namespace minifi {
 
-
 /**
  * An abstract scheduling agent which creates and manages a pool of threads for
  * each processor scheduled.
@@ -50,11 +49,10 @@ class ThreadedSchedulingAgent : public SchedulingAgent {
   ThreadedSchedulingAgent(const gsl::not_null<core::controller::ControllerServiceProvider*> controller_service_provider, std::shared_ptr<core::Repository> repo,
         std::shared_ptr<core::Repository> flow_repo, std::shared_ptr<core::ContentRepository> content_repo,
         std::shared_ptr<Configure> configuration,  utils::ThreadPool<utils::TaskRescheduleInfo> &thread_pool)
-      : SchedulingAgent(controller_service_provider, repo, flow_repo, content_repo, configuration, thread_pool),
-        logger_(logging::LoggerFactory<ThreadedSchedulingAgent>::getLogger()) {
+      : SchedulingAgent(controller_service_provider, repo, flow_repo, content_repo, configuration, thread_pool) {
   }
   // Destructor
-  virtual ~ThreadedSchedulingAgent() = default;
+  ~ThreadedSchedulingAgent() override = default;
 
   // Run function for the thread
   virtual utils::TaskRescheduleInfo run(const std::shared_ptr<core::Processor> &processor, const std::shared_ptr<core::ProcessContext> &processContext,
@@ -62,18 +60,18 @@ class ThreadedSchedulingAgent : public SchedulingAgent {
 
  public:
   // schedule, overwritten by different DrivenTimerDrivenSchedulingAgent
-  virtual void schedule(std::shared_ptr<core::Processor> processor);
+  void schedule(std::shared_ptr<core::Processor> processor) override;
   // unschedule, overwritten by different DrivenTimerDrivenSchedulingAgent
-  virtual void unschedule(std::shared_ptr<core::Processor> processor);
+  void unschedule(std::shared_ptr<core::Processor> processor) override;
 
-  virtual void stop();
+  void stop() override;
 
  private:
   // Prevent default copy constructor and assignment operation
   // Only support pass by reference or pointer
   ThreadedSchedulingAgent(const ThreadedSchedulingAgent &parent);
   ThreadedSchedulingAgent &operator=(const ThreadedSchedulingAgent &parent);
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<ThreadedSchedulingAgent>::getLogger();
 
   std::set<utils::Identifier> processors_running_;  // Set just for easy usage
 };
diff --git a/libminifi/include/TimerDrivenSchedulingAgent.h b/libminifi/include/TimerDrivenSchedulingAgent.h
index 1481c18..c8f2a12 100644
--- a/libminifi/include/TimerDrivenSchedulingAgent.h
+++ b/libminifi/include/TimerDrivenSchedulingAgent.h
@@ -42,8 +42,7 @@ class TimerDrivenSchedulingAgent : public ThreadedSchedulingAgent {
   TimerDrivenSchedulingAgent(const gsl::not_null<core::controller::ControllerServiceProvider*> controller_service_provider, std::shared_ptr<core::Repository> repo,
                              std::shared_ptr<core::Repository> flow_repo, std::shared_ptr<core::ContentRepository> content_repo, std::shared_ptr<Configure> configure,
                              utils::ThreadPool<utils::TaskRescheduleInfo> &thread_pool)
-      : ThreadedSchedulingAgent(controller_service_provider, repo, flow_repo, content_repo, configure, thread_pool),
-        logger_(logging::LoggerFactory<TimerDrivenSchedulingAgent>::getLogger()) {
+      : ThreadedSchedulingAgent(controller_service_provider, repo, flow_repo, content_repo, configure, thread_pool) {
   }
 
   /**
@@ -58,7 +57,7 @@ class TimerDrivenSchedulingAgent : public ThreadedSchedulingAgent {
   TimerDrivenSchedulingAgent(const TimerDrivenSchedulingAgent &parent);
   TimerDrivenSchedulingAgent &operator=(const TimerDrivenSchedulingAgent &parent);
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<TimerDrivenSchedulingAgent>::getLogger();
 };
 
 }  // namespace minifi
diff --git a/libminifi/include/c2/C2Agent.h b/libminifi/include/c2/C2Agent.h
index 44ed1e0..a7f1dc9 100644
--- a/libminifi/include/c2/C2Agent.h
+++ b/libminifi/include/c2/C2Agent.h
@@ -70,7 +70,8 @@ class C2Agent : public state::UpdateController {
           const std::shared_ptr<state::StateMonitor> &updateSink,
           const std::shared_ptr<Configure> &configure,
           const std::shared_ptr<utils::file::FileSystem> &filesystem = std::make_shared<utils::file::FileSystem>());
-  virtual ~C2Agent() noexcept {
+
+  ~C2Agent() noexcept override {
     delete protocol_.load();
   }
 
@@ -224,7 +225,7 @@ class C2Agent : public state::UpdateController {
 
   std::atomic<C2Protocol*> protocol_;
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<C2Agent>::getLogger();
 
   utils::ThreadPool<utils::TaskRescheduleInfo> thread_pool_;
 
diff --git a/libminifi/include/c2/C2Client.h b/libminifi/include/c2/C2Client.h
index 16b3b01..08d242d 100644
--- a/libminifi/include/c2/C2Client.h
+++ b/libminifi/include/c2/C2Client.h
@@ -48,7 +48,7 @@ class C2Client : public core::Flow, public state::response::NodeReporter {
       std::shared_ptr<Configure> configuration, std::shared_ptr<core::Repository> provenance_repo,
       std::shared_ptr<core::Repository> flow_file_repo, std::shared_ptr<core::ContentRepository> content_repo,
       std::unique_ptr<core::FlowConfiguration> flow_configuration, std::shared_ptr<utils::file::FileSystem> filesystem,
-      std::shared_ptr<logging::Logger> logger = logging::LoggerFactory<C2Client>::getLogger());
+      std::shared_ptr<core::logging::Logger> logger = core::logging::LoggerFactory<C2Client>::getLogger());
 
   void initialize(core::controller::ControllerServiceProvider *controller, state::Pausable *pause_handler, const std::shared_ptr<state::StateMonitor> &update_sink);
 
@@ -74,7 +74,7 @@ class C2Client : public core::Flow, public state::response::NodeReporter {
  private:
   std::unique_ptr<C2Agent> c2_agent_;
   std::atomic_bool initialized_{false};
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_;
 
   mutable std::mutex metrics_mutex_;
   std::map<std::string, std::shared_ptr<state::response::ResponseNode>> root_response_nodes_;
diff --git a/libminifi/include/c2/ControllerSocketProtocol.h b/libminifi/include/c2/ControllerSocketProtocol.h
index 7637ef6..c56f66f 100644
--- a/libminifi/include/c2/ControllerSocketProtocol.h
+++ b/libminifi/include/c2/ControllerSocketProtocol.h
@@ -40,8 +40,7 @@ namespace c2 {
 class ControllerSocketProtocol : public HeartbeatReporter {
  public:
   ControllerSocketProtocol(const std::string& name, const utils::Identifier& uuid = {}) // NOLINT
-      : HeartbeatReporter(name, uuid),
-        logger_(logging::LoggerFactory<ControllerSocketProtocol>::getLogger()) {
+      : HeartbeatReporter(name, uuid) {
   }
 
   /**
@@ -80,7 +79,7 @@ class ControllerSocketProtocol : public HeartbeatReporter {
   std::shared_ptr<minifi::io::StreamFactory> stream_factory_;
 
  private:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<ControllerSocketProtocol>::getLogger();
 };
 
 }  // namespace c2
diff --git a/libminifi/include/c2/HeartbeatLogger.h b/libminifi/include/c2/HeartbeatLogger.h
index 587d4a6..cd4093f 100644
--- a/libminifi/include/c2/HeartbeatLogger.h
+++ b/libminifi/include/c2/HeartbeatLogger.h
@@ -37,7 +37,7 @@ class HeartbeatLogger : public RESTProtocol, public HeartbeatReporter {
   void initialize(core::controller::ControllerServiceProvider* controller, const std::shared_ptr<state::StateMonitor> &updateSink, const std::shared_ptr<Configure> &configure) override;
 
  private:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<HeartbeatLogger>::getLogger();
 };
 
 }  // namespace c2
diff --git a/libminifi/include/c2/protocols/RESTProtocol.h b/libminifi/include/c2/protocols/RESTProtocol.h
index e67a664..da34f98 100644
--- a/libminifi/include/c2/protocols/RESTProtocol.h
+++ b/libminifi/include/c2/protocols/RESTProtocol.h
@@ -66,7 +66,7 @@ class RESTProtocol : public HeartbeatJsonSerializer {
   bool minimize_updates_{false};
   std::map<std::string, C2Payload> nested_payloads_;
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<RESTProtocol>::getLogger();
 };
 
 }  // namespace c2
diff --git a/libminifi/include/c2/triggers/FileUpdateTrigger.h b/libminifi/include/c2/triggers/FileUpdateTrigger.h
index 0c4b338..230c02b 100644
--- a/libminifi/include/c2/triggers/FileUpdateTrigger.h
+++ b/libminifi/include/c2/triggers/FileUpdateTrigger.h
@@ -43,8 +43,7 @@ class FileUpdateTrigger : public C2Trigger {
   FileUpdateTrigger(const std::string& name, const utils::Identifier& uuid = {}) // NOLINT
       : C2Trigger(name, uuid),
         last_update_(0),
-        update_(false),
-        logger_(logging::LoggerFactory<FileUpdateTrigger>::getLogger()) {
+        update_(false) {
   }
 
   void initialize(const std::shared_ptr<minifi::Configure> &configuration) {
@@ -112,7 +111,7 @@ class FileUpdateTrigger : public C2Trigger {
   std::atomic<bool> update_;
 
  private:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<FileUpdateTrigger>::getLogger();
 };
 
 }  // namespace c2
diff --git a/libminifi/include/controllers/LinuxPowerManagementService.h b/libminifi/include/controllers/LinuxPowerManagementService.h
index 790f258..12910ce 100644
--- a/libminifi/include/controllers/LinuxPowerManagementService.h
+++ b/libminifi/include/controllers/LinuxPowerManagementService.h
@@ -48,8 +48,7 @@ class LinuxPowerManagerService : public ThreadManagementService {
         wait_period_(0),
         last_time_(0),
         trigger_(0),
-        low_battery_trigger_(0),
-        logger_(logging::LoggerFactory<LinuxPowerManagerService>::getLogger()) {
+        low_battery_trigger_(0) {
   }
 
   explicit LinuxPowerManagerService(const std::string &name, const std::shared_ptr<Configure> &configuration)
@@ -123,7 +122,7 @@ class LinuxPowerManagerService : public ThreadManagementService {
   std::string status_keyword_;
 
  private:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<LinuxPowerManagerService>::getLogger();
 };
 
 }  // namespace controllers
diff --git a/libminifi/include/controllers/NetworkPrioritizerService.h b/libminifi/include/controllers/NetworkPrioritizerService.h
index 02faa55..141a740 100644
--- a/libminifi/include/controllers/NetworkPrioritizerService.h
+++ b/libminifi/include/controllers/NetworkPrioritizerService.h
@@ -57,8 +57,7 @@ class NetworkPrioritizerService : public core::controller::ControllerService, pu
         timestamp_(0),
         bytes_per_token_(0),
         verify_interfaces_(true),
-        clock_(std::move(clock)),
-        logger_(logging::LoggerFactory<NetworkPrioritizerService>::getLogger()) {
+        clock_(std::move(clock)) {
   }
 
   explicit NetworkPrioritizerService(const std::string &name, const std::shared_ptr<Configure> &configuration)
@@ -127,7 +126,7 @@ class NetworkPrioritizerService : public core::controller::ControllerService, pu
 
  private:
   std::shared_ptr<utils::timeutils::Clock> clock_;
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<NetworkPrioritizerService>::getLogger();
 };
 
 }  // namespace controllers
diff --git a/libminifi/include/controllers/SSLContextService.h b/libminifi/include/controllers/SSLContextService.h
index 4162e31..a9c8b2e 100644
--- a/libminifi/include/controllers/SSLContextService.h
+++ b/libminifi/include/controllers/SSLContextService.h
@@ -85,14 +85,14 @@ class SSLContextService : public core::controller::ControllerService {
       : ControllerService(name, uuid),
         initialized_(false),
         valid_(false),
-        logger_(logging::LoggerFactory<SSLContextService>::getLogger()) {
+        logger_(core::logging::LoggerFactory<SSLContextService>::getLogger()) {
   }
 
   explicit SSLContextService(const std::string &name, const std::shared_ptr<Configure> &configuration)
       : ControllerService(name),
         initialized_(false),
         valid_(false),
-        logger_(logging::LoggerFactory<SSLContextService>::getLogger()) {
+        logger_(core::logging::LoggerFactory<SSLContextService>::getLogger()) {
     setConfiguration(configuration);
     initialize();
 
@@ -233,7 +233,7 @@ class SSLContextService : public core::controller::ControllerService {
 #endif  // WIN32
 #endif  // OPENSSL_SUPPORT
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_;
 };
 typedef int (SSLContextService::*ptr)(char *, int, int, void *);
 
diff --git a/libminifi/include/controllers/ThreadManagementService.h b/libminifi/include/controllers/ThreadManagementService.h
index 839941c..7af8e74 100644
--- a/libminifi/include/controllers/ThreadManagementService.h
+++ b/libminifi/include/controllers/ThreadManagementService.h
@@ -40,12 +40,12 @@ class ThreadManagementService : public core::controller::ControllerService {
  public:
   explicit ThreadManagementService(const std::string &name, const utils::Identifier &uuid = {})
       : ControllerService(name, uuid),
-        logger_(logging::LoggerFactory<ThreadManagementService>::getLogger()) {
+        logger_(core::logging::LoggerFactory<ThreadManagementService>::getLogger()) {
   }
 
   explicit ThreadManagementService(const std::string &name, const std::shared_ptr<Configure>& /*configuration*/)
       : ControllerService(name),
-        logger_(logging::LoggerFactory<ThreadManagementService>::getLogger()) {
+        logger_(core::logging::LoggerFactory<ThreadManagementService>::getLogger()) {
   }
 
   /**
@@ -108,7 +108,7 @@ class ThreadManagementService : public core::controller::ControllerService {
   std::atomic<int> thread_count_;
 
  private:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_;
 };
 
 }  // namespace controllers
diff --git a/libminifi/include/controllers/UpdatePolicyControllerService.h b/libminifi/include/controllers/UpdatePolicyControllerService.h
index bc6ded9..64377ee 100644
--- a/libminifi/include/controllers/UpdatePolicyControllerService.h
+++ b/libminifi/include/controllers/UpdatePolicyControllerService.h
@@ -42,10 +42,7 @@ namespace controllers {
 class UpdatePolicyControllerService : public core::controller::ControllerService, public std::enable_shared_from_this<UpdatePolicyControllerService> {
  public:
   explicit UpdatePolicyControllerService(const std::string &name, const utils::Identifier &uuid = {})
-      : ControllerService(name, uuid),
-        persist_updates_(false),
-        policy_(new state::UpdatePolicy(false)),
-        logger_(logging::LoggerFactory<UpdatePolicyControllerService>::getLogger()) {
+      : ControllerService(name, uuid) {
   }
 
   explicit UpdatePolicyControllerService(const std::string &name, const std::shared_ptr<Configure> &configuration)
@@ -59,15 +56,15 @@ class UpdatePolicyControllerService : public core::controller::ControllerService
   MINIFIAPI static core::Property AllowedProperties;
   MINIFIAPI static core::Property DisallowedProperties;
 
-  void initialize();
+  void initialize() override;
 
-  void yield();
+  void yield() override;
 
-  bool isRunning();
+  bool isRunning() override;
 
-  bool isWorkAvailable();
+  bool isWorkAvailable() override;
 
-  void onEnable();
+  void onEnable() override;
 
   bool canUpdate(const std::string &property) const {
     return policy_->canUpdate(property);
@@ -78,9 +75,9 @@ class UpdatePolicyControllerService : public core::controller::ControllerService
   }
 
  private:
-  bool persist_updates_;
-  std::unique_ptr<state::UpdatePolicy> policy_;
-  std::shared_ptr<logging::Logger> logger_;
+  bool persist_updates_ = false;
+  std::unique_ptr<state::UpdatePolicy> policy_ = std::make_unique<state::UpdatePolicy>(false);
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<UpdatePolicyControllerService>::getLogger();
 };
 
 }  // namespace controllers
diff --git a/libminifi/include/controllers/keyvalue/AbstractAutoPersistingKeyValueStoreService.h b/libminifi/include/controllers/keyvalue/AbstractAutoPersistingKeyValueStoreService.h
index 89ee0c6..a59b336 100644
--- a/libminifi/include/controllers/keyvalue/AbstractAutoPersistingKeyValueStoreService.h
+++ b/libminifi/include/controllers/keyvalue/AbstractAutoPersistingKeyValueStoreService.h
@@ -61,7 +61,7 @@ class AbstractAutoPersistingKeyValueStoreService : virtual public PersistableKey
   void persistingThreadFunc();
 
  private:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<AbstractAutoPersistingKeyValueStoreService>::getLogger();
 
   void stopPersistingThread();
 };
diff --git a/libminifi/include/core/ConfigurationFactory.h b/libminifi/include/core/ConfigurationFactory.h
index ae0016f..1d648f2 100644
--- a/libminifi/include/core/ConfigurationFactory.h
+++ b/libminifi/include/core/ConfigurationFactory.h
@@ -33,15 +33,7 @@ namespace minifi {
 namespace core {
 
 template<typename T>
-typename std::enable_if<!class_operations<T>::value, T*>::type instantiate(
-    const std::shared_ptr<core::Repository>& /*repo*/, const std::shared_ptr<core::Repository>& /*flow_file_repo*/,
-    const std::shared_ptr<core::ContentRepository>& /*content_repo*/, std::shared_ptr<Configure> /*configuration*/,
-    const std::optional<std::string>& /*path*/, const std::shared_ptr<utils::file::FileSystem>& /*filesystem*/) {
-  throw std::runtime_error("Cannot instantiate class");
-}
-
-template<typename T>
-typename std::enable_if<class_operations<T>::value, T*>::type instantiate(
+T* instantiate(
     const std::shared_ptr<core::Repository> &repo, const std::shared_ptr<core::Repository> &flow_file_repo,
     const std::shared_ptr<core::ContentRepository> &content_repo, const std::shared_ptr<io::StreamFactory> &stream_factory,
     std::shared_ptr<Configure> configuration, const std::optional<std::string>& path,
diff --git a/libminifi/include/core/Core.h b/libminifi/include/core/Core.h
index 11635f3..c4c1ea7 100644
--- a/libminifi/include/core/Core.h
+++ b/libminifi/include/core/Core.h
@@ -20,10 +20,7 @@
 #ifndef WIN32_LEAN_AND_MEAN
 #define WIN32_LEAN_AND_MEAN 1
 #endif
-#include <properties/Configure.h>
 
-#include <cstdlib>
-#include <iostream>
 #include <memory>
 #include <string>
 
@@ -66,31 +63,19 @@
 #endif
 
 #include "utils/Id.h"
+#include "properties/Configure.h"
 
 /**
  * namespace aliasing
  */
-namespace org {
-namespace apache {
-namespace nifi {
-namespace minifi {
-namespace utils {
-namespace file {
-}
-}
-namespace processors {
-}
-namespace provenance {
-
-}
-namespace core {
+namespace org::apache::nifi::minifi::core {
 
 template<typename T>
 static inline std::string getClassName() {
 #ifndef WIN32
   char *b = abi::__cxa_demangle(typeid(T).name(), 0, 0, 0);
   if (b == nullptr)
-    return std::string();
+    return {};
   std::string name = b;
   std::free(b);
   return name;
@@ -106,31 +91,8 @@ static inline std::string getClassName() {
 }
 
 template<typename T>
-struct class_operations {
-  template<typename Q = T>
-  static std::true_type canDestruct(decltype(std::declval<Q>().~Q()) *) {
-    return std::true_type();
-  }
-
-  template<typename Q = T>
-  static std::false_type canDestruct(...) {
-    return std::false_type();
-  }
-
-  typedef decltype(canDestruct<T>(0)) type;
-
-  static const bool value = type::value;
-};
-
-template<typename T>
-typename std::enable_if<!class_operations<T>::value, std::shared_ptr<T>>::type instantiate(const std::string name = "") {
-  (void)name;  // against unused variable warnings
-  throw std::runtime_error("Cannot instantiate class");
-}
-
-template<typename T>
-typename std::enable_if<class_operations<T>::value, std::shared_ptr<T>>::type instantiate(const std::string name = "") {
-  if (name.length() == 0) {
+std::shared_ptr<T> instantiate(const std::string name = {}) {
+  if (name.empty()) {
     return std::make_shared<T>();
   } else {
     return std::make_shared<T>(name);
@@ -144,31 +106,16 @@ typename std::enable_if<class_operations<T>::value, std::shared_ptr<T>>::type in
  */
 class CoreComponent {
  public:
-  /**
-   * Constructor that sets the name and uuid.
-   */
-
-  explicit CoreComponent(const std::string &name, const utils::Identifier &uuid = {}, const std::shared_ptr<utils::IdGenerator> &idGenerator = utils::IdGenerator::getIdGenerator())
-      : name_(name) {
-    if (uuid.isNil()) {
-      // Generate the global UUID for the flow record
-      uuid_ = idGenerator->generate();
-    } else {
-      uuid_ = uuid;
-    }
-  }
-
-  explicit CoreComponent(const CoreComponent &other) = default;
-  /**
-   * Move Constructor.
-   */
-
-  explicit CoreComponent(CoreComponent &&other) = default;
+  explicit CoreComponent(const std::string &name, const utils::Identifier &uuid = {}, const std::shared_ptr<utils::IdGenerator> &idGenerator = utils::IdGenerator::getIdGenerator());
+  CoreComponent(const CoreComponent &other) = default;
+  CoreComponent(CoreComponent &&other) = default;
+  CoreComponent& operator=(const CoreComponent&) = default;
+  CoreComponent& operator=(CoreComponent&&) = default;
 
   virtual ~CoreComponent() = default;
 
   // Get component name Name
-  virtual std::string getName() const;
+  [[nodiscard]] virtual std::string getName() const;
 
   /**
    * Set name.
@@ -186,13 +133,12 @@ class CoreComponent {
    * Returns the UUID.
    * @return the uuid of the component
    */
-  utils::Identifier getUUID() const;
+  [[nodiscard]] utils::Identifier getUUID() const;
 
-  // unsigned const char *getUUID();
   /**
    * Return the UUID string
    */
-  utils::SmallString<36> getUUIDStr() const {
+  [[nodiscard]] utils::SmallString<36> getUUIDStr() const {
     return uuid_.to_string();
   }
 
@@ -210,26 +156,6 @@ class CoreComponent {
   std::string name_;
 };
 
-namespace logging {
-}
-}  // namespace core
-}  // namespace minifi
-}  // namespace nifi
-}  // namespace apache
-}  // namespace org
-
-namespace fileutils = org::apache::nifi::minifi::utils::file;
-
-namespace minifi = org::apache::nifi::minifi;
-
-namespace core = org::apache::nifi::minifi::core;
-
-namespace processors = org::apache::nifi::minifi::processors;
-
-namespace logging = org::apache::nifi::minifi::core::logging;
-
-namespace utils = org::apache::nifi::minifi::utils;
-
-namespace provenance = org::apache::nifi::minifi::provenance;
+}  // namespace org::apache::nifi::minifi::core
 
 #endif  // LIBMINIFI_INCLUDE_CORE_CORE_H_
diff --git a/libminifi/include/core/Relationship.h b/libminifi/include/core/Relationship.h
index cf39f14..158392d 100644
--- a/libminifi/include/core/Relationship.h
+++ b/libminifi/include/core/Relationship.h
@@ -21,86 +21,44 @@
 #define LIBMINIFI_INCLUDE_CORE_RELATIONSHIP_H_
 
 #include <string>
-#include <vector>
-#include <queue>
-#include <map>
-#include <mutex>
-#include <atomic>
+#include <utility>
 
-namespace org {
-namespace apache {
-namespace nifi {
-namespace minifi {
-namespace core {
+namespace org::apache::nifi::minifi::core {
 
-// undefined relationship for remote process group outgoing port and root process group incoming port
-#define UNDEFINED_RELATIONSHIP "undefined"
-
-inline bool isRelationshipNameUndefined(std::string name) {
-  if (name == UNDEFINED_RELATIONSHIP)
-    return true;
-  else
-    return false;
-}
-
-// Relationship Class
 class Relationship {
  public:
-  /*
-   * Create a new relationship 
-   */
-  Relationship(const std::string name, const std::string description)
-      : name_(name),
-        description_(description) {
-  }
-
-  Relationship(const Relationship &other) = default;
+  Relationship() = default;
 
-  Relationship()
-      : name_(UNDEFINED_RELATIONSHIP) {
+  Relationship(std::string name, std::string description)
+      : name_(std::move(name)),
+        description_(std::move(description)) {
   }
-  // Destructor
+
+  Relationship(const Relationship& other) = default;
+  Relationship &operator=(const Relationship& other) = default;
   ~Relationship() = default;
-  // Get Name for the relationship
-  std::string getName() const {
+
+  [[nodiscard]] std::string getName() const {
     return name_;
   }
-  // Get Description for the relationship
-  std::string getDescription() const {
+
+  [[nodiscard]] std::string getDescription() const {
     return description_;
   }
-  // Compare
+
   bool operator <(const Relationship & right) const {
     return name_ < right.name_;
   }
 
-  Relationship &operator=(const Relationship &other) = default;
-
   bool operator==(const Relationship &other) const {
     return name_ == other.name_;
   }
 
-  bool operator!=(const Relationship &other) const {
-    return !(*this == other);
-  }
-
-  // Whether it is a undefined relationship
-  bool isRelationshipUndefined() {
-    return isRelationshipNameUndefined(name_);
-  }
-
  protected:
-  // Name
-  std::string name_;
-  // Description
+  std::string name_ = "undefined";
   std::string description_;
-
- private:
 };
 
-}  // namespace core
-}  // namespace minifi
-}  // namespace nifi
-}  // namespace apache
-}  // namespace org
+}  // namespace org::apache::nifi::minifi::core
+
 #endif  // LIBMINIFI_INCLUDE_CORE_RELATIONSHIP_H_
diff --git a/libminifi/include/core/extension/Executable.h b/libminifi/include/core/extension/Executable.h
index eae5309..29ef191 100644
--- a/libminifi/include/core/extension/Executable.h
+++ b/libminifi/include/core/extension/Executable.h
@@ -28,7 +28,7 @@ namespace extension {
 
 class Executable : public Module {
  public:
-  Executable(): Module("executable") {}
+  Executable() : Module("executable") {}
   ~Executable() override = default;
 };
 
diff --git a/libminifi/include/core/logging/Logger.h b/libminifi/include/core/logging/Logger.h
index 7b5ff0b..14e977e 100644
--- a/libminifi/include/core/logging/Logger.h
+++ b/libminifi/include/core/logging/Logger.h
@@ -45,7 +45,7 @@ class LoggerControl {
  public:
   LoggerControl();
 
-  bool is_enabled() const;
+  [[nodiscard]] bool is_enabled() const;
 
   void setEnabled(bool status);
 
@@ -71,12 +71,12 @@ inline T conditional_conversion(T t) {
 }
 
 template<typename ... Args>
-inline std::string format_string(int max_size, char const* format_str, Args&&... args) {
+std::string format_string(int max_size, char const* format_str, 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_conversion(std::forward<Args>(args))...);
   if (result < 0) {
-    return std::string("Error while formatting log message");
+    return "Error while formatting log message";
   }
   if (result <= LOG_BUFFER_SIZE) {
     // static buffer was large enough
@@ -91,7 +91,7 @@ inline std::string format_string(int max_size, char const* format_str, Args&&...
   std::vector<char> buffer(dynamic_buffer_size + 1);  // extra '\0' character
   result = std::snprintf(buffer.data(), buffer.size(), format_str, conditional_conversion(std::forward<Args>(args))...);
   if (result < 0) {
-    return std::string("Error while formatting log message");
+    return "Error while formatting log message";
   }
   return std::string(buffer.cbegin(), buffer.cend() - 1);  // -1 to not include the terminating '\0'
 }
@@ -236,15 +236,15 @@ class Logger : public BaseLogger {
   Logger& operator=(Logger const&);
 };
 
-#define LOG_DEBUG(x) LogBuilder(x.get(), logging::LOG_LEVEL::debug)
+#define LOG_DEBUG(x) LogBuilder((x).get(), org::apache::nifi::minifi::core::logging::LOG_LEVEL::debug)
 
-#define LOG_INFO(x) LogBuilder(x.get(), logging::LOG_LEVEL::info)
+#define LOG_INFO(x) LogBuilder((x).get(), org::apache::nifi::minifi::core::logging::LOG_LEVEL::info)
 
-#define LOG_TRACE(x) LogBuilder(x.get(), logging::LOG_LEVEL::trace)
+#define LOG_TRACE(x) LogBuilder((x).get(), org::apache::nifi::minifi::core::logging::LOG_LEVEL::trace)
 
-#define LOG_ERROR(x) LogBuilder(x.get(), logging::LOG_LEVEL::err)
+#define LOG_ERROR(x) LogBuilder((x).get(), org::apache::nifi::minifi::core::logging::LOG_LEVEL::err)
 
-#define LOG_WARN(x) LogBuilder(x.get(), logging::LOG_LEVEL::warn)
+#define LOG_WARN(x) LogBuilder((x).get(), org::apache::nifi::minifi::core::logging::LOG_LEVEL::warn)
 
 }  // namespace logging
 }  // namespace core
diff --git a/libminifi/include/io/AtomicEntryStream.h b/libminifi/include/io/AtomicEntryStream.h
index ada7902..6c630e5 100644
--- a/libminifi/include/io/AtomicEntryStream.h
+++ b/libminifi/include/io/AtomicEntryStream.h
@@ -43,8 +43,7 @@ class AtomicEntryStream : public BaseStream {
       : length_(0),
         offset_(0),
         key_(key),
-        entry_(entry),
-        logger_(logging::LoggerFactory<AtomicEntryStream()>::getLogger()) {
+        entry_(entry) {
     core::repository::RepoValue<T> *value;
     if (entry_->getValue(key, &value)) {
       length_ = value->getBufferSize();
@@ -99,7 +98,7 @@ class AtomicEntryStream : public BaseStream {
   std::recursive_mutex entry_lock_;
 
   // Logger
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<AtomicEntryStream>::getLogger();
 };
 
 template<typename T>
diff --git a/libminifi/include/io/ClientSocket.h b/libminifi/include/io/ClientSocket.h
index e5f72b3..85ea6b9 100644
--- a/libminifi/include/io/ClientSocket.h
+++ b/libminifi/include/io/ClientSocket.h
@@ -232,7 +232,7 @@ class Socket : public BaseStream {
 
   bool nonBlocking_{ false };
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_;
 
  private:
 #ifdef WIN32
diff --git a/libminifi/include/io/DescriptorStream.h b/libminifi/include/io/DescriptorStream.h
index a0cd3ec..dfc95fe 100644
--- a/libminifi/include/io/DescriptorStream.h
+++ b/libminifi/include/io/DescriptorStream.h
@@ -75,7 +75,7 @@ class DescriptorStream : public io::BaseStream {
   mutable std::recursive_mutex file_lock_;
   int fd_;
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<DescriptorStream>::getLogger();
 };
 
 }  // namespace io
diff --git a/libminifi/include/io/FileStream.h b/libminifi/include/io/FileStream.h
index e0bbafb..d45113a 100644
--- a/libminifi/include/io/FileStream.h
+++ b/libminifi/include/io/FileStream.h
@@ -97,7 +97,7 @@ class FileStream : public io::BaseStream {
   std::string path_;
   size_t length_;
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<FileStream>::getLogger();
 };
 
 }  // namespace io
diff --git a/libminifi/include/io/ServerSocket.h b/libminifi/include/io/ServerSocket.h
index 1941b2d..0cee820 100644
--- a/libminifi/include/io/ServerSocket.h
+++ b/libminifi/include/io/ServerSocket.h
@@ -69,7 +69,7 @@ class ServerSocket : public BaseServerSocket, public Socket {
 
   std::thread server_read_thread_;
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_;
 };
 
 }  // namespace io
diff --git a/libminifi/include/io/tls/SecureDescriptorStream.h b/libminifi/include/io/tls/SecureDescriptorStream.h
index 1d731ad..7aa5d1c 100644
--- a/libminifi/include/io/tls/SecureDescriptorStream.h
+++ b/libminifi/include/io/tls/SecureDescriptorStream.h
@@ -93,7 +93,7 @@ class SecureDescriptorStream : public io::BaseStream {
   SSL *ssl_;
 
  private:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<SecureDescriptorStream>::getLogger();
 };
 
 }  // namespace io
diff --git a/libminifi/include/io/tls/TLSServerSocket.h b/libminifi/include/io/tls/TLSServerSocket.h
index 53eb3b1..35160c2 100644
--- a/libminifi/include/io/tls/TLSServerSocket.h
+++ b/libminifi/include/io/tls/TLSServerSocket.h
@@ -71,7 +71,7 @@ class TLSServerSocket : public BaseServerSocket, public TLSSocket {
 
   std::thread server_read_thread_;
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<TLSServerSocket>::getLogger();
 };
 
 }  // namespace io
diff --git a/libminifi/include/io/tls/TLSSocket.h b/libminifi/include/io/tls/TLSSocket.h
index 271de46..ad10ffe 100644
--- a/libminifi/include/io/tls/TLSSocket.h
+++ b/libminifi/include/io/tls/TLSSocket.h
@@ -79,7 +79,7 @@ class TLSContext : public SocketContext {
  private:
   static void deleteContext(SSL_CTX* ptr) { SSL_CTX_free(ptr); }
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<TLSContext>::getLogger();
   std::shared_ptr<Configure> configure_;
   std::shared_ptr<minifi::controllers::SSLContextService> ssl_service_;
   std::unique_ptr<SSL_CTX, decltype(&deleteContext)> ctx;
diff --git a/libminifi/include/properties/Properties.h b/libminifi/include/properties/Properties.h
index a778101..cd84de6 100644
--- a/libminifi/include/properties/Properties.h
+++ b/libminifi/include/properties/Properties.h
@@ -131,7 +131,7 @@ class Properties {
   // Mutex for protection
   mutable std::mutex mutex_;
   // Logger
-  std::shared_ptr<minifi::core::logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_;
   // Home location for this executable
   std::string minifi_home_;
 
diff --git a/libminifi/include/provenance/Provenance.h b/libminifi/include/provenance/Provenance.h
index ed1cadc..2c4a597 100644
--- a/libminifi/include/provenance/Provenance.h
+++ b/libminifi/include/provenance/Provenance.h
@@ -435,7 +435,7 @@ class ProvenanceEventRecord : public core::SerializableComponent {
   // Only support pass by reference or pointer
   ProvenanceEventRecord(const ProvenanceEventRecord &parent);
   ProvenanceEventRecord &operator=(const ProvenanceEventRecord &parent);
-  static std::shared_ptr<logging::Logger> logger_;
+  static std::shared_ptr<core::logging::Logger> logger_;
   static std::shared_ptr<utils::IdGenerator> id_generator_;
 };
 
@@ -447,7 +447,7 @@ class ProvenanceReporter {
    * Create a new provenance reporter associated with the process session
    */
   ProvenanceReporter(std::shared_ptr<core::Repository> repo, std::string componentId, std::string componentType)
-      : logger_(logging::LoggerFactory<ProvenanceReporter>::getLogger()) {
+      : logger_(core::logging::LoggerFactory<ProvenanceReporter>::getLogger()) {
     _componentId = componentId;
     _componentType = componentType;
     repo_ = repo;
@@ -523,7 +523,7 @@ class ProvenanceReporter {
   std::string _componentType;
 
  private:
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_;
   // Incoming connection Iterator
   std::set<std::shared_ptr<ProvenanceEventRecord>> _events;
   // provenance repository.
diff --git a/libminifi/include/sitetosite/Peer.h b/libminifi/include/sitetosite/Peer.h
index cea5e88..195ab81 100644
--- a/libminifi/include/sitetosite/Peer.h
+++ b/libminifi/include/sitetosite/Peer.h
@@ -141,8 +141,7 @@ class SiteToSitePeer : public org::apache::nifi::minifi::io::BaseStream {
   SiteToSitePeer()
       : stream_(nullptr),
         host_(""),
-        port_(-1),
-        logger_(logging::LoggerFactory<SiteToSitePeer>::getLogger()) {
+        port_(-1) {
   }
   /*
    * Create a new site2site peer
@@ -158,7 +157,7 @@ class SiteToSitePeer : public org::apache::nifi::minifi::io::BaseStream {
         port_(port),
         timeout_(30000),
         yield_expiration_(0),
-        logger_(logging::LoggerFactory<SiteToSitePeer>::getLogger()) {
+        logger_(core::logging::LoggerFactory<SiteToSitePeer>::getLogger()) {
     url_ = "nifi://" + host_ + ":" + std::to_string(port_);
     yield_expiration_ = 0;
     timeout_ = 30000;  // 30 seconds
@@ -353,7 +352,7 @@ class SiteToSitePeer : public org::apache::nifi::minifi::io::BaseStream {
   // Yield Expiration per destination PortID
   std::map<std::string, uint64_t> yield_expiration_PortIdMap;
   // Logger
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<SiteToSitePeer>::getLogger();
 };
 
 }  // namespace sitetosite
diff --git a/libminifi/include/sitetosite/RawSocketProtocol.h b/libminifi/include/sitetosite/RawSocketProtocol.h
index 0a693dc..f588aca 100644
--- a/libminifi/include/sitetosite/RawSocketProtocol.h
+++ b/libminifi/include/sitetosite/RawSocketProtocol.h
@@ -71,8 +71,7 @@ class RawSiteToSiteClient : public sitetosite::SiteToSiteClient {
   /*!
    * Create a new control protocol
    */
-  RawSiteToSiteClient(std::unique_ptr<SiteToSitePeer> peer) // NOLINT
-      : logger_(logging::LoggerFactory<RawSiteToSiteClient>::getLogger()) {
+  RawSiteToSiteClient(std::unique_ptr<SiteToSitePeer> peer) { // NOLINT
     peer_ = std::move(peer);
     _batchSize = 0;
     _batchCount = 0;
@@ -91,7 +90,7 @@ class RawSiteToSiteClient : public sitetosite::SiteToSiteClient {
     _currentCodecVersionIndex = 0;
   }
   // Destructor
-  virtual ~RawSiteToSiteClient() {
+  ~RawSiteToSiteClient() override {
     tearDown();
   }
 
@@ -133,7 +132,7 @@ class RawSiteToSiteClient : public sitetosite::SiteToSiteClient {
   }
 
   // get peerList
-  virtual bool getPeerList(std::vector<PeerStatus> &peer);
+  bool getPeerList(std::vector<PeerStatus> &peer) override;
   // negotiateCodec
   virtual bool negotiateCodec();
   // initiateResourceNegotiation
@@ -141,7 +140,7 @@ class RawSiteToSiteClient : public sitetosite::SiteToSiteClient {
   // initiateCodecResourceNegotiation
   virtual bool initiateCodecResourceNegotiation();
   // tearDown
-  virtual void tearDown();
+  void tearDown() override;
   // write Request Type
   virtual int writeRequestType(RequestType type);
   // read Request Type
@@ -152,30 +151,30 @@ class RawSiteToSiteClient : public sitetosite::SiteToSiteClient {
   // write respond
   virtual int writeRespond(const std::shared_ptr<Transaction> &transaction, RespondCode code, std::string message);
   // getRespondCodeContext
-  virtual RespondCodeContext *getRespondCodeContext(RespondCode code) {
+  RespondCodeContext *getRespondCodeContext(RespondCode code) override {
     return SiteToSiteClient::getRespondCodeContext(code);
   }
 
   // Creation of a new transaction, return the transaction ID if success,
   // Return NULL when any error occurs
-  virtual std::shared_ptr<Transaction> createTransaction(TransferDirection direction);
+  std::shared_ptr<Transaction> createTransaction(TransferDirection direction) override;
 
   //! Transfer string for the process session
-  virtual bool transmitPayload(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::ProcessSession> &session, const std::string &payload,
-                               std::map<std::string, std::string> attributes);
+  bool transmitPayload(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::ProcessSession> &session, const std::string &payload,
+      std::map<std::string, std::string> attributes) override;
 
   // bootstrap the protocol to the ready for transaction state by going through the state machine
-  virtual bool bootstrap();
+  bool bootstrap() override;
 
  protected:
   // establish
-  virtual bool establish();
+  bool establish() override;
   // handShake
   virtual bool handShake();
 
  private:
   // Logger
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<RawSiteToSiteClient>::getLogger();
   // Batch Count
   std::atomic<uint64_t> _batchCount;
   // Batch Size
diff --git a/libminifi/include/sitetosite/SiteToSiteClient.h b/libminifi/include/sitetosite/SiteToSiteClient.h
index cffda6c..72db758 100644
--- a/libminifi/include/sitetosite/SiteToSiteClient.h
+++ b/libminifi/include/sitetosite/SiteToSiteClient.h
@@ -45,7 +45,7 @@ namespace sitetosite {
  */
 class DataPacket {
  public:
-  DataPacket(std::shared_ptr<logging::Logger> logger, std::shared_ptr<Transaction> transaction, std::map<std::string, std::string> attributes, const std::string &payload)
+  DataPacket(std::shared_ptr<core::logging::Logger> logger, std::shared_ptr<Transaction> transaction, std::map<std::string, std::string> attributes, const std::string &payload)
       : _attributes{std::move(attributes)},
         transaction_{std::move(transaction)},
         payload_{payload},
@@ -55,7 +55,7 @@ class DataPacket {
   uint64_t _size{0};
   std::shared_ptr<Transaction> transaction_;
   const std::string & payload_;
-  std::shared_ptr<logging::Logger> logger_reference_;
+  std::shared_ptr<core::logging::Logger> logger_reference_;
 };
 
 class SiteToSiteClient : public core::Connectable {
@@ -172,7 +172,7 @@ class SiteToSiteClient : public core::Connectable {
    */
   virtual bool establish() = 0;
 
-  const std::shared_ptr<logging::Logger> &getLogger() {
+  const std::shared_ptr<core::logging::Logger> &getLogger() {
     return logger_;
   }
 
@@ -262,7 +262,7 @@ class SiteToSiteClient : public core::Connectable {
   std::shared_ptr<minifi::controllers::SSLContextService> ssl_context_service_;
 
  private:
-  std::shared_ptr<logging::Logger> logger_{logging::LoggerFactory<SiteToSiteClient>::getLogger()};
+  std::shared_ptr<core::logging::Logger> logger_{core::logging::LoggerFactory<SiteToSiteClient>::getLogger()};
 };
 
 // Nest Callback Class for write stream
@@ -281,14 +281,14 @@ class WriteCallback : public OutputStreamCallback {
       const auto size = std::min(len, uint64_t{16384});
       const auto ret = _packet->transaction_->getStream().read(buffer, size);
       if (ret != size) {
-        logging::LOG_ERROR(_packet->logger_reference_) << "Site2Site Receive Flow Size " << size << " Failed " << ret << ", should have received " << len;
+        core::logging::LOG_ERROR(_packet->logger_reference_) << "Site2Site Receive Flow Size " << size << " Failed " << ret << ", should have received " << len;
         return -1;
       }
       stream->write(buffer, size);
       len -= size;
       total += size;
     }
-    logging::LOG_INFO(_packet->logger_reference_) << "Received " << total << " from stream";
+    core::logging::LOG_INFO(_packet->logger_reference_) << "Received " << total << " from stream";
     return gsl::narrow<int64_t>(len);
   }
 };
@@ -309,7 +309,7 @@ class ReadCallback : public InputStreamCallback {
       if (io::isError(readSize)) return -1;
       const auto ret = _packet->transaction_->getStream().write(buffer, readSize);
       if (io::isError(ret) || gsl::narrow<size_t>(ret) != readSize) {
-        logging::LOG_INFO(_packet->logger_reference_) << "Site2Site Send Flow Size " << readSize << " Failed " << ret;
+        core::logging::LOG_INFO(_packet->logger_reference_) << "Site2Site Send Flow Size " << readSize << " Failed " << ret;
         return -1;
       }
       size += readSize;
diff --git a/libminifi/include/utils/ByteArrayCallback.h b/libminifi/include/utils/ByteArrayCallback.h
index ace72b6..27eaec2 100644
--- a/libminifi/include/utils/ByteArrayCallback.h
+++ b/libminifi/include/utils/ByteArrayCallback.h
@@ -88,7 +88,7 @@ class ByteOutputCallback : public OutputStreamCallback {
   explicit ByteOutputCallback(size_t max_size, bool wait_on_read = false)
       : max_size_(max_size),
         read_started_(wait_on_read ? false : true),
-        logger_(logging::LoggerFactory<ByteOutputCallback>::getLogger()) {
+        logger_(core::logging::LoggerFactory<ByteOutputCallback>::getLogger()) {
     current_str_pos = 0;
     size_ = 0;
     total_written_ = 0;
@@ -137,7 +137,7 @@ class ByteOutputCallback : public OutputStreamCallback {
 
   moodycamel::ConcurrentQueue<std::string> queue_;
 
-  std::shared_ptr<logging::Logger> logger_;
+  std::shared_ptr<core::logging::Logger> logger_;
 };
 
 class StreamOutputCallback : public ByteOutputCallback {
diff --git a/libminifi/include/utils/HTTPClient.h b/libminifi/include/utils/HTTPClient.h
index 20e70c8..81bf829 100644
--- a/libminifi/include/utils/HTTPClient.h
+++ b/libminifi/include/utils/HTTPClient.h
@@ -381,7 +381,7 @@ class URL {
   std::optional<int> port_;
   std::optional<std::string> path_;
   bool is_valid_ = false;
-  std::shared_ptr<logging::Logger> logger_ = logging::LoggerFactory<URL>::getLogger();
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<URL>::getLogger();
 };
 
 }  // namespace utils
diff --git a/libminifi/include/utils/HTTPUtils.h b/libminifi/include/utils/HTTPUtils.h
index 9abac9e..275cda2 100644
--- a/libminifi/include/utils/HTTPUtils.h
+++ b/libminifi/include/utils/HTTPUtils.h
@@ -22,6 +22,8 @@
 #include <string>
 #include <regex>
 
+#include "io/ClientSocket.h"
+
 /**
 This function, unfortunately, assumes that we're parsing http components of a local host. On windows this is problematic
 so we convert localhost to our local hostname.
diff --git a/libminifi/include/utils/OpenTelemetryLogDataModelUtils.h b/libminifi/include/utils/OpenTelemetryLogDataModelUtils.h
index 3594886..5441840 100644
--- a/libminifi/include/utils/OpenTelemetryLogDataModelUtils.h
+++ b/libminifi/include/utils/OpenTelemetryLogDataModelUtils.h
@@ -21,6 +21,7 @@
 
 #include "rapidjson/document.h"
 #include "NetworkInterfaceInfo.h"
+#include "io/ClientSocket.h"
 
 namespace org {
 namespace apache {
diff --git a/libminifi/include/utils/TestUtils.h b/libminifi/include/utils/TestUtils.h
index 38a2700..5f6e3d4 100644
--- a/libminifi/include/utils/TestUtils.h
+++ b/libminifi/include/utils/TestUtils.h
@@ -18,8 +18,10 @@
 
 #pragma once
 
-#include <string>
+#include <chrono>
+#include <fstream>
 #include <memory>
+#include <string>
 
 #include "../../test/TestBase.h"
 #include "utils/file/FileUtils.h"
@@ -45,7 +47,7 @@ std::string putFileToDir(const std::string& dir_path, const std::string& file_na
 std::string getFileContent(const std::string& file_name) {
   std::ifstream file_handle(file_name, std::ios::binary | std::ios::in);
   REQUIRE(file_handle.is_open());
-  const std::string file_content{ (std::istreambuf_iterator<char>(file_handle)), (std::istreambuf_iterator<char>()) };
+  std::string file_content{ (std::istreambuf_iterator<char>(file_handle)), (std::istreambuf_iterator<char>()) };
   return file_content;
 }
 
@@ -57,7 +59,7 @@ Identifier generateUUID() {
 
 class ManualClock : public timeutils::Clock {
  public:
-  std::chrono::milliseconds timeSinceEpoch() const override { return time_; }
+  [[nodiscard]] std::chrono::milliseconds timeSinceEpoch() const override { return time_; }
   void advance(std::chrono::milliseconds elapsed_time) { time_ += elapsed_time; }
 
  private:
diff --git a/libminifi/include/utils/file/FileSystem.h b/libminifi/include/utils/file/FileSystem.h
index dbf3476..a6cafc0 100644
--- a/libminifi/include/utils/file/FileSystem.h
+++ b/libminifi/include/utils/file/FileSystem.h
@@ -46,7 +46,7 @@ class FileSystem {
  private:
   bool should_encrypt_on_write_;
   std::optional<utils::crypto::EncryptionProvider> encryptor_;
-  std::shared_ptr<logging::Logger> logger_{logging::LoggerFactory<FileSystem>::getLogger()};
+  std::shared_ptr<core::logging::Logger> logger_{core::logging::LoggerFactory<FileSystem>::getLogger()};
 };
 
 }  // namespace file
diff --git a/libminifi/include/utils/file/FileUtils.h b/libminifi/include/utils/file/FileUtils.h
index 26ba2a8..89884b1 100644
--- a/libminifi/include/utils/file/FileUtils.h
+++ b/libminifi/include/utils/file/FileUtils.h
@@ -420,7 +420,7 @@ inline int copy_file(const std::string &path_from, const std::string& dest_path)
   return 0;
 }
 
-inline void addFilesMatchingExtension(const std::shared_ptr<logging::Logger> &logger, const std::string &originalPath, const std::string &extension, std::vector<std::string> &accruedFiles) {
+inline void addFilesMatchingExtension(const std::shared_ptr<core::logging::Logger> &logger, const std::string &originalPath, const std::string &extension, std::vector<std::string> &accruedFiles) {
 #ifndef WIN32
 
   struct stat s;
@@ -523,7 +523,7 @@ inline std::string concat_path(const std::string& root, const std::string& child
  * process that directory or not.
  */
 inline void list_dir(const std::string& dir, std::function<bool(const std::string&, const std::string&)> callback,
-                     const std::shared_ptr<logging::Logger> &logger, std::function<bool(const std::string&)> dir_callback) {
+                     const std::shared_ptr<core::logging::Logger> &logger, std::function<bool(const std::string&)> dir_callback) {
   logger->log_debug("Performing file listing against %s", dir);
 #ifndef WIN32
   DIR *d = opendir(dir.c_str());
@@ -593,13 +593,13 @@ inline void list_dir(const std::string& dir, std::function<bool(const std::strin
 }
 
 inline void list_dir(const std::string& dir, std::function<bool(const std::string&, const std::string&)> callback,
-                     const std::shared_ptr<logging::Logger> &logger, bool recursive = true) {
+                     const std::shared_ptr<core::logging::Logger> &logger, bool recursive = true) {
   list_dir(dir, callback, logger, [&] (const std::string&) {
     return recursive;
   });
 }
 
-inline std::vector<std::pair<std::string, std::string>> list_dir_all(const std::string& dir, const std::shared_ptr<logging::Logger> &logger,
+inline std::vector<std::pair<std::string, std::string>> list_dir_all(const std::string& dir, const std::shared_ptr<core::logging::Logger> &logger,
     bool recursive = true)  {
   std::vector<std::pair<std::string, std::string>> fileList;
   auto lambda = [&fileList] (const std::string &path, const std::string &filename) {
diff --git a/libminifi/src/Configure.cpp b/libminifi/src/Configure.cpp
index e0ee22b..2832295 100644
--- a/libminifi/src/Configure.cpp
+++ b/libminifi/src/Configure.cpp
@@ -38,12 +38,12 @@ bool Configure::get(const std::string& key, std::string& value) const {
 bool Configure::get(const std::string& key, const std::string& alternate_key, std::string& value) const {
   if (get(key, value)) {
     if (get(alternate_key)) {
-      const auto logger = logging::LoggerFactory<Configure>::getLogger();
+      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);
     }
     return true;
   } else if (get(alternate_key, value)) {
-    const auto logger = logging::LoggerFactory<Configure>::getLogger();
+    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);
     return true;
   } else {
diff --git a/libminifi/src/Connection.cpp b/libminifi/src/Connection.cpp
index 5b298ae..e2bc4f9 100644
--- a/libminifi/src/Connection.cpp
+++ b/libminifi/src/Connection.cpp
@@ -41,8 +41,7 @@ namespace minifi {
 Connection::Connection(const std::shared_ptr<core::Repository> &flow_repository, const std::shared_ptr<core::ContentRepository> &content_repo, const std::string &name)
     : core::Connectable(name),
       flow_repository_(flow_repository),
-      content_repo_(content_repo),
-      logger_(logging::LoggerFactory<Connection>::getLogger()) {
+      content_repo_(content_repo) {
   source_connectable_ = nullptr;
   dest_connectable_ = nullptr;
   max_queue_size_ = 0;
@@ -57,8 +56,7 @@ Connection::Connection(const std::shared_ptr<core::Repository> &flow_repository,
 Connection::Connection(const std::shared_ptr<core::Repository> &flow_repository, const std::shared_ptr<core::ContentRepository> &content_repo, const std::string &name, const utils::Identifier &uuid)
     : core::Connectable(name, uuid),
       flow_repository_(flow_repository),
-      content_repo_(content_repo),
-      logger_(logging::LoggerFactory<Connection>::getLogger()) {
+      content_repo_(content_repo) {
   source_connectable_ = nullptr;
   dest_connectable_ = nullptr;
   max_queue_size_ = 0;
@@ -74,9 +72,7 @@ Connection::Connection(const std::shared_ptr<core::Repository> &flow_repository,
                        const utils::Identifier& srcUUID)
     : core::Connectable(name, uuid),
       flow_repository_(flow_repository),
-      content_repo_(content_repo),
-      logger_(logging::LoggerFactory<Connection>::getLogger()) {
-
+      content_repo_(content_repo) {
   src_uuid_ = srcUUID;
 
   source_connectable_ = nullptr;
@@ -94,8 +90,7 @@ Connection::Connection(const std::shared_ptr<core::Repository> &flow_repository,
                        const utils::Identifier& srcUUID, const utils::Identifier& destUUID)
     : core::Connectable(name, uuid),
       flow_repository_(flow_repository),
-      content_repo_(content_repo),
-      logger_(logging::LoggerFactory<Connection>::getLogger()) {
+      content_repo_(content_repo) {
 
   src_uuid_ = srcUUID;
   dest_uuid_ = destUUID;
diff --git a/libminifi/src/FlowController.cpp b/libminifi/src/FlowController.cpp
index 4283ef5..6cc1f8c 100644
--- a/libminifi/src/FlowController.cpp
+++ b/libminifi/src/FlowController.cpp
@@ -67,8 +67,7 @@ FlowController::FlowController(std::shared_ptr<core::Repository> provenance_repo
       running_(false),
       updating_(false),
       initialized_(false),
-      thread_pool_(2, false, nullptr, "Flowcontroller threadpool"),
-      logger_(logging::LoggerFactory<FlowController>::getLogger()) {
+      thread_pool_(2, false, nullptr, "Flowcontroller threadpool") {
   if (provenance_repo_ == nullptr)
     throw std::runtime_error("Provenance Repo should not be null");
   if (flow_file_repo_ == nullptr)
diff --git a/libminifi/src/FlowFileRecord.cpp b/libminifi/src/FlowFileRecord.cpp
index db080de..52c9e56 100644
--- a/libminifi/src/FlowFileRecord.cpp
+++ b/libminifi/src/FlowFileRecord.cpp
@@ -38,7 +38,7 @@ namespace apache {
 namespace nifi {
 namespace minifi {
 
-std::shared_ptr<logging::Logger> FlowFileRecord::logger_ = logging::LoggerFactory<FlowFileRecord>::getLogger();
+std::shared_ptr<core::logging::Logger> FlowFileRecord::logger_ = core::logging::LoggerFactory<FlowFileRecord>::getLogger();
 std::atomic<uint64_t> FlowFileRecord::local_flow_seq_number_(0);
 
 FlowFileRecord::FlowFileRecord() {
@@ -56,7 +56,7 @@ std::shared_ptr<FlowFileRecord> FlowFileRecord::DeSerialize(const std::string& k
     logger_->log_error("NiFi FlowFile Store event %s can not found", key);
     return nullptr;
   }
-  io::BufferStream stream((const uint8_t*) value.data(), gsl::narrow<int>(value.length()));
+  io::BufferStream stream((const uint8_t*) value.data(), value.length());
 
   auto record = DeSerialize(stream, content_repo, container);
 
diff --git a/libminifi/src/RemoteProcessorGroupPort.cpp b/libminifi/src/RemoteProcessorGroupPort.cpp
index eac3fa5..28603a3 100644
--- a/libminifi/src/RemoteProcessorGroupPort.cpp
+++ b/libminifi/src/RemoteProcessorGroupPort.cpp
@@ -413,7 +413,7 @@ void RemoteProcessorGroupPort::refreshPeerList() {
   if (protocol)
     protocol->getPeerList(peers_);
 
-  logging::LOG_INFO(logger_) << "Have " << peers_.size() << " peers";
+  core::logging::LOG_INFO(logger_) << "Have " << peers_.size() << " peers";
 
   if (peers_.size() > 0)
     peer_index_ = 0;
diff --git a/libminifi/src/ResourceClaim.cpp b/libminifi/src/ResourceClaim.cpp
index 92e39b2..814d8ab 100644
--- a/libminifi/src/ResourceClaim.cpp
+++ b/libminifi/src/ResourceClaim.cpp
@@ -50,14 +50,15 @@ ResourceClaim::ResourceClaim(std::shared_ptr<core::StreamManager<ResourceClaim>>
         return contentDirectory + "/" + non_repeating_string_generator_.generate();
       }()),
       claim_manager_(std::move(claim_manager)),
-      logger_(logging::LoggerFactory<ResourceClaim>::getLogger()) {
+      logger_(core::logging::LoggerFactory<ResourceClaim>::getLogger()) {
   if (claim_manager_) increaseFlowFileRecordOwnedCount();
   logger_->log_debug("Resource Claim created %s", _contentFullPath);
 }
 
 ResourceClaim::ResourceClaim(const Path& path, std::shared_ptr<core::StreamManager<ResourceClaim>> claim_manager)
     : _contentFullPath(path),
-      claim_manager_(std::move(claim_manager)) {
+      claim_manager_(std::move(claim_manager)),
+      logger_(core::logging::LoggerFactory<ResourceClaim>::getLogger()) {
   if (claim_manager_) increaseFlowFileRecordOwnedCount();
 }
 
diff --git a/libminifi/src/c2/C2Agent.cpp b/libminifi/src/c2/C2Agent.cpp
index 78b3663..58cc853 100644
--- a/libminifi/src/c2/C2Agent.cpp
+++ b/libminifi/src/c2/C2Agent.cpp
@@ -63,7 +63,6 @@ C2Agent::C2Agent(core::controller::ControllerServiceProvider *controller,
       configuration_(configuration),
       filesystem_(filesystem),
       protocol_(nullptr),
-      logger_(logging::LoggerFactory<C2Agent>::getLogger()),
       thread_pool_(2, false, nullptr, "C2 threadpool") {
   manifest_sent_ = false;
 
diff --git a/libminifi/src/c2/C2Client.cpp b/libminifi/src/c2/C2Client.cpp
index a5da18e..a90fedf 100644
--- a/libminifi/src/c2/C2Client.cpp
+++ b/libminifi/src/c2/C2Client.cpp
@@ -41,7 +41,7 @@ C2Client::C2Client(
     std::shared_ptr<Configure> configuration, std::shared_ptr<core::Repository> provenance_repo,
     std::shared_ptr<core::Repository> flow_file_repo, std::shared_ptr<core::ContentRepository> content_repo,
     std::unique_ptr<core::FlowConfiguration> flow_configuration, std::shared_ptr<utils::file::FileSystem> filesystem,
-    std::shared_ptr<logging::Logger> logger)
+    std::shared_ptr<core::logging::Logger> logger)
     : core::Flow(std::move(provenance_repo), std::move(flow_file_repo), std::move(content_repo), std::move(flow_configuration)),
       configuration_(std::move(configuration)),
       filesystem_(std::move(filesystem)),
diff --git a/libminifi/src/c2/HeartbeatLogger.cpp b/libminifi/src/c2/HeartbeatLogger.cpp
index 62feadd..5f9ba3b 100644
--- a/libminifi/src/c2/HeartbeatLogger.cpp
+++ b/libminifi/src/c2/HeartbeatLogger.cpp
@@ -25,8 +25,7 @@ namespace minifi {
 namespace c2 {
 
 HeartbeatLogger::HeartbeatLogger(const std::string& name, const utils::Identifier& id)
-  : HeartbeatReporter(name, id),
-    logger_(logging::LoggerFactory<HeartbeatLogger>::getLogger()) {
+  : HeartbeatReporter(name, id) {
   logger_->set_max_log_size(-1);  // log however huge the heartbeat is
 }
 
diff --git a/libminifi/src/c2/protocols/RESTProtocol.cpp b/libminifi/src/c2/protocols/RESTProtocol.cpp
index 374c239..fcb396d 100644
--- a/libminifi/src/c2/protocols/RESTProtocol.cpp
+++ b/libminifi/src/c2/protocols/RESTProtocol.cpp
@@ -144,7 +144,7 @@ const C2Payload RESTProtocol::parseJsonResponse(const C2Payload &payload, const
   return C2Payload(payload.getOperation(), state::UpdateState::READ_COMPLETE);
 }
 
-RESTProtocol::RESTProtocol() : logger_(logging::LoggerFactory<RESTProtocol>::getLogger()) {}
+RESTProtocol::RESTProtocol() = default;
 
 void RESTProtocol::initialize(core::controller::ControllerServiceProvider* /*controller*/, const std::shared_ptr<Configure> &configure) {
   if (configure) {
diff --git a/libminifi/src/controllers/LinuxPowerManagementService.cpp b/libminifi/src/controllers/LinuxPowerManagementService.cpp
index c0346bd..8714cef 100644
--- a/libminifi/src/controllers/LinuxPowerManagementService.cpp
+++ b/libminifi/src/controllers/LinuxPowerManagementService.cpp
@@ -152,7 +152,7 @@ bool LinuxPowerManagerService::shouldReduce() {
           overConsume = true;
           logger_->log_trace("All banks are discharging, suggesting reduction");
         } else {
-          logging::LOG_DEBUG(logger_) << "dischaging but can't reduce due to time " << curr_time << " " << last_time_ << "  " << wait_period_;
+          core::logging::LOG_DEBUG(logger_) << "dischaging but can't reduce due to time " << curr_time << " " << last_time_ << "  " << wait_period_;
         }
       }
     }
diff --git a/libminifi/src/controllers/SSLContextService.cpp b/libminifi/src/controllers/SSLContextService.cpp
index 60a5ee3..eb385da 100644
--- a/libminifi/src/controllers/SSLContextService.cpp
+++ b/libminifi/src/controllers/SSLContextService.cpp
@@ -30,8 +30,8 @@
 #endif  // OPENSSL_SUPPORT
 
 #include <fstream>
-#include <string>
 #include <memory>
+#include <string>
 #include <set>
 
 #include "core/Property.h"
@@ -145,7 +145,7 @@ bool SSLContextService::configure_ssl_context(SSL_CTX *ctx) {
     }
 
     if (!SSL_CTX_check_private_key(ctx)) {
-      logging::LOG_ERROR(logger_) << "Private key does not match the public certificate, " << getLatestOpenSSLErrorString();
+      core::logging::LOG_ERROR(logger_) << "Private key does not match the public certificate, " << getLatestOpenSSLErrorString();
       return false;
     }
   }
@@ -154,7 +154,7 @@ bool SSLContextService::configure_ssl_context(SSL_CTX *ctx) {
 
   if (!IsNullOrEmpty(ca_certificate_)) {
     if (SSL_CTX_load_verify_locations(ctx, ca_certificate_.c_str(), 0) == 0) {
-      logging::LOG_ERROR(logger_) << "Cannot load CA certificate, exiting, " << getLatestOpenSSLErrorString();
+      core::logging::LOG_ERROR(logger_) << "Cannot load CA certificate, exiting, " << getLatestOpenSSLErrorString();
       return false;
     }
   }
@@ -178,17 +178,17 @@ bool SSLContextService::addP12CertificateToSSLContext(SSL_CTX* ctx) const {
   const auto fp_deleter = [](BIO* ptr) { BIO_free(ptr); };
   std::unique_ptr<BIO, decltype(fp_deleter)> fp(BIO_new(BIO_s_file()), fp_deleter);
   if (fp == nullptr) {
-    logging::LOG_ERROR(logger_) << "Failed create new file BIO, " << getLatestOpenSSLErrorString();
+    core::logging::LOG_ERROR(logger_) << "Failed create new file BIO, " << getLatestOpenSSLErrorString();
     return false;
   }
   if (BIO_read_filename(fp.get(), certificate_.c_str()) <= 0) {
-    logging::LOG_ERROR(logger_) << "Failed to read certificate file " << certificate_ << ", " << getLatestOpenSSLErrorString();
+    core::logging::LOG_ERROR(logger_) << "Failed to read certificate file " << certificate_ << ", " << getLatestOpenSSLErrorString();
     return false;
   }
   const auto p12_deleter = [](PKCS12* ptr) { PKCS12_free(ptr); };
   std::unique_ptr<PKCS12, decltype(p12_deleter)> p12(d2i_PKCS12_bio(fp.get(), nullptr), p12_deleter);
   if (p12 == nullptr) {
-    logging::LOG_ERROR(logger_) << "Failed to DER decode certificate file " << certificate_ << ", " << getLatestOpenSSLErrorString();
+    core::logging::LOG_ERROR(logger_) << "Failed to DER decode certificate file " << certificate_ << ", " << getLatestOpenSSLErrorString();
     return false;
   }
 
@@ -196,7 +196,7 @@ bool SSLContextService::addP12CertificateToSSLContext(SSL_CTX* ctx) const {
   X509* cert = nullptr;
   STACK_OF(X509)* ca = nullptr;
   if (!PKCS12_parse(p12.get(), passphrase_.c_str(), &pkey, &cert, &ca)) {
-    logging::LOG_ERROR(logger_) << "Failed to parse certificate file " << certificate_ << " as PKCS#12, " << getLatestOpenSSLErrorString();
+    core::logging::LOG_ERROR(logger_) << "Failed to parse certificate file " << certificate_ << " as PKCS#12, " << getLatestOpenSSLErrorString();
     return false;
   }
   utils::tls::EVP_PKEY_unique_ptr pkey_ptr{pkey};
@@ -204,19 +204,19 @@ bool SSLContextService::addP12CertificateToSSLContext(SSL_CTX* ctx) const {
   const auto ca_deleter = gsl::finally([ca] { sk_X509_pop_free(ca, X509_free); });
 
   if (SSL_CTX_use_certificate(ctx, cert) != 1) {
-    logging::LOG_ERROR(logger_) << "Failed to set certificate from " << certificate_ << ", " << getLatestOpenSSLErrorString();
+    core::logging::LOG_ERROR(logger_) << "Failed to set certificate from " << certificate_ << ", " << getLatestOpenSSLErrorString();
     return false;
   }
   while (ca != nullptr && sk_X509_num(ca) > 0) {
     utils::tls::X509_unique_ptr cacert{sk_X509_pop(ca)};
     if (SSL_CTX_add_extra_chain_cert(ctx, cacert.get()) != 1) {
-      logging::LOG_ERROR(logger_) << "Failed to set additional certificate from " << certificate_ << ", " << getLatestOpenSSLErrorString();
+      core::logging::LOG_ERROR(logger_) << "Failed to set additional certificate from " << certificate_ << ", " << getLatestOpenSSLErrorString();
       return false;
     }
     cacert.release();  // a successful SSL_CTX_add_extra_chain_cert() takes ownership of cacert
   }
   if (SSL_CTX_use_PrivateKey(ctx, pkey) != 1) {
-    logging::LOG_ERROR(logger_) << "Failed to set private key from " << certificate_ << ", " << getLatestOpenSSLErrorString();
+    core::logging::LOG_ERROR(logger_) << "Failed to set private key from " << certificate_ << ", " << getLatestOpenSSLErrorString();
     return false;
   }
 
@@ -225,7 +225,7 @@ bool SSLContextService::addP12CertificateToSSLContext(SSL_CTX* ctx) const {
 
 bool SSLContextService::addPemCertificateToSSLContext(SSL_CTX* ctx) const {
   if (SSL_CTX_use_certificate_chain_file(ctx, certificate_.c_str()) <= 0) {
-    logging::LOG_ERROR(logger_) << "Could not load client certificate " << certificate_ << ", " << getLatestOpenSSLErrorString();
+    core::logging::LOG_ERROR(logger_) << "Could not load client certificate " << certificate_ << ", " << getLatestOpenSSLErrorString();
     return false;
   }
 
@@ -238,7 +238,7 @@ bool SSLContextService::addPemCertificateToSSLContext(SSL_CTX* ctx) const {
   if (!IsNullOrEmpty(private_key_)) {
     int retp = SSL_CTX_use_PrivateKey_file(ctx, private_key_.c_str(), SSL_FILETYPE_PEM);
     if (retp != 1) {
-      logging::LOG_ERROR(logger_) << "Could not load private key, " << retp << " on " << private_key_ << ", " << getLatestOpenSSLErrorString();
+      core::logging::LOG_ERROR(logger_) << "Could not load private key, " << retp << " on " << private_key_ << ", " << getLatestOpenSSLErrorString();
       return false;
     }
   }
@@ -411,7 +411,7 @@ std::unique_ptr<SSLContext> SSLContextService::createSSLContext() {
     return nullptr;
   }
 
-  return std::unique_ptr<SSLContext>(new SSLContext(ctx));
+  return std::make_unique<SSLContext>(ctx);
 #else
   return nullptr;
 #endif
diff --git a/libminifi/src/controllers/keyvalue/AbstractAutoPersistingKeyValueStoreService.cpp b/libminifi/src/controllers/keyvalue/AbstractAutoPersistingKeyValueStoreService.cpp
index 04fc613..610fcb6 100644
--- a/libminifi/src/controllers/keyvalue/AbstractAutoPersistingKeyValueStoreService.cpp
+++ b/libminifi/src/controllers/keyvalue/AbstractAutoPersistingKeyValueStoreService.cpp
@@ -36,8 +36,7 @@ AbstractAutoPersistingKeyValueStoreService::AbstractAutoPersistingKeyValueStoreS
     : PersistableKeyValueStoreService(name, uuid)
     , always_persist_(false)
     , auto_persistence_interval_(0U)
-    , running_(false)
-    , logger_(logging::LoggerFactory<AbstractAutoPersistingKeyValueStoreService>::getLogger()) {
+    , running_(false) {
 }
 
 AbstractAutoPersistingKeyValueStoreService::~AbstractAutoPersistingKeyValueStoreService() {
diff --git a/libminifi/src/controllers/keyvalue/PersistableKeyValueStoreService.cpp b/libminifi/src/controllers/keyvalue/PersistableKeyValueStoreService.cpp
index 39f4c2d..bffd242 100644
--- a/libminifi/src/controllers/keyvalue/PersistableKeyValueStoreService.cpp
+++ b/libminifi/src/controllers/keyvalue/PersistableKeyValueStoreService.cpp
@@ -49,7 +49,7 @@ bool PersistableKeyValueStoreService::getImpl(std::map<utils::Identifier, std::s
     if (optional_uuid) {
       kvs[optional_uuid.value()] = state.second;
     } else {
-      logging::LoggerFactory<PersistableKeyValueStoreService>::getLogger()
+      core::logging::LoggerFactory<PersistableKeyValueStoreService>::getLogger()
           ->log_error("Found non-UUID key \"%s\" in storage implementation", state.first);
     }
   }
diff --git a/libminifi/src/core/Core.cpp b/libminifi/src/core/Core.cpp
index 92ed687..fc472ee 100644
--- a/libminifi/src/core/Core.cpp
+++ b/libminifi/src/core/Core.cpp
@@ -20,11 +20,17 @@
 #include <memory>
 #include <string>
 
-namespace org {
-namespace apache {
-namespace nifi {
-namespace minifi {
-namespace core {
+namespace org::apache::nifi::minifi::core {
+
+CoreComponent::CoreComponent(const std::string& name, const utils::Identifier& uuid, const std::shared_ptr<utils::IdGenerator>& idGenerator)
+    : name_(name) {
+  if (uuid.isNil()) {
+    // Generate the global UUID for the flow record
+    uuid_ = idGenerator->generate();
+  } else {
+    uuid_ = uuid;
+  }
+}
 
 // Set UUID
 void CoreComponent::setUUID(const utils::Identifier& uuid) {
@@ -44,8 +50,5 @@ void CoreComponent::setName(const std::string &name) {
 std::string CoreComponent::getName() const {
   return name_;
 }
-} /* namespace core */
-} /* namespace minifi */
-} /* namespace nifi */
-} /* namespace apache */
-} /* namespace org */
+
+} /* namespace org::apache::nifi::minifi::core */
diff --git a/libminifi/src/io/ClientSocket.cpp b/libminifi/src/io/ClientSocket.cpp
index 2538a5f..61d502b 100644
--- a/libminifi/src/io/ClientSocket.cpp
+++ b/libminifi/src/io/ClientSocket.cpp
@@ -73,7 +73,7 @@ auto find_if_custom_linked_list(T* const list, const Adv advance_func, const Pre
 }
 
 #ifndef WIN32
-std::error_code bind_to_local_network_interface(const minifi::io::SocketDescriptor fd, const minifi::io::NetworkInterface& interface) {
+std::error_code bind_to_local_network_interface(const mio::SocketDescriptor fd, const mio::NetworkInterface& interface) {
   using ifaddrs_uniq_ptr = std::unique_ptr<ifaddrs, util::ifaddrs_deleter>;
   const auto if_list_ptr = []() -> ifaddrs_uniq_ptr {
     ifaddrs *list = nullptr;
@@ -98,7 +98,7 @@ std::error_code bind_to_local_network_interface(const minifi::io::SocketDescript
 }
 #endif /* !WIN32 */
 
-std::error_code set_non_blocking(const minifi::io::SocketDescriptor fd) noexcept {
+std::error_code set_non_blocking(const mio::SocketDescriptor fd) noexcept {
 #ifndef WIN32
   if (fcntl(fd, F_SETFL, O_NONBLOCK) < 0) {
     return { errno, std::generic_category() };
@@ -140,7 +140,7 @@ Socket::Socket(const std::shared_ptr<SocketContext>& /*context*/, std::string ho
     : requested_hostname_(std::move(hostname)),
       port_(port),
       listeners_(listeners),
-      logger_(logging::LoggerFactory<Socket>::getLogger()) {
+      logger_(core::logging::LoggerFactory<Socket>::getLogger()) {
   FD_ZERO(&total_list_);
   FD_ZERO(&read_fds_);
   initialize_socket();
@@ -202,7 +202,7 @@ Socket::~Socket() {
 
 void Socket::close() {
   if (valid_socket(socket_file_descriptor_)) {
-    logging::LOG_DEBUG(logger_) << "Closing " << socket_file_descriptor_;
+    core::logging::LOG_DEBUG(logger_) << "Closing " << socket_file_descriptor_;
 #ifdef WIN32
     closesocket(socket_file_descriptor_);
 #else
diff --git a/libminifi/src/io/DescriptorStream.cpp b/libminifi/src/io/DescriptorStream.cpp
index d9336b9..5b48cdb 100644
--- a/libminifi/src/io/DescriptorStream.cpp
+++ b/libminifi/src/io/DescriptorStream.cpp
@@ -36,8 +36,7 @@ namespace minifi {
 namespace io {
 
 DescriptorStream::DescriptorStream(int fd)
-    : fd_(fd),
-      logger_(logging::LoggerFactory<DescriptorStream>::getLogger()) {
+    : fd_(fd) {
 }
 
 void DescriptorStream::seek(size_t offset) {
diff --git a/libminifi/src/io/FileStream.cpp b/libminifi/src/io/FileStream.cpp
index af46abf..591dbe0 100644
--- a/libminifi/src/io/FileStream.cpp
+++ b/libminifi/src/io/FileStream.cpp
@@ -17,8 +17,8 @@
  */
 
 #include <fstream>
-#include <vector>
 #include <memory>
+#include <vector>
 #include <string>
 #include <Exception.h>
 #include "io/validation.h"
@@ -48,35 +48,33 @@ constexpr const char *SEEKP_CALL_ERROR_MSG = "seekp call on file stream failed";
 
 FileStream::FileStream(const std::string &path, bool append)
     : offset_(0),
-      path_(path),
-      logger_(logging::LoggerFactory<FileStream>::getLogger()) {
-  file_stream_ = std::unique_ptr<std::fstream>(new std::fstream());
+      path_(path) {
+  file_stream_ = std::make_unique<std::fstream>();
   if (append) {
     file_stream_->open(path.c_str(), std::fstream::in | std::fstream::out | std::fstream::app | std::fstream::binary);
     if (file_stream_->is_open()) {
       seekToEndOfFile(FILE_OPENING_ERROR_MSG);
       auto len = file_stream_->tellg();
       if (len == std::streampos(-1))
-        logging::LOG_ERROR(logger_) << FILE_OPENING_ERROR_MSG << TELLG_CALL_ERROR_MSG;
+        core::logging::LOG_ERROR(logger_) << FILE_OPENING_ERROR_MSG << TELLG_CALL_ERROR_MSG;
       length_ = len > 0 ? gsl::narrow<size_t>(len) : 0;
       seek(offset_);
     } else {
-      logging::LOG_ERROR(logger_) << FILE_OPENING_ERROR_MSG << path << " " << strerror(errno);
+      core::logging::LOG_ERROR(logger_) << FILE_OPENING_ERROR_MSG << path << " " << strerror(errno);
     }
   } else {
     file_stream_->open(path.c_str(), std::fstream::out | std::fstream::binary);
     length_ = 0;
     if (!file_stream_->is_open()) {
-      logging::LOG_ERROR(logger_) << FILE_OPENING_ERROR_MSG << path << " " << strerror(errno);
+      core::logging::LOG_ERROR(logger_) << FILE_OPENING_ERROR_MSG << path << " " << strerror(errno);
     }
   }
 }
 
 FileStream::FileStream(const std::string &path, uint32_t offset, bool write_enable)
     : offset_(offset),
-      path_(path),
-      logger_(logging::LoggerFactory<FileStream>::getLogger()) {
-  file_stream_ = std::unique_ptr<std::fstream>(new std::fstream());
+      path_(path) {
+  file_stream_ = std::make_unique<std::fstream>();
   if (write_enable) {
     file_stream_->open(path.c_str(), std::fstream::in | std::fstream::out | std::fstream::binary);
   } else {
@@ -86,11 +84,11 @@ FileStream::FileStream(const std::string &path, uint32_t offset, bool write_enab
     seekToEndOfFile(FILE_OPENING_ERROR_MSG);
     auto len = file_stream_->tellg();
     if (len == std::streampos(-1))
-      logging::LOG_ERROR(logger_) << FILE_OPENING_ERROR_MSG << TELLG_CALL_ERROR_MSG;
+      core::logging::LOG_ERROR(logger_) << FILE_OPENING_ERROR_MSG << TELLG_CALL_ERROR_MSG;
     length_ = len > 0 ? gsl::narrow<size_t>(len) : 0;
     seek(offset_);
   } else {
-    logging::LOG_ERROR(logger_) << FILE_OPENING_ERROR_MSG << path << " " << strerror(errno);
+    core::logging::LOG_ERROR(logger_) << FILE_OPENING_ERROR_MSG << path << " " << strerror(errno);
   }
 }
 
@@ -102,15 +100,15 @@ void FileStream::close() {
 void FileStream::seek(size_t offset) {
   std::lock_guard<std::mutex> lock(file_lock_);
   if (file_stream_ == nullptr || !file_stream_->is_open()) {
-    logging::LOG_ERROR(logger_) << SEEK_ERROR_MSG << INVALID_FILE_STREAM_ERROR_MSG;
+    core::logging::LOG_ERROR(logger_) << SEEK_ERROR_MSG << INVALID_FILE_STREAM_ERROR_MSG;
     return;
   }
   offset_ = offset;
   file_stream_->clear();
   if (!file_stream_->seekg(offset_))
-    logging::LOG_ERROR(logger_) << SEEK_ERROR_MSG << SEEKG_CALL_ERROR_MSG;
+    core::logging::LOG_ERROR(logger_) << SEEK_ERROR_MSG << SEEKG_CALL_ERROR_MSG;
   if (!file_stream_->seekp(offset_))
-    logging::LOG_ERROR(logger_) << SEEK_ERROR_MSG << SEEKP_CALL_ERROR_MSG;
+    core::logging::LOG_ERROR(logger_) << SEEK_ERROR_MSG << SEEKP_CALL_ERROR_MSG;
 }
 
 size_t FileStream::tell() const {
@@ -120,16 +118,16 @@ size_t FileStream::tell() const {
 size_t FileStream::write(const uint8_t *value, size_t size) {
   if (size == 0) return 0;
   if (IsNullOrEmpty(value)) {
-    logging::LOG_ERROR(logger_) << WRITE_ERROR_MSG << EMPTY_MESSAGE_ERROR_MSG;
+    core::logging::LOG_ERROR(logger_) << WRITE_ERROR_MSG << EMPTY_MESSAGE_ERROR_MSG;
     return STREAM_ERROR;
   }
   std::lock_guard<std::mutex> lock(file_lock_);
   if (file_stream_ == nullptr || !file_stream_->is_open()) {
-    logging::LOG_ERROR(logger_) << WRITE_ERROR_MSG << INVALID_FILE_STREAM_ERROR_MSG;
+    core::logging::LOG_ERROR(logger_) << WRITE_ERROR_MSG << INVALID_FILE_STREAM_ERROR_MSG;
     return STREAM_ERROR;
   }
   if (!file_stream_->write(reinterpret_cast<const char*>(value), gsl::narrow<std::streamsize>(size))) {
-    logging::LOG_ERROR(logger_) << WRITE_ERROR_MSG << WRITE_CALL_ERROR_MSG;
+    core::logging::LOG_ERROR(logger_) << WRITE_ERROR_MSG << WRITE_CALL_ERROR_MSG;
     return STREAM_ERROR;
   }
   offset_ += size;
@@ -137,7 +135,7 @@ size_t FileStream::write(const uint8_t *value, size_t size) {
     length_ = offset_;
   }
   if (!file_stream_->flush()) {
-    logging::LOG_ERROR(logger_) << WRITE_ERROR_MSG << FLUSH_CALL_ERROR_MSG;
+    core::logging::LOG_ERROR(logger_) << WRITE_ERROR_MSG << FLUSH_CALL_ERROR_MSG;
     return STREAM_ERROR;
   }
   return size;
@@ -150,7 +148,7 @@ size_t FileStream::read(uint8_t *buf, size_t buflen) {
   if (!IsNullOrEmpty(buf)) {
     std::lock_guard<std::mutex> lock(file_lock_);
     if (file_stream_ == nullptr || !file_stream_->is_open()) {
-      logging::LOG_ERROR(logger_) << READ_ERROR_MSG << INVALID_FILE_STREAM_ERROR_MSG;
+      core::logging::LOG_ERROR(logger_) << READ_ERROR_MSG << INVALID_FILE_STREAM_ERROR_MSG;
       return STREAM_ERROR;
     }
     file_stream_->read(reinterpret_cast<char*>(buf), gsl::narrow<std::streamsize>(buflen));
@@ -159,14 +157,14 @@ size_t FileStream::read(uint8_t *buf, size_t buflen) {
       seekToEndOfFile(READ_ERROR_MSG);
       auto tellg_result = file_stream_->tellg();
       if (tellg_result == std::streampos(-1)) {
-        logging::LOG_ERROR(logger_) << READ_ERROR_MSG << TELLG_CALL_ERROR_MSG;
+        core::logging::LOG_ERROR(logger_) << READ_ERROR_MSG << TELLG_CALL_ERROR_MSG;
         return STREAM_ERROR;
       }
       const auto len = gsl::narrow<size_t>(tellg_result);
       size_t ret = len - offset_;
       offset_ = len;
       length_ = len;
-      logging::LOG_DEBUG(logger_) << path_ << " eof bit, ended at " << offset_;
+      core::logging::LOG_DEBUG(logger_) << path_ << " eof bit, ended at " << offset_;
       return ret;
     } else {
       offset_ += buflen;
@@ -174,16 +172,16 @@ size_t FileStream::read(uint8_t *buf, size_t buflen) {
       return buflen;
     }
   } else {
-    logging::LOG_ERROR(logger_) << READ_ERROR_MSG << INVALID_BUFFER_ERROR_MSG;
+    core::logging::LOG_ERROR(logger_) << READ_ERROR_MSG << INVALID_BUFFER_ERROR_MSG;
     return STREAM_ERROR;
   }
 }
 
 void FileStream::seekToEndOfFile(const char *caller_error_msg) {
   if (!file_stream_->seekg(0, file_stream_->end))
-    logging::LOG_ERROR(logger_) << caller_error_msg << SEEKG_CALL_ERROR_MSG;
+    core::logging::LOG_ERROR(logger_) << caller_error_msg << SEEKG_CALL_ERROR_MSG;
   if (!file_stream_->seekp(0, file_stream_->end))
-    logging::LOG_ERROR(logger_) << caller_error_msg << SEEKP_CALL_ERROR_MSG;
+    core::logging::LOG_ERROR(logger_) << caller_error_msg << SEEKP_CALL_ERROR_MSG;
 }
 } /* namespace io */
 } /* namespace minifi */
diff --git a/libminifi/src/io/ServerSocket.cpp b/libminifi/src/io/ServerSocket.cpp
index 032233f..138899f 100644
--- a/libminifi/src/io/ServerSocket.cpp
+++ b/libminifi/src/io/ServerSocket.cpp
@@ -43,7 +43,7 @@ namespace io {
 ServerSocket::ServerSocket(const std::shared_ptr<SocketContext> &context, const std::string &hostname, const uint16_t port, const uint16_t listeners = -1)
     : Socket(context, hostname, port, listeners),
       running_(true),
-      logger_(logging::LoggerFactory<ServerSocket>::getLogger()) {
+      logger_(core::logging::LoggerFactory<ServerSocket>::getLogger()) {
 }
 
 ServerSocket::~ServerSocket() {
diff --git a/libminifi/src/io/ZlibStream.cpp b/libminifi/src/io/ZlibStream.cpp
index 9a9aa2f..04dd6b7 100644
--- a/libminifi/src/io/ZlibStream.cpp
+++ b/libminifi/src/io/ZlibStream.cpp
@@ -40,9 +40,9 @@ bool ZlibBaseStream::isFinished() const {
 }
 
 ZlibCompressStream::ZlibCompressStream(gsl::not_null<OutputStream*> output, ZlibCompressionFormat format, int level)
-  : ZlibCompressStream(output, format, level, logging::LoggerFactory<ZlibCompressStream>::getLogger()) {}
+  : ZlibCompressStream(output, format, level, core::logging::LoggerFactory<ZlibCompressStream>::getLogger()) {}
 
-ZlibCompressStream::ZlibCompressStream(gsl::not_null<OutputStream*> output, ZlibCompressionFormat format, int level, std::shared_ptr<logging::Logger> logger)
+ZlibCompressStream::ZlibCompressStream(gsl::not_null<OutputStream*> output, ZlibCompressionFormat format, int level, std::shared_ptr<core::logging::Logger> logger)
   : ZlibBaseStream(output),
     logger_{std::move(logger)} {
   int ret = deflateInit2(
@@ -130,7 +130,7 @@ void ZlibCompressStream::close() {
 
 ZlibDecompressStream::ZlibDecompressStream(gsl::not_null<OutputStream*> output, ZlibCompressionFormat format)
     : ZlibBaseStream(output),
-      logger_{logging::LoggerFactory<ZlibDecompressStream>::getLogger()} {
+      logger_{core::logging::LoggerFactory<ZlibDecompressStream>::getLogger()} {
   int ret = inflateInit2(&strm_, 15 + (format == ZlibCompressionFormat::GZIP ? 16 : 0) /* windowBits */);
   if (ret != Z_OK) {
     logger_->log_error("Failed to initialize z_stream with inflateInit2, error code: %d", ret);
diff --git a/libminifi/src/io/tls/SecureDescriptorStream.cpp b/libminifi/src/io/tls/SecureDescriptorStream.cpp
index f11a89b..ce4cf6a 100644
--- a/libminifi/src/io/tls/SecureDescriptorStream.cpp
+++ b/libminifi/src/io/tls/SecureDescriptorStream.cpp
@@ -32,8 +32,7 @@ namespace minifi {
 namespace io {
 
 SecureDescriptorStream::SecureDescriptorStream(int fd, SSL *ssl)
-    : fd_(fd), ssl_(ssl),
-      logger_(logging::LoggerFactory<SecureDescriptorStream>::getLogger()) {
+    : fd_(fd), ssl_(ssl) {
 }
 
 void SecureDescriptorStream::seek(size_t offset) {
diff --git a/libminifi/src/io/tls/TLSServerSocket.cpp b/libminifi/src/io/tls/TLSServerSocket.cpp
index ae9d692..3a67c4b 100644
--- a/libminifi/src/io/tls/TLSServerSocket.cpp
+++ b/libminifi/src/io/tls/TLSServerSocket.cpp
@@ -56,8 +56,7 @@ namespace io {
 
 TLSServerSocket::TLSServerSocket(const std::shared_ptr<TLSContext> &context, const std::string &hostname, const uint16_t port, const uint16_t listeners = -1)
     : TLSSocket(context, hostname, port, listeners),
-      running_(true),
-      logger_(logging::LoggerFactory<TLSServerSocket>::getLogger()) {
+      running_(true) {
 }
 
 TLSServerSocket::~TLSServerSocket() {
diff --git a/libminifi/src/io/tls/TLSSocket.cpp b/libminifi/src/io/tls/TLSSocket.cpp
index c1d1d81..5d76e8c 100644
--- a/libminifi/src/io/tls/TLSSocket.cpp
+++ b/libminifi/src/io/tls/TLSSocket.cpp
@@ -43,7 +43,6 @@ namespace io {
 
 TLSContext::TLSContext(const std::shared_ptr<Configure> &configure, std::shared_ptr<minifi::controllers::SSLContextService> ssl_service)
     : SocketContext(configure),
-      logger_(logging::LoggerFactory<TLSContext>::getLogger()),
       configure_(configure),
       ssl_service_(std::move(ssl_service)),
       ctx(nullptr, deleteContext),
@@ -167,13 +166,13 @@ void TLSSocket::close() {
  */
 TLSSocket::TLSSocket(const std::shared_ptr<TLSContext> &context, const std::string &hostname, const uint16_t port, const uint16_t listeners)
     : Socket(context, hostname, port, listeners) {
-  logger_ = logging::LoggerFactory<TLSSocket>::getLogger();
+  logger_ = core::logging::LoggerFactory<TLSSocket>::getLogger();
   context_ = context;
 }
 
 TLSSocket::TLSSocket(const std::shared_ptr<TLSContext> &context, const std::string &hostname, const uint16_t port)
     : Socket(context, hostname, port, 0) {
-  logger_ = logging::LoggerFactory<TLSSocket>::getLogger();
+  logger_ = core::logging::LoggerFactory<TLSSocket>::getLogger();
   context_ = context;
 }
 
diff --git a/libminifi/src/properties/Properties.cpp b/libminifi/src/properties/Properties.cpp
index 79c5559..061afed 100644
--- a/libminifi/src/properties/Properties.cpp
+++ b/libminifi/src/properties/Properties.cpp
@@ -16,6 +16,7 @@
  * limitations under the License.
  */
 #include "properties/Properties.h"
+#include <fstream>
 #include <string>
 #include "utils/StringUtils.h"
 #include "utils/file/FileUtils.h"
@@ -32,7 +33,7 @@ namespace minifi {
 #define TRACE_BUFFER_SIZE 512
 
 Properties::Properties(const std::string& name)
-    : logger_(logging::LoggerFactory<Properties>::getLogger()),
+    : logger_(core::logging::LoggerFactory<Properties>::getLogger()),
     name_(name) {
 }
 
diff --git a/libminifi/src/provenance/Provenance.cpp b/libminifi/src/provenance/Provenance.cpp
index c3f6caf..f0b40c4 100644
--- a/libminifi/src/provenance/Provenance.cpp
+++ b/libminifi/src/provenance/Provenance.cpp
@@ -38,7 +38,7 @@ namespace minifi {
 namespace provenance {
 
 std::shared_ptr<utils::IdGenerator> ProvenanceEventRecord::id_generator_ = utils::IdGenerator::getIdGenerator();
-std::shared_ptr<logging::Logger> ProvenanceEventRecord::logger_ = logging::LoggerFactory<ProvenanceEventRecord>::getLogger();
+std::shared_ptr<core::logging::Logger> ProvenanceEventRecord::logger_ = core::logging::LoggerFactory<ProvenanceEventRecord>::getLogger();
 
 const char *ProvenanceEventRecord::ProvenanceEventTypeStr[REPLAY + 1] = { "CREATE", "RECEIVE", "FETCH", "SEND", "DOWNLOAD", "DROP", "EXPIRE", "FORK", "JOIN", "CLONE", "CONTENT_MODIFIED",
     "ATTRIBUTES_MODIFIED", "ROUTE", "ADDINFO", "REPLAY" };
diff --git a/libminifi/src/sitetosite/RawSocketProtocol.cpp b/libminifi/src/sitetosite/RawSocketProtocol.cpp
index f02f785..7f854d3 100644
--- a/libminifi/src/sitetosite/RawSocketProtocol.cpp
+++ b/libminifi/src/sitetosite/RawSocketProtocol.cpp
@@ -154,7 +154,7 @@ bool RawSiteToSiteClient::initiateResourceNegotiation() {
         }
       }
 
-      logging::LOG_INFO(logger_) << "Site2Site Server Response asked for a different protocol version " << serverVersion;
+      core::logging::LOG_INFO(logger_) << "Site2Site Server Response asked for a different protocol version " << serverVersion;
 
       for (unsigned int i = (_currentVersionIndex + 1); i < sizeof(_supportedVersion) / sizeof(uint32_t); i++) {
         if (serverVersion >= _supportedVersion[i]) {
@@ -218,7 +218,7 @@ bool RawSiteToSiteClient::initiateCodecResourceNegotiation() {
           return false;
         }
       }
-      logging::LOG_INFO(logger_) << "Site2Site Server Response asked for a different protocol version " << serverVersion;
+      core::logging::LOG_INFO(logger_) << "Site2Site Server Response asked for a different protocol version " << serverVersion;
 
       for (unsigned int i = (_currentCodecVersionIndex + 1); i < sizeof(_supportedCodecVersion) / sizeof(uint32_t); i++) {
         if (serverVersion >= _supportedCodecVersion[i]) {
@@ -397,7 +397,7 @@ bool RawSiteToSiteClient::getPeerList(std::vector<PeerStatus> &peers) {
         }
       }
       peers.push_back(PeerStatus{std::make_shared<Peer>(port_id_, host, gsl::narrow<uint16_t>(port), secure != 0), count, true});
-      logging::LOG_TRACE(logger_) << "Site2Site Peer host " << host << " port " << port << " Secure " << std::to_string(secure);
+      core::logging::LOG_TRACE(logger_) << "Site2Site Peer host " << host << " port " << port << " Secure " << std::to_string(secure);
     }
 
     tearDown();
@@ -588,7 +588,7 @@ bool RawSiteToSiteClient::transmitPayload(const std::shared_ptr<core::ProcessCon
     if (resp == -1) {
       throw Exception(SITE2SITE_EXCEPTION, "Send Failed in transaction " + transactionID.to_string());
     }
-    logging::LOG_INFO(logger_) << "Site2Site transaction " << transactionID.to_string() << " sent bytes length" << payload.length();
+    core::logging::LOG_INFO(logger_) << "Site2Site transaction " << transactionID.to_string() << " sent bytes length" << payload.length();
 
     if (!confirm(transactionID)) {
       throw Exception(SITE2SITE_EXCEPTION, "Confirm Failed in transaction " + transactionID.to_string());
@@ -596,7 +596,7 @@ bool RawSiteToSiteClient::transmitPayload(const std::shared_ptr<core::ProcessCon
     if (!complete(transactionID)) {
       throw Exception(SITE2SITE_EXCEPTION, "Complete Failed in transaction " + transactionID.to_string());
     }
-    logging::LOG_INFO(logger_) << "Site2Site transaction " << transactionID.to_string()
+    core::logging::LOG_INFO(logger_) << "Site2Site transaction " << transactionID.to_string()
         << " successfully send flow record " << transaction->current_transfers_ << " content bytes " << transaction->_bytes;
   } catch (std::exception &exception) {
     if (transaction)
diff --git a/libminifi/src/sitetosite/SiteToSiteClient.cpp b/libminifi/src/sitetosite/SiteToSiteClient.cpp
index f12a96d..b0418fd 100644
--- a/libminifi/src/sitetosite/SiteToSiteClient.cpp
+++ b/libminifi/src/sitetosite/SiteToSiteClient.cpp
@@ -514,7 +514,7 @@ int16_t SiteToSiteClient::send(const utils::Identifier &transactionID, DataPacke
   transaction->_state = DATA_EXCHANGED;
   transaction->_bytes += len;
 
-  logging::LOG_INFO(logger_) << "Site to Site transaction " << transactionID.to_string() << " sent flow " << transaction->total_transfers_
+  core::logging::LOG_INFO(logger_) << "Site to Site transaction " << transactionID.to_string() << " sent flow " << transaction->total_transfers_
                              << "flow records, with total size " << transaction->_bytes;
 
   return 0;
@@ -632,7 +632,7 @@ bool SiteToSiteClient::receive(const utils::Identifier& transactionID, DataPacke
   }
   transaction->_state = DATA_EXCHANGED;
   transaction->_bytes += len;
-  logging::LOG_INFO(logger_) << "Site to Site transaction " << transactionID.to_string() << " received flow record " << transaction->total_transfers_
+  core::logging::LOG_INFO(logger_) << "Site to Site transaction " << transactionID.to_string() << " received flow record " << transaction->total_transfers_
                              << ", total length " << transaction->_bytes << ", added " << len;
 
   return true;
@@ -724,7 +724,7 @@ bool SiteToSiteClient::receiveFlowFiles(const std::shared_ptr<core::ProcessConte
       transaction_str << "Complete Transaction " << transactionID.to_string() << " Failed";
       throw Exception(SITE2SITE_EXCEPTION, transaction_str.str());
     }
-    logging::LOG_INFO(logger_) << "Site to Site transaction " << transactionID.to_string() << " received flow record " << transfers
+    core::logging::LOG_INFO(logger_) << "Site to Site transaction " << transactionID.to_string() << " received flow record " << transfers
                                << ", with content size " << bytes << " bytes";
     // we yield the receive if we did not get anything
     if (transfers == 0)
diff --git a/libminifi/src/utils/HTTPClient.cpp b/libminifi/src/utils/HTTPClient.cpp
index dd81743..c3a5b1d 100644
--- a/libminifi/src/utils/HTTPClient.cpp
+++ b/libminifi/src/utils/HTTPClient.cpp
@@ -21,15 +21,18 @@
 #include "utils/HTTPClient.h"
 #include "utils/StringUtils.h"
 
+namespace minifi = org::apache::nifi::minifi;
+
 namespace {
 
 constexpr const char* HTTP = "http://";
 constexpr const char* HTTPS = "https://";
 
+
 std::optional<std::string> parseProtocol(const std::string& url_input) {
-  if (utils::StringUtils::startsWith(url_input, HTTP)) {
+  if (minifi::utils::StringUtils::startsWith(url_input, HTTP)) {
     return HTTP;
-  } else if (utils::StringUtils::startsWith(url_input, HTTPS)) {
+  } else if (minifi::utils::StringUtils::startsWith(url_input, HTTPS)) {
     return HTTPS;
   } else {
     return std::nullopt;
diff --git a/libminifi/src/utils/Id.cpp b/libminifi/src/utils/Id.cpp
index 926b7ab..9c5c559 100644
--- a/libminifi/src/utils/Id.cpp
+++ b/libminifi/src/utils/Id.cpp
@@ -182,10 +182,10 @@ bool Identifier::parseByte(Data &data, const uint8_t *input, int &charIdx, int &
 
 IdGenerator::IdGenerator()
     : implementation_(UUID_TIME_IMPL),
-      logger_(logging::LoggerFactory<IdGenerator>::getLogger()),
+      logger_(core::logging::LoggerFactory<IdGenerator>::getLogger()),
       incrementor_(0) {
 #ifndef WIN32
-  uuid_impl_ = std::unique_ptr<uuid>(new uuid());
+  uuid_impl_ = std::make_unique<uuid>();
 #endif
 }
 
@@ -200,13 +200,13 @@ uint64_t IdGenerator::getDeviceSegmentFromString(const std::string& str, int num
     } else if (c >= 'A' && c <= 'F') {
       deviceSegment = deviceSegment + (c - 'A' + 10);
     } else {
-      logging::LOG_ERROR(logger_) << "Expected hex char (0-9, A-F).  Got " << c;
+      core::logging::LOG_ERROR(logger_) << "Expected hex char (0-9, A-F).  Got " << c;
     }
     deviceSegment = deviceSegment << 4;
   }
   deviceSegment <<= 64 - (4 * (str.length() + 1));
   deviceSegment >>= 64 - numBits;
-  logging::LOG_DEBUG(logger_) << "Using user defined device segment: " << std::hex << deviceSegment;
+  core::logging::LOG_DEBUG(logger_) << "Using user defined device segment: " << std::hex << deviceSegment;
   deviceSegment <<= 64 - numBits;
   return deviceSegment;
 }
@@ -230,7 +230,7 @@ uint64_t IdGenerator::getRandomDeviceSegment(int numBits) const {
     }
   }
   deviceSegment >>= 64 - numBits;
-  logging::LOG_DEBUG(logger_) << "Using random defined device segment:" << deviceSegment;
+  core::logging::LOG_DEBUG(logger_) << "Using random defined device segment:" << deviceSegment;
   deviceSegment <<= 64 - numBits;
   return deviceSegment;
 }
@@ -241,13 +241,13 @@ void IdGenerator::initialize(const std::shared_ptr<Properties>& properties) {
   if (properties->getString("uid.implementation", implementation_str)) {
     std::transform(implementation_str.begin(), implementation_str.end(), implementation_str.begin(), ::tolower);
     if (UUID_RANDOM_STR == implementation_str || UUID_WINDOWS_RANDOM_STR == implementation_str) {
-      logging::LOG_DEBUG(logger_) << "Using uuid_generate_random for uids.";
+      core::logging::LOG_DEBUG(logger_) << "Using uuid_generate_random for uids.";
       implementation_ = UUID_RANDOM_IMPL;
     } else if (UUID_DEFAULT_STR == implementation_str) {
-      logging::LOG_DEBUG(logger_) << "Using uuid_generate for uids.";
+      core::logging::LOG_DEBUG(logger_) << "Using uuid_generate for uids.";
       implementation_ = UUID_DEFAULT_IMPL;
     } else if (MINIFI_UID_STR == implementation_str) {
-      logging::LOG_DEBUG(logger_) << "Using minifi uid implementation for uids";
+      core::logging::LOG_DEBUG(logger_) << "Using minifi uid implementation for uids";
       implementation_ = MINIFI_UID_IMPL;
 
       uint64_t timestamp = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
@@ -258,13 +258,13 @@ void IdGenerator::initialize(const std::shared_ptr<Properties>& properties) {
         if (properties->getString("uid.minifi.device.segment", device_segment)) {
           prefix = getDeviceSegmentFromString(device_segment, device_bits);
         } else {
-          logging::LOG_WARN(logger_) << "uid.minifi.device.segment not specified, generating random device segment";
+          core::logging::LOG_WARN(logger_) << "uid.minifi.device.segment not specified, generating random device segment";
           prefix = getRandomDeviceSegment(device_bits);
         }
         timestamp <<= device_bits;
         timestamp >>= device_bits;
         prefix = prefix + timestamp;
-        logging::LOG_DEBUG(logger_) << "Using minifi uid prefix: " << std::hex << prefix;
+        core::logging::LOG_DEBUG(logger_) << "Using minifi uid prefix: " << std::hex << prefix;
       }
       for (int i = 0; i < 8; i++) {
         unsigned char prefix_element = (prefix >> ((7 - i) * 8)) & std::numeric_limits<unsigned char>::max();
@@ -272,12 +272,12 @@ void IdGenerator::initialize(const std::shared_ptr<Properties>& properties) {
       }
       incrementor_ = 0;
     } else if (UUID_TIME_STR == implementation_str || UUID_WINDOWS_STR == implementation_str) {
-      logging::LOG_DEBUG(logger_) << "Using uuid_generate_time implementation for uids.";
+      core::logging::LOG_DEBUG(logger_) << "Using uuid_generate_time implementation for uids.";
     } else {
-      logging::LOG_DEBUG(logger_) << "Invalid value for uid.implementation (" << implementation_str << "). Using uuid_generate_time implementation for uids.";
+      core::logging::LOG_DEBUG(logger_) << "Invalid value for uid.implementation (" << implementation_str << "). Using uuid_generate_time implementation for uids.";
     }
   } else {
-    logging::LOG_DEBUG(logger_) << "Using uuid_generate_time implementation for uids.";
+    core::logging::LOG_DEBUG(logger_) << "Using uuid_generate_time implementation for uids.";
   }
 }
 
diff --git a/libminifi/src/utils/file/FilePattern.cpp b/libminifi/src/utils/file/FilePattern.cpp
index 3a6f691..c9fd636 100644
--- a/libminifi/src/utils/file/FilePattern.cpp
+++ b/libminifi/src/utils/file/FilePattern.cpp
@@ -217,7 +217,7 @@ auto FilePattern::FilePatternSegment::match(const std::filesystem::path& path) c
   return match(path.parent_path().string());
 }
 
-static std::shared_ptr<logging::Logger> logger = logging::LoggerFactory<FilePattern>::getLogger();
+static std::shared_ptr<core::logging::Logger> logger = core::logging::LoggerFactory<FilePattern>::getLogger();
 
 std::set<std::filesystem::path> match(const FilePattern& pattern) {
   using FilePatternSegment = FilePattern::FilePatternSegment;
diff --git a/libminifi/test/KamikazeProcessor.h b/libminifi/test/KamikazeProcessor.h
index 4b8e082..e36573d 100644
--- a/libminifi/test/KamikazeProcessor.h
+++ b/libminifi/test/KamikazeProcessor.h
@@ -32,7 +32,7 @@ namespace apache {
 namespace nifi {
 namespace minifi {
 namespace processors {
-// GenerateFlowFile Class
+
 class KamikazeProcessor : public core::Processor {
  public:
   static const std::string OnScheduleExceptionStr;
@@ -42,8 +42,7 @@ class KamikazeProcessor : public core::Processor {
   static const std::string OnUnScheduleLogStr;
 
   explicit KamikazeProcessor(const std::string& name, const utils::Identifier& uuid = utils::Identifier())
-  : Processor(name, uuid), logger_(logging::LoggerFactory<KamikazeProcessor>::getLogger()) {
-    _throwInOnTrigger = false;
+      : Processor(name, uuid) {
   }
 
   // Processor Name
@@ -53,15 +52,14 @@ class KamikazeProcessor : public core::Processor {
   static core::Property ThrowInOnTrigger;
 
  public:
-  virtual void onSchedule(core::ProcessContext *context, core::ProcessSessionFactory *sessionFactory);
-  virtual void onTrigger(core::ProcessContext *context, core::ProcessSession *session);
-  virtual void initialize();
-  virtual void onUnSchedule();
+  void onSchedule(core::ProcessContext *context, core::ProcessSessionFactory *sessionFactory) override;
+  void onTrigger(core::ProcessContext *context, core::ProcessSession *session) override;
+  void initialize() override;
+  void onUnSchedule() override;
 
  private:
-  bool _throwInOnTrigger;
-  // logger instance
-  std::shared_ptr<logging::Logger> logger_;
+  bool _throwInOnTrigger = false;
+  std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<KamikazeProcessor>::getLogger();
 };
 
 } /* namespace processors */
diff --git a/libminifi/test/RandomServerSocket.cpp b/libminifi/test/RandomServerSocket.cpp
index a532f44..fb075a9 100644
--- a/libminifi/test/RandomServerSocket.cpp
+++ b/libminifi/test/RandomServerSocket.cpp
@@ -42,7 +42,7 @@ namespace io {
     std::random_device rd;
     std::mt19937 gen(rd());
     std::uniform_int_distribution<uint16_t> dis(offset, offset + range);
-    auto logger = logging::LoggerFactory<RandomServerSocket>::getLogger();
+    auto logger = core::logging::LoggerFactory<RandomServerSocket>::getLogger();
     for (uint16_t i = 0; i < retries; ++i) {
       setPort(dis(gen));
       if (RandomServerSocket::initialize() == 0) {
diff --git a/libminifi/test/TestBase.cpp b/libminifi/test/TestBase.cpp
index 40c3462..4dc83b3 100644
--- a/libminifi/test/TestBase.cpp
+++ b/libminifi/test/TestBase.cpp
@@ -17,12 +17,47 @@
  */
 
 #include "./TestBase.h"
+
+#include <map>
+#include <memory>
+#include <set>
+#include <sstream>
+#include <utility>
+
+#include "core/FlowConfiguration.h"
+#include "core/Processor.h"
+#include "core/ProcessContextBuilder.h"
+#include "core/logging/LoggerConfiguration.h"
+#include "core/state/nodes/FlowInformation.h"
+#include "core/controller/StandardControllerServiceProvider.h"
+#include "unit/ProvenanceTestHelper.h"
+#include "utils/ClassUtils.h"
 #include "utils/IntegrationTestUtils.h"
 #include "core/extension/ExtensionManager.h"
+#include "utils/Id.h"
+#include "utils/StringUtils.h"
+#include "LogUtils.h"
 
 #include "spdlog/spdlog.h"
+#include "spdlog/sinks/stdout_sinks.h"
+#include "spdlog/sinks/ostream_sink.h"
+#include "spdlog/sinks/dist_sink.h"
+
+std::shared_ptr<LogTestController> LogTestController::getInstance(const std::shared_ptr<logging::LoggerProperties>& logger_properties) {
+  static std::map<std::shared_ptr<logging::LoggerProperties>, std::shared_ptr<LogTestController>> map;
+  auto fnd = map.find(logger_properties);
+  if (fnd != std::end(map)) {
+    return fnd->second;
+  } else {
+    // in practice I'd use a derivation here or another paradigm entirely but for the purposes of this test code
+    // having extra overhead is negligible. this is the most readable and least impactful way
+    auto instance = std::shared_ptr<LogTestController>(new LogTestController(logger_properties));
+    map.insert(std::make_pair(logger_properties, instance));
+    return map.find(logger_properties)->second;
+  }
+}
 
-void LogTestController::setLevel(const std::string name, spdlog::level::level_enum level) {
+void LogTestController::setLevel(const std::string& name, spdlog::level::level_enum level) {
   const auto levelView(spdlog::level::to_string_view(level));
   logger_->log_info("Setting log level for %s to %s", name, std::string(levelView.begin(), levelView.end()));
   std::string adjusted_name = name;
@@ -31,40 +66,150 @@ void LogTestController::setLevel(const std::string name, spdlog::level::level_en
   if (haz_clazz == 0)
     adjusted_name = name.substr(clazz.length(), name.length() - clazz.length());
   if (config && config->shortenClassNames()) {
-    utils::ClassUtils::shortenClassName(adjusted_name, adjusted_name);
+    minifi::utils::ClassUtils::shortenClassName(adjusted_name, adjusted_name);
   }
   logging::LoggerConfiguration::getSpdlogLogger(adjusted_name)->set_level(level);
 }
 
-TestPlan::TestPlan(std::shared_ptr<core::ContentRepository> content_repo, std::shared_ptr<core::Repository> flow_repo, std::shared_ptr<core::Repository> prov_repo,
-                   const std::shared_ptr<minifi::state::response::FlowVersion> &flow_version, const std::shared_ptr<minifi::Configure> &configuration, const char* state_dir)
-    : configuration_(configuration),
-      content_repo_(content_repo),
-      flow_repo_(flow_repo),
-      prov_repo_(prov_repo),
+std::shared_ptr<logging::Logger> LogTestController::getLoggerByClassName(const std::string& class_name) {
+  return config ? config->getLogger(class_name) : logging::LoggerConfiguration::getConfiguration().getLogger(class_name);
+}
+
+void LogTestController::setLevelByClassName(spdlog::level::level_enum level, const std::string& class_name) {
+  if (config)
+    config->getLogger(class_name);
+  else
+    logging::LoggerConfiguration::getConfiguration().getLogger(class_name);
+  modified_loggers.push_back(class_name);
+  setLevel(class_name, level);
+  // also support shortened classnames
+  if (config && config->shortenClassNames()) {
+    std::string adjusted = class_name;
+    if (minifi::utils::ClassUtils::shortenClassName(class_name, adjusted)) {
+      modified_loggers.push_back(class_name);
+      setLevel(class_name, level);
+    }
+  }
+}
+
+bool LogTestController::contains(const std::ostringstream& stream, const std::string& ending, std::chrono::seconds timeout, std::chrono::milliseconds sleep_interval) {
+  if (ending.length() == 0) {
+    return false;
+  }
+  auto start = std::chrono::system_clock::now();
+  bool found = false;
+  bool timed_out = false;
+  do {
+    std::string str = stream.str();
+    found = (str.find(ending) != std::string::npos);
+    auto now = std::chrono::system_clock::now();
+    timed_out = (now - start > timeout);
+    if (!found && !timed_out) {
+      std::this_thread::sleep_for(sleep_interval);
+    }
+  } while (!found && !timed_out);
+
+  logger_->log_info("%s %s in log output.", found ? "Successfully found" : "Failed to find", ending);
+  return found;
+}
+
+std::optional<std::smatch> LogTestController::matchesRegex(const std::string& regex_str, std::chrono::seconds timeout, std::chrono::milliseconds sleep_interval) {
+  if (regex_str.length() == 0) {
+    return std::nullopt;
+  }
+  auto start = std::chrono::system_clock::now();
+  bool found = false;
+  bool timed_out = false;
+  std::regex matcher_regex(regex_str);
+  std::smatch match;
+  do {
+    std::string str = log_output.str();
+    found = std::regex_search(str, match, matcher_regex);
+    auto now = std::chrono::system_clock::now();
+    timed_out = (now - start > timeout);
+    if (!found && !timed_out) {
+      std::this_thread::sleep_for(sleep_interval);
+    }
+  } while (!found && !timed_out);
+
+  logger_->log_info("%s %s in log output.", found ? "Successfully matched regex" : "Failed to match regex", regex_str);
+  return found ? std::make_optional<std::smatch>(match) : std::nullopt;
+}
+
+int LogTestController::countOccurrences(const std::string& pattern) const {
+  return minifi::utils::StringUtils::countOccurrences(log_output.str(), pattern).second;
+}
+
+void LogTestController::reset() {
+  for (auto const & name : modified_loggers) {
+    setLevel(name, spdlog::level::err);
+  }
+  modified_loggers.clear();
+  if (config)
+    config = logging::LoggerConfiguration::newInstance();
+  resetStream(log_output);
+}
+
+void LogTestController::resetStream(std::ostringstream& stream) {
+  stream.str("");
+  stream.clear();
+}
+
+LogTestController::LogTestController(const std::shared_ptr<logging::LoggerProperties>& loggerProps) {
+  my_properties_ = loggerProps;
+  bool initMain = false;
+  if (nullptr == my_properties_) {
+    my_properties_ = std::make_shared<logging::LoggerProperties>();
+    initMain = true;
+  }
+  my_properties_->set("logger.root", "ERROR,ostream");
+  my_properties_->set("logger." + minifi::core::getClassName<LogTestController>(), "INFO");
+  my_properties_->set("logger." + minifi::core::getClassName<logging::LoggerConfiguration>(), "INFO");
+  std::shared_ptr<spdlog::sinks::dist_sink_mt> dist_sink = std::make_shared<spdlog::sinks::dist_sink_mt>();
+  dist_sink->add_sink(std::make_shared<StringStreamSink>(log_output_ptr, true));
+  dist_sink->add_sink(std::make_shared<spdlog::sinks::stderr_sink_mt>());
+  my_properties_->add_sink("ostream", dist_sink);
+  if (initMain) {
+    logging::LoggerConfiguration::getConfiguration().initialize(my_properties_);
+    logger_ = logging::LoggerConfiguration::getConfiguration().getLogger(minifi::core::getClassName<LogTestController>());
+  } else {
+    config = logging::LoggerConfiguration::newInstance();
+    // create for test purposes. most tests use the main logging factory, but this exists to test the logging
+    // framework itself.
+    config->initialize(my_properties_);
+    logger_ = config->getLogger(minifi::core::getClassName<LogTestController>());
+  }
+}
+
+TestPlan::TestPlan(std::shared_ptr<minifi::core::ContentRepository> content_repo, std::shared_ptr<minifi::core::Repository> flow_repo, std::shared_ptr<minifi::core::Repository> prov_repo,
+                   std::shared_ptr<minifi::state::response::FlowVersion> flow_version, std::shared_ptr<minifi::Configure> configuration, const char* state_dir)
+    : configuration_(std::move(configuration)),
+      content_repo_(std::move(content_repo)),
+      flow_repo_(std::move(flow_repo)),
+      prov_repo_(std::move(prov_repo)),
       finalized(false),
       location(-1),
       current_flowfile_(nullptr),
-      flow_version_(flow_version),
+      flow_version_(std::move(flow_version)),
       logger_(logging::LoggerFactory<TestPlan>::getLogger()) {
   stream_factory = org::apache::nifi::minifi::io::StreamFactory::getInstance(std::make_shared<minifi::Configure>());
-  controller_services_ = std::make_shared<core::controller::ControllerServiceMap>();
-  controller_services_provider_ = std::make_shared<core::controller::StandardControllerServiceProvider>(controller_services_, nullptr, configuration_);
+  controller_services_ = std::make_shared<minifi::core::controller::ControllerServiceMap>();
+  controller_services_provider_ = std::make_shared<minifi::core::controller::StandardControllerServiceProvider>(controller_services_, nullptr, configuration_);
   /* Inject the default state provider ahead of ProcessContext to make sure we have a unique state directory */
   if (state_dir == nullptr) {
-    state_dir_.reset(new StateDir());
+    state_dir_ = std::make_unique<StateDir>();
   } else {
-    state_dir_.reset(new StateDir(state_dir));
+    state_dir_ = std::make_unique<StateDir>(state_dir);
   }
   if (!configuration_->get(minifi::Configure::nifi_state_management_provider_local_path)) {
     configuration_->set(minifi::Configure::nifi_state_management_provider_local_path, state_dir_->getPath());
   }
-  state_manager_provider_ = core::ProcessContext::getOrCreateDefaultStateManagerProvider(controller_services_provider_.get(), configuration_);
+  state_manager_provider_ = minifi::core::ProcessContext::getOrCreateDefaultStateManagerProvider(controller_services_provider_.get(), configuration_);
 }
 
 TestPlan::~TestPlan() {
   for (auto& processor : configured_processors_) {
-    processor->setScheduledState(core::ScheduledState::STOPPED);
+    processor->setScheduledState(minifi::core::ScheduledState::STOPPED);
   }
   for (auto& connection : relationships_) {
     // This is a patch solving circular references between processors and connections
@@ -74,7 +219,7 @@ TestPlan::~TestPlan() {
   controller_services_provider_->clearControllerServices();
 }
 
-std::shared_ptr<core::Processor> TestPlan::addProcessor(const std::shared_ptr<core::Processor> &processor, const std::string& /*name*/, const std::initializer_list<core::Relationship>& relationships,
+std::shared_ptr<minifi::core::Processor> TestPlan::addProcessor(const std::shared_ptr<minifi::core::Processor> &processor, const std::string& /*name*/, const std::initializer_list<minifi::core::Relationship>& relationships,
     bool linkToPrevious) {
   if (finalized) {
     return nullptr;
@@ -88,7 +233,7 @@ std::shared_ptr<core::Processor> TestPlan::addProcessor(const std::shared_ptr<co
   if (!linkToPrevious) {
     termination_ = *(relationships.begin());
   } else {
-    std::shared_ptr<core::Processor> last = processor_queue_.back();
+    std::shared_ptr<minifi::core::Processor> last = processor_queue_.back();
     if (last == nullptr) {
       last = processor;
       termination_ = *(relationships.begin());
@@ -113,10 +258,10 @@ std::shared_ptr<core::Processor> TestPlan::addProcessor(const std::shared_ptr<co
     }
     relationships_.push_back(connection);
   }
-  std::shared_ptr<core::ProcessorNode> node = std::make_shared<core::ProcessorNode>(processor);
+  std::shared_ptr<minifi::core::ProcessorNode> node = std::make_shared<minifi::core::ProcessorNode>(processor);
   processor_nodes_.push_back(node);
   // std::shared_ptr<core::ProcessContext> context = std::make_shared<core::ProcessContext>(node, controller_services_provider_, prov_repo_, flow_repo_, configuration_, content_repo_);
-  auto contextBuilder = core::ClassLoader::getDefaultClassLoader().instantiate<core::ProcessContextBuilder>("ProcessContextBuilder", "ProcessContextBuilder");
+  auto contextBuilder = minifi::core::ClassLoader::getDefaultClassLoader().instantiate<minifi::core::ProcessContextBuilder>("ProcessContextBuilder", "ProcessContextBuilder");
   contextBuilder = contextBuilder->withContentRepository(content_repo_)->withFlowFileRepository(flow_repo_)->withProvider(controller_services_provider_.get())->withProvenanceRepository(prov_repo_)->withConfiguration(configuration_);
   auto context = contextBuilder->build(node);
   processor_contexts_.push_back(context);
@@ -124,34 +269,34 @@ std::shared_ptr<core::Processor> TestPlan::addProcessor(const std::shared_ptr<co
   return processor;
 }
 
-std::shared_ptr<core::Processor> TestPlan::addProcessor(const std::string &processor_name, const utils::Identifier &uuid, const std::string &name,
-    const std::initializer_list<core::Relationship> &relationships, bool linkToPrevious) {
+std::shared_ptr<minifi::core::Processor> TestPlan::addProcessor(const std::string &processor_name, const minifi::utils::Identifier &uuid, const std::string &name,
+    const std::initializer_list<minifi::core::Relationship> &relationships, bool linkToPrevious) {
   if (finalized) {
     return nullptr;
   }
   std::lock_guard<std::recursive_mutex> guard(mutex);
 
-  auto ptr = core::ClassLoader::getDefaultClassLoader().instantiate(processor_name, uuid);
+  auto ptr = minifi::core::ClassLoader::getDefaultClassLoader().instantiate(processor_name, uuid);
   if (nullptr == ptr) {
     throw std::runtime_error{fmt::format("Failed to instantiate processor name: {0} uuid: {1}", processor_name, uuid.to_string().c_str())};
   }
-  std::shared_ptr<core::Processor> processor = std::static_pointer_cast<core::Processor>(ptr);
+  std::shared_ptr<minifi::core::Processor> processor = std::static_pointer_cast<minifi::core::Processor>(ptr);
 
   processor->setName(name);
 
   return addProcessor(processor, name, relationships, linkToPrevious);
 }
 
-std::shared_ptr<core::Processor> TestPlan::addProcessor(const std::string &processor_name, const std::string &name, const std::initializer_list<core::Relationship>& relationships,
+std::shared_ptr<minifi::core::Processor> TestPlan::addProcessor(const std::string &processor_name, const std::string &name, const std::initializer_list<minifi::core::Relationship>& relationships,
     bool linkToPrevious) {
   if (finalized) {
     return nullptr;
   }
   std::lock_guard<std::recursive_mutex> guard(mutex);
-  return addProcessor(processor_name, utils::IdGenerator::getIdGenerator()->generate(), name, relationships, linkToPrevious);
+  return addProcessor(processor_name, minifi::utils::IdGenerator::getIdGenerator()->generate(), name, relationships, linkToPrevious);
 }
 
-std::shared_ptr<minifi::Connection> TestPlan::addConnection(const std::shared_ptr<core::Processor>& source_proc, const core::Relationship& source_relationship, const std::shared_ptr<core::Processor>& destination_proc) {
+std::shared_ptr<minifi::Connection> TestPlan::addConnection(const std::shared_ptr<minifi::core::Processor>& source_proc, const minifi::core::Relationship& source_relationship, const std::shared_ptr<minifi::core::Processor>& destination_proc) {
   std::stringstream connection_name;
   connection_name
     << (source_proc ? source_proc->getUUIDStr().c_str() : "none")
@@ -181,15 +326,15 @@ std::shared_ptr<minifi::Connection> TestPlan::addConnection(const std::shared_pt
   return connection;
 }
 
-std::shared_ptr<core::controller::ControllerServiceNode> TestPlan::addController(const std::string &controller_name, const std::string &name) {
+std::shared_ptr<minifi::core::controller::ControllerServiceNode> TestPlan::addController(const std::string &controller_name, const std::string &name) {
   if (finalized) {
     return nullptr;
   }
   std::lock_guard<std::recursive_mutex> guard(mutex);
 
-  utils::Identifier uuid = utils::IdGenerator::getIdGenerator()->generate();
+  minifi::utils::Identifier uuid = minifi::utils::IdGenerator::getIdGenerator()->generate();
 
-  std::shared_ptr<core::controller::ControllerServiceNode> controller_service_node =
+  std::shared_ptr<minifi::core::controller::ControllerServiceNode> controller_service_node =
       controller_services_provider_->createControllerService(controller_name, controller_name, name, true /*firstTimeAdded*/);
   if (controller_service_node == nullptr) {
     return nullptr;
@@ -204,7 +349,7 @@ std::shared_ptr<core::controller::ControllerServiceNode> TestPlan::addController
   return controller_service_node;
 }
 
-bool TestPlan::setProperty(const std::shared_ptr<core::Processor> proc, const std::string &prop, const std::string &value, bool dynamic) {
+bool TestPlan::setProperty(const std::shared_ptr<minifi::core::Processor>& proc, const std::string &prop, const std::string &value, bool dynamic) {
   std::lock_guard<std::recursive_mutex> guard(mutex);
   size_t i = 0;
   logger_->log_info("Attempting to set property %s %s for %s", prop, value, proc->getName());
@@ -225,7 +370,7 @@ bool TestPlan::setProperty(const std::shared_ptr<core::Processor> proc, const st
   }
 }
 
-bool TestPlan::setProperty(const std::shared_ptr<core::controller::ControllerServiceNode> controller_service_node, const std::string &prop, const std::string &value, bool dynamic /*= false*/) {
+bool TestPlan::setProperty(const std::shared_ptr<minifi::core::controller::ControllerServiceNode>& controller_service_node, const std::string &prop, const std::string &value, bool dynamic /*= false*/) {
   if (dynamic) {
     controller_service_node->setDynamicProperty(prop, value);
     return controller_service_node->getControllerServiceImplementation()->setDynamicProperty(prop, value);
@@ -242,15 +387,15 @@ void TestPlan::reset(bool reschedule) {
   location = -1;
   if (reschedule)
     configured_processors_.clear();
-  for (auto proc : processor_queue_) {
+  for (const auto& proc : processor_queue_) {
     while (proc->getActiveTasks() > 0) {
       proc->decrementActiveTask();
     }
   }
 }
 
-std::vector<std::shared_ptr<core::Processor>>::iterator TestPlan::getProcessorItByUuid(const std::string& uuid) {
-  const auto processor_node_matches_processor = [&uuid] (const std::shared_ptr<core::Processor>& processor) {
+std::vector<std::shared_ptr<minifi::core::Processor>>::iterator TestPlan::getProcessorItByUuid(const std::string& uuid) {
+  const auto processor_node_matches_processor = [&uuid] (const std::shared_ptr<minifi::core::Processor>& processor) {
     return processor->getUUIDStr() == uuid;
   };
   auto processor_found_at = std::find_if(processor_queue_.begin(), processor_queue_.end(), processor_node_matches_processor);
@@ -260,8 +405,8 @@ std::vector<std::shared_ptr<core::Processor>>::iterator TestPlan::getProcessorIt
   return processor_found_at;
 }
 
-std::shared_ptr<core::ProcessContext> TestPlan::getProcessContextForProcessor(const std::shared_ptr<core::Processor>& processor) {
-  const auto contextMatchesProcessor = [&processor] (const std::shared_ptr<core::ProcessContext>& context) {
+std::shared_ptr<minifi::core::ProcessContext> TestPlan::getProcessContextForProcessor(const std::shared_ptr<minifi::core::Processor>& processor) {
+  const auto contextMatchesProcessor = [&processor] (const std::shared_ptr<minifi::core::ProcessContext>& context) {
     return context->getProcessorNode()->getUUIDStr() ==  processor->getUUIDStr();
   };
   const auto context_found_at = std::find_if(processor_contexts_.begin(), processor_contexts_.end(), contextMatchesProcessor);
@@ -271,31 +416,31 @@ std::shared_ptr<core::ProcessContext> TestPlan::getProcessContextForProcessor(co
   return *context_found_at;
 }
 
-void TestPlan::scheduleProcessor(const std::shared_ptr<core::Processor>& processor, const std::shared_ptr<core::ProcessContext>& context) {
+void TestPlan::scheduleProcessor(const std::shared_ptr<minifi::core::Processor>& processor, const std::shared_ptr<minifi::core::ProcessContext>& context) {
   if (std::find(configured_processors_.begin(), configured_processors_.end(), processor) == configured_processors_.end()) {
     // Ordering on factories and list of configured processors do not matter
-    std::shared_ptr<core::ProcessSessionFactory> factory = std::make_shared<core::ProcessSessionFactory>(context);
+    const auto factory = std::make_shared<minifi::core::ProcessSessionFactory>(context);
     factories_.push_back(factory);
     processor->onSchedule(context, factory);
     configured_processors_.push_back(processor);
   }
 }
 
-void TestPlan::scheduleProcessor(const std::shared_ptr<core::Processor>& processor) {
+void TestPlan::scheduleProcessor(const std::shared_ptr<minifi::core::Processor>& processor) {
   scheduleProcessor(processor, getProcessContextForProcessor(processor));
 }
 
 void TestPlan::scheduleProcessors() {
   for(std::size_t target_location = 0; target_location < processor_queue_.size(); ++target_location) {
-    std::shared_ptr<core::Processor> processor = processor_queue_.at(target_location);
-    std::shared_ptr<core::ProcessContext> context = processor_contexts_.at(target_location);
+    std::shared_ptr<minifi::core::Processor> processor = processor_queue_.at(target_location);
+    std::shared_ptr<minifi::core::ProcessContext> context = processor_contexts_.at(target_location);
     scheduleProcessor(processor, context);
   }
 }
 
-bool TestPlan::runProcessor(const std::shared_ptr<core::Processor>& processor, const PreTriggerVerifier& verify) {
-  const std::size_t processor_location = std::distance(processor_queue_.begin(), getProcessorItByUuid(processor->getUUIDStr()));
-  return runProcessor(gsl::narrow<int>(processor_location), verify);
+bool TestPlan::runProcessor(const std::shared_ptr<minifi::core::Processor>& processor, const PreTriggerVerifier& verify) {
+  const auto processor_location = gsl::narrow<size_t>(std::distance(processor_queue_.begin(), getProcessorItByUuid(processor->getUUIDStr())));
+  return runProcessor(processor_location, verify);
 }
 
 bool TestPlan::runProcessor(size_t target_location, const PreTriggerVerifier& verify) {
@@ -305,14 +450,14 @@ bool TestPlan::runProcessor(size_t target_location, const PreTriggerVerifier& ve
   logger_->log_info("Running next processor %d, processor_queue_.size %d, processor_contexts_.size %d", target_location, processor_queue_.size(), processor_contexts_.size());
   std::lock_guard<std::recursive_mutex> guard(mutex);
 
-  std::shared_ptr<core::Processor> processor = processor_queue_.at(target_location);
-  std::shared_ptr<core::ProcessContext> context = processor_contexts_.at(target_location);
+  std::shared_ptr<minifi::core::Processor> processor = processor_queue_.at(target_location);
+  std::shared_ptr<minifi::core::ProcessContext> context = processor_contexts_.at(target_location);
   scheduleProcessor(processor, context);
-  std::shared_ptr<core::ProcessSession> current_session = std::make_shared<core::ProcessSession>(context);
+  const auto current_session = std::make_shared<minifi::core::ProcessSession>(context);
   process_sessions_.push_back(current_session);
   current_flowfile_ = nullptr;
   processor->incrementActiveTasks();
-  processor->setScheduledState(core::ScheduledState::RUNNING);
+  processor->setScheduledState(minifi::core::ScheduledState::RUNNING);
   if (verify != nullptr) {
     verify(context, current_session);
   } else {
@@ -345,7 +490,7 @@ bool TestPlan::runCurrentProcessorUntilFlowfileIsProduced(const std::chrono::sec
 }
 
 std::size_t TestPlan::getNumFlowFileProducedByCurrentProcessor() {
-  const std::shared_ptr<core::Processor>& processor = processor_queue_.at(location);
+  const auto& processor = processor_queue_.at(gsl::narrow<size_t>(location));
   std::vector<minifi::Connection*> connections = getProcessorOutboundConnections(processor);
   std::size_t num_flow_files = 0;
   for (auto connection : connections) {
@@ -354,12 +499,12 @@ std::size_t TestPlan::getNumFlowFileProducedByCurrentProcessor() {
   return num_flow_files;
 }
 
-std::shared_ptr<core::FlowFile> TestPlan::getFlowFileProducedByCurrentProcessor() {
-  const std::shared_ptr<core::Processor>& processor = processor_queue_.at(location);
+std::shared_ptr<minifi::core::FlowFile> TestPlan::getFlowFileProducedByCurrentProcessor() {
+  const std::shared_ptr<minifi::core::Processor>& processor = processor_queue_.at(location);
   std::vector<minifi::Connection*> connections = getProcessorOutboundConnections(processor);
   for (auto connection : connections) {
-    std::set<std::shared_ptr<core::FlowFile>> expiredFlowRecords;
-    std::shared_ptr<core::FlowFile> flowfile = connection->poll(expiredFlowRecords);
+    std::set<std::shared_ptr<minifi::core::FlowFile>> expiredFlowRecords;
+    std::shared_ptr<minifi::core::FlowFile> flowfile = connection->poll(expiredFlowRecords);
     if (flowfile) {
       return flowfile;
     }
@@ -374,24 +519,24 @@ std::shared_ptr<core::FlowFile> TestPlan::getFlowFileProducedByCurrentProcessor(
   return nullptr;
 }
 
-std::set<std::shared_ptr<provenance::ProvenanceEventRecord>> TestPlan::getProvenanceRecords() {
+std::set<std::shared_ptr<minifi::provenance::ProvenanceEventRecord>> TestPlan::getProvenanceRecords() {
   return process_sessions_.at(location)->getProvenanceReporter()->getEvents();
 }
 
-std::shared_ptr<core::FlowFile> TestPlan::getCurrentFlowFile() {
+std::shared_ptr<minifi::core::FlowFile> TestPlan::getCurrentFlowFile() {
   if (current_flowfile_ == nullptr) {
     current_flowfile_ = process_sessions_.at(location)->get();
   }
   return current_flowfile_;
 }
 
-std::vector<minifi::Connection*> TestPlan::getProcessorOutboundConnections(const std::shared_ptr<core::Processor>& processor) {
+std::vector<minifi::Connection*> TestPlan::getProcessorOutboundConnections(const std::shared_ptr<minifi::core::Processor>& processor) {
   const auto is_processor_outbound_connection = [&processor] (const std::shared_ptr<minifi::Connection>& connection) {
     // A connection is outbound from a processor if its source uuid matches the processor
     return connection->getSource()->getUUIDStr() == processor->getUUIDStr();
   };
   std::vector<minifi::Connection*> connections;
-  for (auto relationship : relationships_) {
+  for (const auto& relationship : relationships_) {
     if (is_processor_outbound_connection(relationship)) {
       connections.emplace_back(relationship.get());
     }
@@ -400,23 +545,22 @@ std::vector<minifi::Connection*> TestPlan::getProcessorOutboundConnections(const
 }
 
 
-std::shared_ptr<core::ProcessContext> TestPlan::getCurrentContext() {
+std::shared_ptr<minifi::core::ProcessContext> TestPlan::getCurrentContext() {
   return processor_contexts_.at(location);
 }
 
-std::shared_ptr<minifi::Connection> TestPlan::buildFinalConnection(std::shared_ptr<core::Processor> processor, bool setDest) {
+std::shared_ptr<minifi::Connection> TestPlan::buildFinalConnection(const std::shared_ptr<minifi::core::Processor>& processor, bool setDest) {
   std::stringstream connection_name;
-  std::shared_ptr<core::Processor> last = processor;
-  connection_name << last->getUUIDStr() << "-to-" << processor->getUUIDStr();
-  std::shared_ptr<minifi::Connection> connection = std::make_shared<minifi::Connection>(flow_repo_, content_repo_, connection_name.str());
+  connection_name << processor->getUUIDStr() << "-to-" << processor->getUUIDStr();
+  auto connection = std::make_shared<minifi::Connection>(flow_repo_, content_repo_, connection_name.str());
   connection->addRelationship(termination_);
 
   // link the connections so that we can test results at the end for this
-  connection->setSource(last);
+  connection->setSource(processor);
   if (setDest)
     connection->setDestination(processor);
 
-  utils::Identifier uuid_copy = last->getUUID();
+  minifi::utils::Identifier uuid_copy = processor->getUUID();
   connection->setSourceUUID(uuid_copy);
   if (setDest)
     connection->setDestinationUUID(uuid_copy);
@@ -430,7 +574,7 @@ void TestPlan::finalize() {
   if (relationships_.size() > 0) {
     relationships_.push_back(buildFinalConnection(processor_queue_.back()));
   } else {
-    for (auto processor : processor_queue_) {
+    for (const auto& processor : processor_queue_) {
       relationships_.push_back(buildFinalConnection(processor, true));
     }
   }
@@ -447,3 +591,38 @@ void TestPlan::validateAnnotations() const {
     processor->validateAnnotations();
   }
 }
+
+std::string TestPlan::getContent(const std::shared_ptr<minifi::core::FlowFile>& file) {
+  auto content_claim = file->getResourceClaim();
+  auto content_stream = content_repo_->read(*content_claim);
+  auto output_stream = std::make_shared<minifi::io::BufferStream>();
+  minifi::InputStreamPipe{output_stream}.process(content_stream);
+  return {reinterpret_cast<const char*>(output_stream->getBuffer()), output_stream->size()};
+}
+
+TestController::TestController()
+    : log(LogTestController::getInstance()) {
+  minifi::setDefaultDirectory("./");
+  log.reset();
+  minifi::utils::IdGenerator::getIdGenerator()->initialize(std::make_shared<minifi::Properties>());
+  flow_version_ = std::make_shared<minifi::state::response::FlowVersion>("test", "test", "test");
+}
+
+std::shared_ptr<TestPlan> TestController::createPlan(std::shared_ptr<minifi::Configure> configuration, const char* state_dir, std::shared_ptr<minifi::core::ContentRepository> content_repo) {
+  if (configuration == nullptr) {
+    configuration = std::make_shared<minifi::Configure>();
+    configuration->set(minifi::Configure::nifi_state_management_provider_local_class_name, "UnorderedMapKeyValueStoreService");
+      configuration->set(minifi::Configure::nifi_dbcontent_repository_directory_default, createTempDirectory());
+  }
+
+  content_repo->initialize(configuration);
+
+  return std::make_shared<TestPlan>(std::move(content_repo), std::make_shared<TestRepository>(), std::make_shared<TestRepository>(), flow_version_, configuration, state_dir);
+}
+
+std::string TestController::createTempDirectory() {
+  char format[] = "/var/tmp/nifi-minifi-cpp.test.XXXXXX";
+  auto dir = minifi::utils::file::FileUtils::create_temp_directory(format);
+  directories.push_back(dir);
+  return dir;
+}
diff --git a/libminifi/test/TestBase.h b/libminifi/test/TestBase.h
index 5c140de..8dd09c6 100644
--- a/libminifi/test/TestBase.h
+++ b/libminifi/test/TestBase.h
@@ -18,45 +18,60 @@
 
 #pragma once
 
-#include <cstdio>
-#include <cstdlib>
+#include <chrono>
 #include <map>
+#include <memory>
+#include <regex>
 #include <set>
-#include <sstream>
+#include <string>
 #include <utility>
 #include <vector>
-#include <string>
-#include <memory>
-#include <regex>
 
-#include "ResourceClaim.h"
-#include "utils/file/FileUtils.h"
 #include "Catch.h"
-#include "core/logging/Logger.h"
+#include "spdlog/common.h"
+
 #include "core/Core.h"
-#include "properties/Configure.h"
-#include "properties/Properties.h"
+#include "core/extension/ExtensionManager.h"
+#include "core/logging/Logger.h"
 #include "core/logging/LoggerConfiguration.h"
-#include "utils/Id.h"
+#include "core/logging/LoggerProperties.h"
+#include "core/Relationship.h"
+#include "core/repository/VolatileContentRepository.h"
+#include "utils/file/FileUtils.h"
 
-#include "spdlog/common.h"
-#include "spdlog/sinks/stdout_sinks.h"
-#include "spdlog/sinks/ostream_sink.h"
-#include "spdlog/sinks/dist_sink.h"
-#include "unit/ProvenanceTestHelper.h"
-#include "core/FlowFile.h"
-#include "core/Processor.h"
-#include "core/ProcessContext.h"
-#include "core/ProcessContextBuilder.h"
-#include "core/ProcessSession.h"
-#include "core/ProcessorNode.h"
-#include "core/controller/ControllerServiceNode.h"
-#include "core/reporting/SiteToSiteProvenanceReportingTask.h"
-#include "core/state/nodes/FlowInformation.h"
-#include "utils/ClassUtils.h"
-#include "Path.h"
-#include "LogUtils.h"
-#include "core/extension/ExtensionManager.h"
+namespace minifi = org::apache::nifi::minifi;
+namespace utils = minifi::utils;
+namespace logging = minifi::core::logging;
+namespace core = minifi::core;
+
+namespace org::apache::nifi::minifi {
+class Connection;
+namespace core {
+class CoreComponentStateManagerProvider;
+class ContentRepository;
+class FlowFile;
+class Processor;
+class ProcessorNode;
+class ProcessContext;
+class ProcessSession;
+class ProcessSessionFactory;
+class Repository;
+namespace controller {
+class ControllerServiceNode;
+class ControllerServiceMap;
+class ControllerServiceProvider;
+}  // namespace controller
+}  // namespace core
+namespace state::response {
+class FlowVersion;
+}  // namespace state::response
+namespace provenance {
+class ProvenanceEventRecord;
+}  // namespace provenance
+namespace io {
+class StreamFactory;
+}  // namespace io
+}  // namespace org::apache::nifi::minifi
 
 class LogTestController {
  public:
@@ -66,19 +81,7 @@ class LogTestController {
     return instance;
   }
 
-  static std::shared_ptr<LogTestController> getInstance(const std::shared_ptr<logging::LoggerProperties> &logger_properties) {
-    static std::map<std::shared_ptr<logging::LoggerProperties>, std::shared_ptr<LogTestController>> map;
-    auto fnd = map.find(logger_properties);
-    if (fnd != std::end(map)) {
-      return fnd->second;
-    } else {
-      // in practice I'd use a derivation here or another paradigm entirely but for the purposes of this test code
-      // having extra overhead is negligible. this is the most readable and least impactful way
-      auto instance = std::shared_ptr<LogTestController>(new LogTestController(logger_properties));
-      map.insert(std::make_pair(logger_properties, instance));
-      return map.find(logger_properties)->second;
-    }
-  }
+  static std::shared_ptr<LogTestController> getInstance(const std::shared_ptr<logging::LoggerProperties> &logger_properties);
 
   template<typename T>
   void setTrace() {
@@ -115,100 +118,34 @@ class LogTestController {
    * of changeable test formats
    */
   template<typename T>
-  std::shared_ptr<logging::Logger> getLogger() {
-    std::string name = core::getClassName<T>();
-    return config ? config->getLogger(name) : logging::LoggerConfiguration::getConfiguration().getLogger(name);
-  }
+  std::shared_ptr<logging::Logger> getLogger() { return getLoggerByClassName(minifi::core::getClassName<T>()); }
+
+  std::shared_ptr<logging::Logger> getLoggerByClassName(const std::string& class_name);
 
   template<typename T>
   void setLevel(spdlog::level::level_enum level) {
-    std::string name = core::getClassName<T>();
-    if (config)
-      config->getLogger(name);
-    else
-      logging::LoggerConfiguration::getConfiguration().getLogger(name);
-    modified_loggers.insert(name);
-    setLevel(name, level);
-    // also support shortened classnames
-    if (config && config->shortenClassNames()) {
-      std::string adjusted = name;
-      if (utils::ClassUtils::shortenClassName(name, adjusted)) {
-        modified_loggers.insert(name);
-        setLevel(name, level);
-      }
-    }
+    setLevelByClassName(level, minifi::core::getClassName<T>());
   }
 
+  void setLevelByClassName(spdlog::level::level_enum level, const std::string& class_name);
+
   bool contains(const std::string &ending, std::chrono::seconds timeout = std::chrono::seconds(3), std::chrono::milliseconds sleep_interval = std::chrono::milliseconds(200)) {
     return contains(log_output, ending, timeout, sleep_interval);
   }
 
   bool contains(const std::ostringstream &stream, const std::string &ending,
                 std::chrono::seconds timeout = std::chrono::seconds(3),
-                std::chrono::milliseconds sleep_interval = std::chrono::milliseconds(200)) {
-    if (ending.length() == 0) {
-      return false;
-    }
-    auto start = std::chrono::system_clock::now();
-    bool found = false;
-    bool timed_out = false;
-    do {
-      std::string str = stream.str();
-      found = (str.find(ending) != std::string::npos);
-      auto now = std::chrono::system_clock::now();
-      timed_out = (now - start > timeout);
-      if (!found && !timed_out) {
-        std::this_thread::sleep_for(sleep_interval);
-      }
-    } while (!found && !timed_out);
-
-    logger_->log_info("%s %s in log output.", found ? "Successfully found" : "Failed to find", ending);
-    return found;
-  }
+                std::chrono::milliseconds sleep_interval = std::chrono::milliseconds(200));
 
   std::optional<std::smatch> matchesRegex(const std::string &regex_str,
                 std::chrono::seconds timeout = std::chrono::seconds(3),
-                std::chrono::milliseconds sleep_interval = std::chrono::milliseconds(200)) {
-    if (regex_str.length() == 0) {
-      return std::nullopt;
-    }
-    auto start = std::chrono::system_clock::now();
-    bool found = false;
-    bool timed_out = false;
-    std::regex matcher_regex(regex_str);
-    std::smatch match;
-    do {
-      std::string str = log_output.str();
-      found = std::regex_search(str, match, matcher_regex);
-      auto now = std::chrono::system_clock::now();
-      timed_out = (now - start > timeout);
-      if (!found && !timed_out) {
-        std::this_thread::sleep_for(sleep_interval);
-      }
-    } while (!found && !timed_out);
+                std::chrono::milliseconds sleep_interval = std::chrono::milliseconds(200));
 
-    logger_->log_info("%s %s in log output.", found ? "Successfully matched regex" : "Failed to match regex", regex_str);
-    return found ? std::make_optional<std::smatch>(match) : std::nullopt;
-  }
-
-  int countOccurrences(const std::string& pattern) {
-    return utils::StringUtils::countOccurrences(log_output.str(), pattern).second;
-  }
+  int countOccurrences(const std::string& pattern) const;
 
-  void reset() {
-    for (auto const & name : modified_loggers) {
-      setLevel(name, spdlog::level::err);
-    }
-    modified_loggers.clear();
-    if (config)
-      config = logging::LoggerConfiguration::newInstance();
-    resetStream(log_output);
-  }
+  void reset();
 
-  inline void resetStream(std::ostringstream &stream) {
-    stream.str("");
-    stream.clear();
-  }
+  void resetStream(std::ostringstream &stream);
 
   std::shared_ptr<std::ostringstream> log_output_ptr = std::make_shared<std::ostringstream>();
   std::ostringstream& log_output = *log_output_ptr;
@@ -220,127 +157,97 @@ class LogTestController {
       : LogTestController(nullptr) {
   }
 
-  explicit LogTestController(const std::shared_ptr<logging::LoggerProperties> &loggerProps) {
-    my_properties_ = loggerProps;
-    bool initMain = false;
-    if (nullptr == my_properties_) {
-      my_properties_ = std::make_shared<logging::LoggerProperties>();
-      initMain = true;
-    }
-    my_properties_->set("logger.root", "ERROR,ostream");
-    my_properties_->set("logger." + core::getClassName<LogTestController>(), "INFO");
-    my_properties_->set("logger." + core::getClassName<logging::LoggerConfiguration>(), "INFO");
-    std::shared_ptr<spdlog::sinks::dist_sink_mt> dist_sink = std::make_shared<spdlog::sinks::dist_sink_mt>();
-    dist_sink->add_sink(std::make_shared<StringStreamSink>(log_output_ptr, true));
-    dist_sink->add_sink(std::make_shared<spdlog::sinks::stderr_sink_mt>());
-    my_properties_->add_sink("ostream", dist_sink);
-    if (initMain) {
-      logging::LoggerConfiguration::getConfiguration().initialize(my_properties_);
-      logger_ = logging::LoggerConfiguration::getConfiguration().getLogger(core::getClassName<LogTestController>());
-    } else {
-      config = logging::LoggerConfiguration::newInstance();
-      // create for test purposes. most tests use the main logging factory, but this exists to test the logging
-      // framework itself.
-      config->initialize(my_properties_);
-      logger_ = config->getLogger(core::getClassName<LogTestController>());
-    }
-  }
+  explicit LogTestController(const std::shared_ptr<logging::LoggerProperties> &loggerProps);
 
-  void setLevel(const std::string name, spdlog::level::level_enum level);
+  void setLevel(const std::string& name, spdlog::level::level_enum level);
 
   std::shared_ptr<logging::LoggerProperties> my_properties_;
   std::unique_ptr<logging::LoggerConfiguration> config;
-  std::set<std::string> modified_loggers;
+  std::vector<std::string> modified_loggers;
 };
 
 class TestPlan {
  public:
-  explicit TestPlan(std::shared_ptr<core::ContentRepository> content_repo, std::shared_ptr<core::Repository> flow_repo, std::shared_ptr<core::Repository> prov_repo,
-                    const std::shared_ptr<minifi::state::response::FlowVersion> &flow_version, const std::shared_ptr<minifi::Configure> &configuration, const char* state_dir);
+  explicit TestPlan(std::shared_ptr<minifi::core::ContentRepository> content_repo, std::shared_ptr<minifi::core::Repository> flow_repo, std::shared_ptr<minifi::core::Repository> prov_repo,
+                    std::shared_ptr<minifi::state::response::FlowVersion> flow_version, std::shared_ptr<minifi::Configure> configuration, const char* state_dir);
 
   virtual ~TestPlan();
 
-  std::shared_ptr<core::Processor> addProcessor(const std::shared_ptr<core::Processor> &processor, const std::string &name,
-                                                core::Relationship relationship = core::Relationship("success", "description"), bool linkToPrevious = false) {
+  std::shared_ptr<minifi::core::Processor> addProcessor(const std::shared_ptr<minifi::core::Processor> &processor, const std::string &name,
+      const minifi::core::Relationship& relationship = minifi::core::Relationship("success", "description"), bool linkToPrevious = false) {
     return addProcessor(processor, name, { relationship }, linkToPrevious);
   }
-  std::shared_ptr<core::Processor> addProcessor(const std::string &processor_name, const std::string &name, core::Relationship relationship = core::Relationship("success", "description"),
-                                                bool linkToPrevious = false) {
+  std::shared_ptr<minifi::core::Processor> addProcessor(const std::string &processor_name, const std::string &name,
+      const minifi::core::Relationship& relationship = minifi::core::Relationship("success", "description"), bool linkToPrevious = false) {
     return addProcessor(processor_name, name, { relationship }, linkToPrevious);
   }
-  std::shared_ptr<core::Processor> addProcessor(const std::shared_ptr<core::Processor> &processor, const std::string &name, const std::initializer_list<core::Relationship>& relationships, bool linkToPrevious = false); // NOLINT
-  std::shared_ptr<core::Processor> addProcessor(const std::string &processor_name, const std::string &name, const std::initializer_list<core::Relationship>& relationships, bool linkToPrevious = false); // NOLINT
-  std::shared_ptr<core::Processor> addProcessor(const std::string &processor_name, const utils::Identifier& uuid, const std::string &name, const std::initializer_list<core::Relationship>& relationships, bool linkToPrevious = false); // NOLINT
+  std::shared_ptr<minifi::core::Processor> addProcessor(const std::shared_ptr<minifi::core::Processor> &processor, const std::string &name, const std::initializer_list<minifi::core::Relationship>& relationships, bool linkToPrevious = false); // NOLINT
+  std::shared_ptr<minifi::core::Processor> addProcessor(const std::string &processor_name, const std::string &name, const std::initializer_list<minifi::core::Relationship>& relationships, bool linkToPrevious = false); // NOLINT
+  std::shared_ptr<minifi::core::Processor> addProcessor(const std::string &processor_name, const minifi::utils::Identifier& uuid, const std::string &name, const std::initializer_list<minifi::core::Relationship>& relationships, bool linkToPrevious = false); // NOLINT
 
-  std::shared_ptr<minifi::Connection> addConnection(const std::shared_ptr<core::Processor>& source_proc, const core::Relationship& source_relationship, const std::shared_ptr<core::Processor>& destination_proc); // NOLINT
+  std::shared_ptr<minifi::Connection> addConnection(const std::shared_ptr<minifi::core::Processor>& source_proc, const minifi::core::Relationship& source_relationship, const std::shared_ptr<minifi::core::Processor>& destination_proc); // NOLINT
 
-  std::shared_ptr<core::controller::ControllerServiceNode> addController(const std::string &controller_name, const std::string &name);
+  std::shared_ptr<minifi::core::controller::ControllerServiceNode> addController(const std::string &controller_name, const std::string &name);
 
-  bool setProperty(const std::shared_ptr<core::Processor> proc, const std::string &prop, const std::string &value, bool dynamic = false);
+  bool setProperty(const std::shared_ptr<minifi::core::Processor>& proc, const std::string &prop, const std::string &value, bool dynamic = false);
 
-  bool setProperty(const std::shared_ptr<core::controller::ControllerServiceNode> controller_service_node, const std::string &prop, const std::string &value, bool dynamic = false);
+  static bool setProperty(const std::shared_ptr<minifi::core::controller::ControllerServiceNode>& controller_service_node, const std::string &prop, const std::string &value, bool dynamic = false);
 
   void reset(bool reschedule = false);
   void increment_location() { ++location; }
   void reset_location() { location = -1; }
 
-  using PreTriggerVerifier = std::function<void(const std::shared_ptr<core::ProcessContext>, const std::shared_ptr<core::ProcessSession>)>;
+  using PreTriggerVerifier = std::function<void(const std::shared_ptr<minifi::core::ProcessContext>, const std::shared_ptr<minifi::core::ProcessSession>)>;
 
-  std::vector<std::shared_ptr<core::Processor>>::iterator getProcessorItByUuid(const std::string& uuid);
-  std::shared_ptr<core::ProcessContext> getProcessContextForProcessor(const std::shared_ptr<core::Processor>& processor);
+  std::vector<std::shared_ptr<minifi::core::Processor>>::iterator getProcessorItByUuid(const std::string& uuid);
+  std::shared_ptr<minifi::core::ProcessContext> getProcessContextForProcessor(const std::shared_ptr<minifi::core::Processor>& processor);
 
-  void scheduleProcessor(const std::shared_ptr<core::Processor>& processor, const std::shared_ptr<core::ProcessContext>& context);
-  void scheduleProcessor(const std::shared_ptr<core::Processor>& processor);
+  void scheduleProcessor(const std::shared_ptr<minifi::core::Processor>& processor, const std::shared_ptr<minifi::core::ProcessContext>& context);
+  void scheduleProcessor(const std::shared_ptr<minifi::core::Processor>& processor);
   void scheduleProcessors();
 
   // Note: all this verify logic is only used in TensorFlow tests as a replacement for UpdateAttribute
   // It should probably not be the part of the standard way of running processors
-  bool runProcessor(const std::shared_ptr<core::Processor>& processor, const PreTriggerVerifier& verify = nullptr);
+  bool runProcessor(const std::shared_ptr<minifi::core::Processor>& processor, const PreTriggerVerifier& verify = nullptr);
   bool runProcessor(size_t target_location, const PreTriggerVerifier& verify = nullptr);
   bool runNextProcessor(const PreTriggerVerifier& verify = nullptr);
   bool runCurrentProcessor(const PreTriggerVerifier& verify = nullptr);
   bool runCurrentProcessorUntilFlowfileIsProduced(const std::chrono::seconds& wait_duration);
 
-  std::set<std::shared_ptr<provenance::ProvenanceEventRecord>> getProvenanceRecords();
+  std::set<std::shared_ptr<minifi::provenance::ProvenanceEventRecord>> getProvenanceRecords();
 
-  std::shared_ptr<core::FlowFile> getCurrentFlowFile();
-  std::vector<minifi::Connection*> getProcessorOutboundConnections(const std::shared_ptr<core::Processor>& processor);
+  std::shared_ptr<minifi::core::FlowFile> getCurrentFlowFile();
+  std::vector<minifi::Connection*> getProcessorOutboundConnections(const std::shared_ptr<minifi::core::Processor>& processor);
   std::size_t getNumFlowFileProducedByCurrentProcessor();
-  std::shared_ptr<core::FlowFile> getFlowFileProducedByCurrentProcessor();
+  std::shared_ptr<minifi::core::FlowFile> getFlowFileProducedByCurrentProcessor();
 
-  std::shared_ptr<core::ProcessContext> getCurrentContext();
+  std::shared_ptr<minifi::core::ProcessContext> getCurrentContext();
 
-  std::shared_ptr<core::Repository> getFlowRepo() {
+  std::shared_ptr<minifi::core::Repository> getFlowRepo() {
     return flow_repo_;
   }
 
-  std::shared_ptr<core::ContentRepository> getContentRepo() {
+  std::shared_ptr<minifi::core::ContentRepository> getContentRepo() {
     return content_repo_;
   }
 
-  std::shared_ptr<core::Repository> getProvenanceRepo() {
+  std::shared_ptr<minifi::core::Repository> getProvenanceRepo() {
     return prov_repo_;
   }
 
-  std::shared_ptr<logging::Logger> getLogger() const {
+  [[nodiscard]] std::shared_ptr<logging::Logger> getLogger() const {
     return logger_;
   }
 
-  std::string getStateDir() const {
+  [[nodiscard]] std::string getStateDir() const {
     return state_dir_->getPath();
   }
 
-  std::shared_ptr<core::CoreComponentStateManagerProvider> getStateManagerProvider() {
+  [[nodiscard]] std::shared_ptr<core::CoreComponentStateManagerProvider> getStateManagerProvider() const {
     return state_manager_provider_;
   }
 
-  std::string getContent(const std::shared_ptr<core::FlowFile>& file) {
-    auto content_claim = file->getResourceClaim();
-    auto content_stream = content_repo_->read(*content_claim.get());
-    auto output_stream = std::make_shared<minifi::io::BufferStream>();
-    minifi::InputStreamPipe{output_stream}.process(content_stream);
-    return {reinterpret_cast<const char*>(output_stream->getBuffer()), output_stream->size()};
-  }
+  std::string getContent(const std::shared_ptr<minifi::core::FlowFile>& file);
 
   void finalize();
 
@@ -351,7 +258,7 @@ class TestPlan {
    public:
     StateDir() {
       char state_dir_name_template[] = "/var/tmp/teststate.XXXXXX";
-      path_ = utils::file::FileUtils::create_temp_directory(state_dir_name_template);
+      path_ = minifi::utils::file::FileUtils::create_temp_directory(state_dir_name_template);
       is_owner_ = true;
     }
 
@@ -362,11 +269,11 @@ class TestPlan {
 
     ~StateDir() {
       if (is_owner_) {
-        utils::file::FileUtils::delete_dir(path_, true);
+        minifi::utils::file::FileUtils::delete_dir(path_, true);
       }
     }
 
-    std::string getPath() const {
+    [[nodiscard]] std::string getPath() const {
       return path_;
     }
 
@@ -377,21 +284,21 @@ class TestPlan {
 
   std::unique_ptr<StateDir> state_dir_;
 
-  std::shared_ptr<minifi::Connection> buildFinalConnection(std::shared_ptr<core::Processor> processor, bool setDest = false);
+  std::shared_ptr<minifi::Connection> buildFinalConnection(const std::shared_ptr<minifi::core::Processor>& processor, bool setDest = false);
 
-  std::shared_ptr<org::apache::nifi::minifi::io::StreamFactory> stream_factory;
+  std::shared_ptr<minifi::io::StreamFactory> stream_factory;
 
   std::shared_ptr<minifi::Configure> configuration_;
 
-  std::shared_ptr<core::ContentRepository> content_repo_;
+  std::shared_ptr<minifi::core::ContentRepository> content_repo_;
 
-  std::shared_ptr<core::Repository> flow_repo_;
-  std::shared_ptr<core::Repository> prov_repo_;
+  std::shared_ptr<minifi::core::Repository> flow_repo_;
+  std::shared_ptr<minifi::core::Repository> prov_repo_;
 
-  std::shared_ptr<core::controller::ControllerServiceMap> controller_services_;
-  std::shared_ptr<core::controller::ControllerServiceProvider> controller_services_provider_;
+  std::shared_ptr<minifi::core::controller::ControllerServiceMap> controller_services_;
+  std::shared_ptr<minifi::core::controller::ControllerServiceProvider> controller_services_provider_;
 
-  std::shared_ptr<core::CoreComponentStateManagerProvider> state_manager_provider_;
+  std::shared_ptr<minifi::core::CoreComponentStateManagerProvider> state_manager_provider_;
 
   std::recursive_mutex mutex;
 
@@ -399,19 +306,19 @@ class TestPlan {
 
   int location;
 
-  std::shared_ptr<core::FlowFile> current_flowfile_;
+  std::shared_ptr<minifi::core::FlowFile> current_flowfile_;
 
   std::shared_ptr<minifi::state::response::FlowVersion> flow_version_;
-  std::vector<std::shared_ptr<core::controller::ControllerServiceNode>> controller_service_nodes_;
-  std::map<utils::Identifier, std::shared_ptr<core::Processor>> processor_mapping_;
-  std::vector<std::shared_ptr<core::Processor>> processor_queue_;
-  std::vector<std::shared_ptr<core::Processor>> configured_processors_;  // Do not assume ordering
-  std::vector<std::shared_ptr<core::ProcessorNode>> processor_nodes_;
-  std::vector<std::shared_ptr<core::ProcessContext>> processor_contexts_;
-  std::vector<std::shared_ptr<core::ProcessSession>> process_sessions_;
-  std::vector<std::shared_ptr<core::ProcessSessionFactory>> factories_;  // Do not assume ordering
+  std::vector<std::shared_ptr<minifi::core::controller::ControllerServiceNode>> controller_service_nodes_;
+  std::map<minifi::utils::Identifier, std::shared_ptr<minifi::core::Processor>> processor_mapping_;
+  std::vector<std::shared_ptr<minifi::core::Processor>> processor_queue_;
+  std::vector<std::shared_ptr<minifi::core::Processor>> configured_processors_;  // Do not assume ordering
+  std::vector<std::shared_ptr<minifi::core::ProcessorNode>> processor_nodes_;
+  std::vector<std::shared_ptr<minifi::core::ProcessContext>> processor_contexts_;
+  std::vector<std::shared_ptr<minifi::core::ProcessSession>> process_sessions_;
+  std::vector<std::shared_ptr<minifi::core::ProcessSessionFactory>> factories_;  // Do not assume ordering
   std::vector<std::shared_ptr<minifi::Connection>> relationships_;
-  core::Relationship termination_;
+  minifi::core::Relationship termination_;
 
  private:
   std::shared_ptr<logging::Logger> logger_;
@@ -419,58 +326,34 @@ class TestPlan {
 
 class TestController {
  public:
-  TestController()
-      : log(LogTestController::getInstance()) {
-    minifi::setDefaultDirectory("./");
-    log.reset();
-    utils::IdGenerator::getIdGenerator()->initialize(std::make_shared<minifi::Properties>());
-    flow_version_ = std::make_shared<minifi::state::response::FlowVersion>("test", "test", "test");
-  }
+  TestController();
 
-  std::shared_ptr<TestPlan> createPlan(std::shared_ptr<minifi::Configure> configuration = nullptr,
-                                       const char* state_dir = nullptr,
-                                       std::shared_ptr<core::ContentRepository> content_repo = std::make_shared<core::repository::VolatileContentRepository>()) {
-    if (configuration == nullptr) {
-      configuration = std::make_shared<minifi::Configure>();
-      configuration->set(minifi::Configure::nifi_state_management_provider_local_class_name, "UnorderedMapKeyValueStoreService");
-      configuration->set(minifi::Configure::nifi_dbcontent_repository_directory_default, createTempDirectory());
-    }
-
-    content_repo->initialize(configuration);
+  std::shared_ptr<TestPlan> createPlan(std::shared_ptr<minifi::Configure> configuration = nullptr, const char* state_dir = nullptr,
+      std::shared_ptr<minifi::core::ContentRepository> content_repo = std::make_shared<minifi::core::repository::VolatileContentRepository>());
 
-    std::shared_ptr<core::Repository> flow_repo = std::make_shared<TestRepository>();
-    std::shared_ptr<core::Repository> repo = std::make_shared<TestRepository>();
-    return std::make_shared<TestPlan>(content_repo, flow_repo, repo, flow_version_, configuration, state_dir);
-  }
-
-  void runSession(const std::shared_ptr<TestPlan> &plan,
+  static void runSession(const std::shared_ptr<TestPlan> &plan,
                   bool runToCompletion = true,
-                  const std::function<void(const std::shared_ptr<core::ProcessContext>&,
-                  const std::shared_ptr<core::ProcessSession>&)>& verify = nullptr) {
+                  const std::function<void(const std::shared_ptr<minifi::core::ProcessContext>&,
+                  const std::shared_ptr<minifi::core::ProcessSession>&)>& verify = nullptr) {
     while (plan->runNextProcessor(verify) && runToCompletion) {
     }
   }
 
-  const std::shared_ptr<logging::Logger>& getLogger() const {
+  [[nodiscard]] const std::shared_ptr<logging::Logger>& getLogger() const {
     return log.logger_;
   }
 
-  const LogTestController& getLog() const {
+  [[nodiscard]] const LogTestController& getLog() const {
     return log;
   }
 
   ~TestController() {
     for (const auto& dir : directories) {
-      utils::file::FileUtils::delete_dir(dir, true);
+      minifi::utils::file::FileUtils::delete_dir(dir, true);
     }
   }
 
-  std::string createTempDirectory() {
-    char format[] = "/var/tmp/nifi-minifi-cpp.test.XXXXXX";
-    const auto dir = utils::file::FileUtils::create_temp_directory(format);
-    directories.push_back(dir);
-    return dir;
-  }
+  std::string createTempDirectory();
 
  protected:
   std::shared_ptr<minifi::state::response::FlowVersion> flow_version_;
diff --git a/libminifi/test/archive-tests/CompressContentTests.cpp b/libminifi/test/archive-tests/CompressContentTests.cpp
index 7ddb30e..ee43a8e 100644
--- a/libminifi/test/archive-tests/CompressContentTests.cpp
+++ b/libminifi/test/archive-tests/CompressContentTests.cpp
@@ -108,8 +108,8 @@ class CompressDecompressionTestController : public TestController{
   }
 
   void setupFlow() {
-    LogTestController::getInstance().setTrace<processors::CompressContent>();
-    LogTestController::getInstance().setTrace<processors::LogAttribute>();
+    LogTestController::getInstance().setTrace<minifi::processors::CompressContent>();
+    LogTestController::getInstance().setTrace<minifi::processors::LogAttribute>();
     LogTestController::getInstance().setTrace<core::ProcessSession>();
     LogTestController::getInstance().setTrace<core::ProcessContext>();
     LogTestController::getInstance().setTrace<core::repository::VolatileContentRepository>();
@@ -119,7 +119,7 @@ class CompressDecompressionTestController : public TestController{
 
     std::shared_ptr<TestRepository> repo = std::make_shared<TestRepository>();
 
-    processor = std::make_shared<processors::CompressContent>("compresscontent");
+    processor = std::make_shared<minifi::processors::CompressContent>("compresscontent");
     processor->initialize();
     utils::Identifier processoruuid = processor->getUUID();
     REQUIRE(processoruuid);
@@ -233,14 +233,14 @@ class DecompressTestController : public CompressDecompressionTestController{
   }
 };
 
-using CompressionFormat = processors::CompressContent::ExtendedCompressionFormat;
-using CompressionMode = processors::CompressContent::CompressionMode;
+using CompressionFormat = minifi::processors::CompressContent::ExtendedCompressionFormat;
+using CompressionMode = minifi::processors::CompressContent::CompressionMode;
 
 TEST_CASE_METHOD(CompressTestController, "CompressFileGZip", "[compressfiletest1]") {
-  context->setProperty(processors::CompressContent::CompressMode, toString(CompressionMode::Compress));
-  context->setProperty(processors::CompressContent::CompressFormat, toString(CompressionFormat::GZIP));
-  context->setProperty(processors::CompressContent::CompressLevel, "9");
-  context->setProperty(processors::CompressContent::UpdateFileName, "true");
+  context->setProperty(minifi::processors::CompressContent::CompressMode, toString(CompressionMode::Compress));
+  context->setProperty(minifi::processors::CompressContent::CompressFormat, toString(CompressionFormat::GZIP));
+  context->setProperty(minifi::processors::CompressContent::CompressLevel, "9");
+  context->setProperty(minifi::processors::CompressContent::UpdateFileName, "true");
 
   core::ProcessSession sessionGenFlowFile(context);
   std::shared_ptr<core::FlowFile> flow = std::static_pointer_cast < core::FlowFile > (sessionGenFlowFile.create());
@@ -278,10 +278,10 @@ TEST_CASE_METHOD(CompressTestController, "CompressFileGZip", "[compressfiletest1
 }
 
 TEST_CASE_METHOD(DecompressTestController, "DecompressFileGZip", "[compressfiletest2]") {
-  context->setProperty(processors::CompressContent::CompressMode, toString(CompressionMode::Decompress));
-  context->setProperty(processors::CompressContent::CompressFormat, toString(CompressionFormat::GZIP));
-  context->setProperty(processors::CompressContent::CompressLevel, "9");
-  context->setProperty(processors::CompressContent::UpdateFileName, "true");
+  context->setProperty(minifi::processors::CompressContent::CompressMode, toString(CompressionMode::Decompress));
+  context->setProperty(minifi::processors::CompressContent::CompressFormat, toString(CompressionFormat::GZIP));
+  context->setProperty(minifi::processors::CompressContent::CompressLevel, "9");
+  context->setProperty(minifi::processors::CompressContent::UpdateFileName, "true");
 
   core::ProcessSession sessionGenFlowFile(context);
   std::shared_ptr<core::FlowFile> flow = std::static_pointer_cast < core::FlowFile > (sessionGenFlowFile.create());
@@ -315,10 +315,10 @@ TEST_CASE_METHOD(DecompressTestController, "DecompressFileGZip", "[compressfilet
 }
 
 TEST_CASE_METHOD(CompressTestController, "CompressFileBZip", "[compressfiletest3]") {
-  context->setProperty(processors::CompressContent::CompressMode, toString(CompressionMode::Compress));
-  context->setProperty(processors::CompressContent::CompressFormat, toString(CompressionFormat::BZIP2));
-  context->setProperty(processors::CompressContent::CompressLevel, "9");
-  context->setProperty(processors::CompressContent::UpdateFileName, "true");
+  context->setProperty(minifi::processors::CompressContent::CompressMode, toString(CompressionMode::Compress));
+  context->setProperty(minifi::processors::CompressContent::CompressFormat, toString(CompressionFormat::BZIP2));
+  context->setProperty(minifi::processors::CompressContent::CompressLevel, "9");
+  context->setProperty(minifi::processors::CompressContent::UpdateFileName, "true");
 
   core::ProcessSession sessionGenFlowFile(context);
   std::shared_ptr<core::FlowFile> flow = std::static_pointer_cast < core::FlowFile > (sessionGenFlowFile.create());
@@ -354,10 +354,10 @@ TEST_CASE_METHOD(CompressTestController, "CompressFileBZip", "[compressfiletest3
 
 
 TEST_CASE_METHOD(DecompressTestController, "DecompressFileBZip", "[compressfiletest4]") {
-  context->setProperty(processors::CompressContent::CompressMode, toString(CompressionMode::Decompress));
-  context->setProperty(processors::CompressContent::CompressFormat, toString(CompressionFormat::BZIP2));
-  context->setProperty(processors::CompressContent::CompressLevel, "9");
-  context->setProperty(processors::CompressContent::UpdateFileName, "true");
+  context->setProperty(minifi::processors::CompressContent::CompressMode, toString(CompressionMode::Decompress));
+  context->setProperty(minifi::processors::CompressContent::CompressFormat, toString(CompressionFormat::BZIP2));
+  context->setProperty(minifi::processors::CompressContent::CompressLevel, "9");
+  context->setProperty(minifi::processors::CompressContent::UpdateFileName, "true");
 
   core::ProcessSession sessionGenFlowFile(context);
   std::shared_ptr<core::FlowFile> flow = std::static_pointer_cast < core::FlowFile > (sessionGenFlowFile.create());
@@ -388,10 +388,10 @@ TEST_CASE_METHOD(DecompressTestController, "DecompressFileBZip", "[compressfilet
 }
 
 TEST_CASE_METHOD(CompressTestController, "CompressFileLZMA", "[compressfiletest5]") {
-  context->setProperty(processors::CompressContent::CompressMode, toString(CompressionMode::Compress));
-  context->setProperty(processors::CompressContent::CompressFormat, toString(CompressionFormat::LZMA));
-  context->setProperty(processors::CompressContent::CompressLevel, "9");
-  context->setProperty(processors::CompressContent::UpdateFileName, "true");
+  context->setProperty(minifi::processors::CompressContent::CompressMode, toString(CompressionMode::Compress));
+  context->setProperty(minifi::processors::CompressContent::CompressFormat, toString(CompressionFormat::LZMA));
+  context->setProperty(minifi::processors::CompressContent::CompressLevel, "9");
+  context->setProperty(minifi::processors::CompressContent::UpdateFileName, "true");
 
   core::ProcessSession sessionGenFlowFile(context);
   std::shared_ptr<core::FlowFile> flow = std::static_pointer_cast < core::FlowFile > (sessionGenFlowFile.create());
@@ -433,10 +433,10 @@ TEST_CASE_METHOD(CompressTestController, "CompressFileLZMA", "[compressfiletest5
 
 
 TEST_CASE_METHOD(DecompressTestController, "DecompressFileLZMA", "[compressfiletest6]") {
-  context->setProperty(processors::CompressContent::CompressMode, toString(CompressionMode::Decompress));
-  context->setProperty(processors::CompressContent::CompressFormat, toString(CompressionFormat::USE_MIME_TYPE));
-  context->setProperty(processors::CompressContent::CompressLevel, "9");
-  context->setProperty(processors::CompressContent::UpdateFileName, "true");
+  context->setProperty(minifi::processors::CompressContent::CompressMode, toString(CompressionMode::Decompress));
+  context->setProperty(minifi::processors::CompressContent::CompressFormat, toString(CompressionFormat::USE_MIME_TYPE));
+  context->setProperty(minifi::processors::CompressContent::CompressLevel, "9");
+  context->setProperty(minifi::processors::CompressContent::UpdateFileName, "true");
 
   core::ProcessSession sessionGenFlowFile(context);
   std::shared_ptr<core::FlowFile> flow = std::static_pointer_cast < core::FlowFile > (sessionGenFlowFile.create());
@@ -474,10 +474,10 @@ TEST_CASE_METHOD(DecompressTestController, "DecompressFileLZMA", "[compressfilet
 }
 
 TEST_CASE_METHOD(CompressTestController, "CompressFileXYLZMA", "[compressfiletest7]") {
-  context->setProperty(processors::CompressContent::CompressMode, toString(CompressionMode::Compress));
-  context->setProperty(processors::CompressContent::CompressFormat, toString(CompressionFormat::XZ_LZMA2));
-  context->setProperty(processors::CompressContent::CompressLevel, "9");
-  context->setProperty(processors::CompressContent::UpdateFileName, "true");
+  context->setProperty(minifi::processors::CompressContent::CompressMode, toString(CompressionMode::Compress));
+  context->setProperty(minifi::processors::CompressContent::CompressFormat, toString(CompressionFormat::XZ_LZMA2));
+  context->setProperty(minifi::processors::CompressContent::CompressLevel, "9");
+  context->setProperty(minifi::processors::CompressContent::UpdateFileName, "true");
 
   core::ProcessSession sessionGenFlowFile(context);
   std::shared_ptr<core::FlowFile> flow = std::static_pointer_cast < core::FlowFile > (sessionGenFlowFile.create());
@@ -519,10 +519,10 @@ TEST_CASE_METHOD(CompressTestController, "CompressFileXYLZMA", "[compressfiletes
 
 
 TEST_CASE_METHOD(DecompressTestController, "DecompressFileXYLZMA", "[compressfiletest8]") {
-  context->setProperty(processors::CompressContent::CompressMode, toString(CompressionMode::Decompress));
-  context->setProperty(processors::CompressContent::CompressFormat, toString(CompressionFormat::USE_MIME_TYPE));
-  context->setProperty(processors::CompressContent::CompressLevel, "9");
-  context->setProperty(processors::CompressContent::UpdateFileName, "true");
+  context->setProperty(minifi::processors::CompressContent::CompressMode, toString(CompressionMode::Decompress));
+  context->setProperty(minifi::processors::CompressContent::CompressFormat, toString(CompressionFormat::USE_MIME_TYPE));
+  context->setProperty(minifi::processors::CompressContent::CompressLevel, "9");
+  context->setProperty(minifi::processors::CompressContent::UpdateFileName, "true");
 
   core::ProcessSession sessionGenFlowFile(context);
   std::shared_ptr<core::FlowFile> flow = std::static_pointer_cast < core::FlowFile > (sessionGenFlowFile.create());
@@ -560,8 +560,8 @@ TEST_CASE_METHOD(DecompressTestController, "DecompressFileXYLZMA", "[compressfil
 }
 
 TEST_CASE_METHOD(TestController, "RawGzipCompressionDecompression", "[compressfiletest8]") {
-  LogTestController::getInstance().setTrace<processors::CompressContent>();
-  LogTestController::getInstance().setTrace<processors::PutFile>();
+  LogTestController::getInstance().setTrace<minifi::processors::CompressContent>();
+  LogTestController::getInstance().setTrace<minifi::processors::PutFile>();
 
   // Create temporary directories
   std::string src_dir = createTempDirectory();
@@ -667,11 +667,11 @@ TEST_CASE_METHOD(CompressTestController, "Batch CompressFileGZip", "[compressFil
   };
   const std::size_t batchSize = 3;
 
-  context->setProperty(processors::CompressContent::CompressMode, toString(CompressionMode::Compress));
-  context->setProperty(processors::CompressContent::CompressFormat, toString(CompressionFormat::GZIP));
-  context->setProperty(processors::CompressContent::CompressLevel, "9");
-  context->setProperty(processors::CompressContent::UpdateFileName, "true");
-  context->setProperty(processors::CompressContent::BatchSize, std::to_string(batchSize));
+  context->setProperty(minifi::processors::CompressContent::CompressMode, toString(CompressionMode::Compress));
+  context->setProperty(minifi::processors::CompressContent::CompressFormat, toString(CompressionFormat::GZIP));
+  context->setProperty(minifi::processors::CompressContent::CompressLevel, "9");
+  context->setProperty(minifi::processors::CompressContent::UpdateFileName, "true");
+  context->setProperty(minifi::processors::CompressContent::BatchSize, std::to_string(batchSize));
 
 
   core::ProcessSession sessionGenFlowFile(context);
diff --git a/libminifi/test/archive-tests/FocusArchiveTests.cpp b/libminifi/test/archive-tests/FocusArchiveTests.cpp
index b2d91e7..514f416 100644
--- a/libminifi/test/archive-tests/FocusArchiveTests.cpp
+++ b/libminifi/test/archive-tests/FocusArchiveTests.cpp
@@ -33,6 +33,8 @@
 #include "processors/PutFile.h"
 #include "UnfocusArchiveEntry.h"
 #include "../TestBase.h"
+#include "repository/VolatileContentRepository.h"
+#include "../unit/ProvenanceTestHelper.h"
 
 const char TEST_ARCHIVE_NAME[] = "focus_test_archive.tar";
 const int NUM_FILES = 2;
diff --git a/libminifi/test/archive-tests/ManipulateArchiveTests.cpp b/libminifi/test/archive-tests/ManipulateArchiveTests.cpp
index 906cc6e..546a643 100644
--- a/libminifi/test/archive-tests/ManipulateArchiveTests.cpp
+++ b/libminifi/test/archive-tests/ManipulateArchiveTests.cpp
@@ -30,6 +30,8 @@
 #include "ManipulateArchive.h"
 #include "FocusArchiveEntry.h"
 #include "UnfocusArchiveEntry.h"
+#include "../unit/ProvenanceTestHelper.h"
+#include "repository/VolatileContentRepository.h"
 
 const char TEST_ARCHIVE_NAME[] = "manipulate_test_archive.tar";
 const int NUM_FILES = 3;
diff --git a/libminifi/test/archive-tests/MergeFileTests.cpp b/libminifi/test/archive-tests/MergeFileTests.cpp
index 36680ec..5a8e058 100644
--- a/libminifi/test/archive-tests/MergeFileTests.cpp
+++ b/libminifi/test/archive-tests/MergeFileTests.cpp
@@ -154,7 +154,7 @@ class MergeTestController : public TestController {
     auto content_repo = std::make_shared<core::repository::VolatileContentRepository>();
     content_repo->initialize(std::make_shared<minifi::Configure>());
 
-    processor = std::make_shared<processors::MergeContent>("mergecontent");
+    processor = std::make_shared<minifi::processors::MergeContent>("mergecontent");
     processor->initialize();
     utils::Identifier processoruuid = processor->getUUID();
     REQUIRE(processoruuid);
@@ -164,7 +164,7 @@ class MergeTestController : public TestController {
 
     // output from merge processor to log attribute
     output = std::make_shared<minifi::Connection>(repo, content_repo, "logattributeconnection");
-    output->addRelationship(processors::MergeContent::Merge);
+    output->addRelationship(minifi::processors::MergeContent::Merge);
     output->setSource(processor);
     output->setDestination(logAttributeProcessor);
     output->setSourceUUID(processoruuid);
@@ -176,7 +176,7 @@ class MergeTestController : public TestController {
     input->setDestinationUUID(processoruuid);
     processor->addConnection(input);
 
-    processor->setAutoTerminatedRelationships({processors::MergeContent::Original, processors::MergeContent::Failure});
+    processor->setAutoTerminatedRelationships({minifi::processors::MergeContent::Original, minifi::processors::MergeContent::Failure});
 
     processor->incrementActiveTasks();
     processor->setScheduledState(core::ScheduledState::RUNNING);
@@ -206,9 +206,9 @@ TEST_CASE_METHOD(MergeTestController, "MergeFileDefragment", "[mergefiletest1]")
     flowFileContents[3] + flowFileContents[4] + flowFileContents[5]
   };
 
-  context->setProperty(processors::MergeContent::MergeFormat, processors::merge_content_options::MERGE_FORMAT_CONCAT_VALUE);
-  context->setProperty(processors::MergeContent::MergeStrategy, processors::merge_content_options::MERGE_STRATEGY_DEFRAGMENT);
-  context->setProperty(processors::MergeContent::DelimiterStrategy, processors::merge_content_options::DELIMITER_STRATEGY_TEXT);
+  context->setProperty(minifi::processors::MergeContent::MergeFormat, minifi::processors::merge_content_options::MERGE_FORMAT_CONCAT_VALUE);
+  context->setProperty(minifi::processors::MergeContent::MergeStrategy, minifi::processors::merge_content_options::MERGE_STRATEGY_DEFRAGMENT);
+  context->setProperty(minifi::processors::MergeContent::DelimiterStrategy, minifi::processors::merge_content_options::DELIMITER_STRATEGY_TEXT);
 
   core::ProcessSession sessionGenFlowFile(context);
   // Generate 6 flowfiles, first three merged to one, second three merged to one
@@ -217,14 +217,14 @@ TEST_CASE_METHOD(MergeTestController, "MergeFileDefragment", "[mergefiletest1]")
     sessionGenFlowFile.importFrom(minifi::io::BufferStream(flowFileContents[i]), flow);
     // three bundle
     if (i < 3)
-      flow->setAttribute(processors::BinFiles::FRAGMENT_ID_ATTRIBUTE, std::to_string(0));
+      flow->setAttribute(minifi::processors::BinFiles::FRAGMENT_ID_ATTRIBUTE, std::to_string(0));
     else
-      flow->setAttribute(processors::BinFiles::FRAGMENT_ID_ATTRIBUTE, std::to_string(1));
+      flow->setAttribute(minifi::processors::BinFiles::FRAGMENT_ID_ATTRIBUTE, std::to_string(1));
     if (i < 3)
-      flow->setAttribute(processors::BinFiles::FRAGMENT_INDEX_ATTRIBUTE, std::to_string(i));
+      flow->setAttribute(minifi::processors::BinFiles::FRAGMENT_INDEX_ATTRIBUTE, std::to_string(i));
     else
-      flow->setAttribute(processors::BinFiles::FRAGMENT_INDEX_ATTRIBUTE, std::to_string(i-3));
-    flow->setAttribute(processors::BinFiles::FRAGMENT_COUNT_ATTRIBUTE, std::to_string(3));
+      flow->setAttribute(minifi::processors::BinFiles::FRAGMENT_INDEX_ATTRIBUTE, std::to_string(i-3));
+    flow->setAttribute(minifi::processors::BinFiles::FRAGMENT_COUNT_ATTRIBUTE, std::to_string(3));
     sessionGenFlowFile.flushContent();
     input->put(flow);
   }
@@ -264,12 +264,12 @@ TEST_CASE_METHOD(MergeTestController, "MergeFileDefragmentDelimiter", "[mergefil
   std::ofstream(FOOTER_FILE, std::ios::binary) << "footer";
   std::ofstream(DEMARCATOR_FILE, std::ios::binary) << "demarcator";
 
-  context->setProperty(processors::MergeContent::MergeFormat, processors::merge_content_options::MERGE_FORMAT_CONCAT_VALUE);
... 1715 lines suppressed ...

[nifi-minifi-cpp] 03/04: MINIFICPP-977 MQTT tests added

Posted by fg...@apache.org.
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 0f9150730c9909f4618772b8a948b2ac5249a8fa
Author: Adam Markovics <am...@cloudera.com>
AuthorDate: Mon Sep 13 11:45:22 2021 +0200

    MINIFICPP-977 MQTT tests added
    
    Signed-off-by: Ferenc Gerlits <fg...@gmail.com>
    
    This closes #1172
---
 .github/workflows/ci.yml                           |  2 +-
 docker/DockerVerify.sh                             |  4 +-
 .../integration/MiNiFi_integration_test_driver.py  |  3 +
 docker/test/integration/features/mqtt.feature      | 66 ++++++++++++++++++
 .../integration/minifi/core/DockerTestCluster.py   |  2 +-
 .../minifi/core/DockerTestDirectoryBindings.py     |  2 +-
 docker/test/integration/minifi/core/ImageStore.py  | 78 +++++++++++-----------
 .../integration/minifi/core/MqttBrokerContainer.py | 23 +++++++
 .../minifi/core/SingleNodeDockerCluster.py         |  3 +
 .../integration/minifi/processors/ConsumeMQTT.py   | 12 ++++
 .../integration/minifi/processors/PublishMQTT.py   | 12 ++++
 docker/test/integration/steps/steps.py             | 22 +++++-
 12 files changed, 183 insertions(+), 46 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 3d4a19e..23ec814 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -265,7 +265,7 @@ jobs:
           if [ -d ~/.ccache ]; then mv ~/.ccache .; fi
           mkdir build
           cd build
-          cmake -DUSE_SHARED_LIBS= -DSTRICT_GSL_CHECKS=AUDIT -DENABLE_JNI=OFF -DDISABLE_JEMALLOC=ON -DENABLE_AWS=ON -DENABLE_LIBRDKAFKA=ON -DENABLE_AZURE=ON -DENABLE_SQL=ON -DDOCKER_BUILD_ONLY=ON -DDOCKER_CCACHE_DUMP_LOCATION=$HOME/.ccache ..
+          cmake -DUSE_SHARED_LIBS= -DSTRICT_GSL_CHECKS=AUDIT -DENABLE_JNI=OFF -DDISABLE_JEMALLOC=ON -DENABLE_AWS=ON -DENABLE_LIBRDKAFKA=ON -DENABLE_MQTT=ON -DENABLE_AZURE=ON -DENABLE_SQL=ON -DDOCKER_BUILD_ONLY=ON -DDOCKER_CCACHE_DUMP_LOCATION=$HOME/.ccache ..
           make docker
       - id: install_deps
         run: |
diff --git a/docker/DockerVerify.sh b/docker/DockerVerify.sh
index e1e70d8..2f89e48 100755
--- a/docker/DockerVerify.sh
+++ b/docker/DockerVerify.sh
@@ -63,8 +63,8 @@ export JAVA_HOME
 PATH="$PATH:/usr/lib/jvm/default-jvm/bin"
 export PATH
 
-PYTHONPATH="${PYTHONPATH}:${docker_dir}/test/integration"
-export PYTHONPATH
+TEST_DIRECTORY="${docker_dir}/test/integration"
+export TEST_DIRECTORY
 
 # Add --no-logcapture to see logs interleaved with the test output
 BEHAVE_OPTS=(-f pretty --logging-level INFO --logging-clear-handlers)
diff --git a/docker/test/integration/MiNiFi_integration_test_driver.py b/docker/test/integration/MiNiFi_integration_test_driver.py
index 98956f5..a1bbb53 100644
--- a/docker/test/integration/MiNiFi_integration_test_driver.py
+++ b/docker/test/integration/MiNiFi_integration_test_driver.py
@@ -204,3 +204,6 @@ class MiNiFi_integration_test():
 
     def check_query_results(self, postgresql_container_name, query, number_of_rows, timeout_seconds):
         assert self.cluster.check_query_results(postgresql_container_name, query, number_of_rows, timeout_seconds)
+
+    def wait_for_container_logs(self, container_name, log_pattern, timeout_seconds, count=1):
+        self.cluster.wait_for_app_logs_regex(container_name, log_pattern, timeout_seconds, count)
diff --git a/docker/test/integration/features/mqtt.feature b/docker/test/integration/features/mqtt.feature
new file mode 100644
index 0000000..a606565
--- /dev/null
+++ b/docker/test/integration/features/mqtt.feature
@@ -0,0 +1,66 @@
+Feature: Sending data to MQTT streaming platform using PublishMQTT
+  In order to send and receive data via MQTT
+  As a user of MiNiFi
+  I need to have PublishMQTT and ConsumeMQTT processors
+
+  Background:
+    Given the content of "/tmp/output" is monitored
+
+  Scenario: A MiNiFi instance transfers data to an MQTT broker
+    Given a GetFile processor with the "Input Directory" property set to "/tmp/input"
+    And a file with the content "test" is present in "/tmp/input"
+    And a PublishMQTT processor set up to communicate with an MQTT broker instance
+    And a PutFile processor with the "Directory" property set to "/tmp/output"
+    And the "success" relationship of the GetFile processor is connected to the PublishMQTT
+    And the "success" relationship of the PublishMQTT processor is connected to the PutFile
+
+    And an MQTT broker is set up in correspondence with the PublishMQTT
+
+    When both instances start up
+    Then a flowfile with the content "test" is placed in the monitored directory in less than 60 seconds
+    And the MQTT broker has a log line matching "Received PUBLISH from .*testtopic.*\\(4 bytes\\)"
+
+  Scenario: If the MQTT broker does not exist, then no flow files are processed
+    Given a GetFile processor with the "Input Directory" property set to "/tmp/input"
+    And a file with the content "test" is present in "/tmp/input"
+    And a PublishMQTT processor set up to communicate with an MQTT broker instance
+    And a PutFile processor with the "Directory" property set to "/tmp/output"
+    And the "success" relationship of the GetFile processor is connected to the PublishMQTT
+    And the "success" relationship of the PublishMQTT processor is connected to the PutFile
+    And the "failure" relationship of the PublishMQTT processor is connected to the PutFile
+
+    When the MiNiFi instance starts up
+    Then no files are placed in the monitored directory in 30 seconds of running time
+
+  Scenario: Verify delivery of message when MQTT broker is unstable
+    Given a GetFile processor with the "Input Directory" property set to "/tmp/input"
+    And a file with the content "test" is present in "/tmp/input"
+    And a PublishMQTT processor set up to communicate with an MQTT broker instance
+    And a PutFile processor with the "Directory" property set to "/tmp/output"
+    And the "success" relationship of the GetFile processor is connected to the PublishMQTT
+    And the "success" relationship of the PublishMQTT processor is connected to the PutFile
+
+    When the MiNiFi instance starts up
+    Then no files are placed in the monitored directory in 30 seconds of running time
+
+    And an MQTT broker is deployed in correspondence with the PublishMQTT
+    And a flowfile with the content "test" is placed in the monitored directory in less than 60 seconds
+    And the MQTT broker has a log line matching "Received PUBLISH from .*testtopic.*\\(4 bytes\\)"
+
+  Scenario: A MiNiFi instance publishes and consumes data to/from an MQTT broker
+    Given a GetFile processor with the "Input Directory" property set to "/tmp/input"
+    And a file with the content "test" is present in "/tmp/input"
+    And a PublishMQTT processor set up to communicate with an MQTT broker instance
+    And the "success" relationship of the GetFile processor is connected to the PublishMQTT
+
+    And a ConsumeMQTT processor set up to communicate with an MQTT broker instance
+    And a PutFile processor with the "Directory" property set to "/tmp/output"
+    And "ConsumeMQTT" processor is a start node
+    And the "success" relationship of the ConsumeMQTT processor is connected to the PutFile
+
+    And an MQTT broker is set up in correspondence with the PublishMQTT and ConsumeMQTT
+
+    When both instances start up
+    Then a flowfile with the content "test" is placed in the monitored directory in less than 60 seconds
+    And the MQTT broker has a log line matching "Received PUBLISH from .*testtopic.*\\(4 bytes\\)"
+    And the MQTT broker has a log line matching "Received SUBSCRIBE from"
diff --git a/docker/test/integration/minifi/core/DockerTestCluster.py b/docker/test/integration/minifi/core/DockerTestCluster.py
index 4f465b9..6a25ed7 100644
--- a/docker/test/integration/minifi/core/DockerTestCluster.py
+++ b/docker/test/integration/minifi/core/DockerTestCluster.py
@@ -77,7 +77,7 @@ class DockerTestCluster(SingleNodeDockerCluster):
         return self.__wait_for_app_logs_impl(container_name, log_entry, timeout_seconds, count, False)
 
     def wait_for_startup_log(self, container_name, timeout_seconds):
-        return self.wait_for_app_logs(container_name, self.containers[container_name].get_startup_finished_log_entry(), timeout_seconds, 1)
+        return self.wait_for_app_logs_regex(container_name, self.containers[container_name].get_startup_finished_log_entry(), timeout_seconds, 1)
 
     def log_app_output(self):
         for container_name in self.containers:
diff --git a/docker/test/integration/minifi/core/DockerTestDirectoryBindings.py b/docker/test/integration/minifi/core/DockerTestDirectoryBindings.py
index ca769a3..1aed63a 100644
--- a/docker/test/integration/minifi/core/DockerTestDirectoryBindings.py
+++ b/docker/test/integration/minifi/core/DockerTestDirectoryBindings.py
@@ -22,7 +22,7 @@ class DockerTestDirectoryBindings:
         [self.create_directory(directory) for directory in self.data_directories[test_id].values()]
 
         # Add resources
-        test_dir = os.environ['PYTHONPATH'].split(':')[-1]  # Based on DockerVerify.sh
+        test_dir = os.environ['TEST_DIRECTORY']  # Based on DockerVerify.sh
         shutil.copytree(test_dir + "/resources/kafka_broker/conf/certs", self.data_directories[test_id]["resources_dir"] + "/certs")
         shutil.copytree(test_dir + "/resources/python", self.data_directories[test_id]["resources_dir"] + "/python")
 
diff --git a/docker/test/integration/minifi/core/ImageStore.py b/docker/test/integration/minifi/core/ImageStore.py
index 4044574..c1ef051 100644
--- a/docker/test/integration/minifi/core/ImageStore.py
+++ b/docker/test/integration/minifi/core/ImageStore.py
@@ -12,6 +12,7 @@ class ImageStore:
     def __init__(self):
         self.client = docker.from_env()
         self.images = dict()
+        self.test_dir = os.environ['TEST_DIRECTORY']  # Based on DockerVerify.sh
 
     def __del__(self):
         self.cleanup()
@@ -23,21 +24,28 @@ class ImageStore:
             self.client.images.remove(image.id, force=True)
 
     def get_image(self, container_engine):
-        if container_engine == "minifi-cpp":
-            return self.__get_minifi_cpp_image()
-        if container_engine == "http-proxy":
-            return self.__get_http_proxy_image()
-        if container_engine == "nifi":
-            return self.__get_nifi_image()
-        if container_engine == "postgresql-server":
-            return self.__get_postgresql_server_image()
-        if container_engine == "kafka-broker":
-            return self.__get_kafka_broker_image()
-
-    def __get_minifi_cpp_image(self):
-        if "minifi-cpp" in self.images:
-            return self.images["minifi-cpp"]
+        if container_engine in self.images:
+            return self.images[container_engine]
 
+        if container_engine == "minifi-cpp":
+            image = self.__build_minifi_cpp_image()
+        elif container_engine == "http-proxy":
+            image = self.__build_http_proxy_image()
+        elif container_engine == "nifi":
+            image = self.__build_nifi_image()
+        elif container_engine == "postgresql-server":
+            image = self.__build_postgresql_server_image()
+        elif container_engine == "kafka-broker":
+            image = self.__build_kafka_broker_image()
+        elif container_engine == "mqtt-broker":
+            image = self.__build_mqtt_broker_image()
+        else:
+            raise Exception("There is no associated image for " + container_engine)
+
+        self.images[container_engine] = image
+        return image
+
+    def __build_minifi_cpp_image(self):
         dockerfile = dedent("""FROM {base_image}
                 USER root
                 RUN apk --update --no-cache add psqlodbc
@@ -71,13 +79,9 @@ class ImageStore:
                 """.format(base_image='apacheminificpp:' + MinifiContainer.MINIFI_VERSION,
                            minifi_root=MinifiContainer.MINIFI_ROOT))
 
-        self.images["minifi-cpp"] = self.__build_image(dockerfile)
-        return self.images["minifi-cpp"]
-
-    def __get_http_proxy_image(self):
-        if "http-proxy" in self.images:
-            return self.images["http-proxy"]
+        return self.__build_image(dockerfile)
 
+    def __build_http_proxy_image(self):
         dockerfile = dedent("""FROM {base_image}
                 RUN apt -y update && apt install -y apache2-utils
                 RUN htpasswd -b -c /etc/squid/.squid_users {proxy_username} {proxy_password}
@@ -89,13 +93,9 @@ class ImageStore:
                 ENTRYPOINT ["/sbin/entrypoint.sh"]
                 """.format(base_image='sameersbn/squid:3.5.27-2', proxy_username='admin', proxy_password='test101', proxy_port='3128'))
 
-        self.images["http-proxy"] = self.__build_image(dockerfile)
-        return self.images["http-proxy"]
-
-    def __get_nifi_image(self):
-        if "nifi" in self.images:
-            return self.images["nifi"]
+        return self.__build_image(dockerfile)
 
+    def __build_nifi_image(self):
         dockerfile = dedent(r"""FROM {base_image}
                 USER root
                 RUN sed -i -e 's/^\(nifi.remote.input.host\)=.*/\1={name}/' {nifi_root}/conf/nifi.properties
@@ -105,13 +105,9 @@ class ImageStore:
                            base_image='apache/nifi:' + NifiContainer.NIFI_VERSION,
                            nifi_root=NifiContainer.NIFI_ROOT))
 
-        self.images["nifi"] = self.__build_image(dockerfile)
-        return self.images["nifi"]
-
-    def __get_postgresql_server_image(self):
-        if "postgresql-server" in self.images:
-            return self.images["postgresql-server"]
+        return self.__build_image(dockerfile)
 
+    def __build_postgresql_server_image(self):
         dockerfile = dedent("""FROM {base_image}
                 RUN mkdir -p /docker-entrypoint-initdb.d
                 RUN echo "#!/bin/bash" > /docker-entrypoint-initdb.d/init-user-db.sh && \
@@ -123,16 +119,18 @@ class ImageStore:
                     echo "    INSERT INTO test_table (int_col, text_col) VALUES (3, 'pear');" >> /docker-entrypoint-initdb.d/init-user-db.sh && \
                     echo "EOSQL" >> /docker-entrypoint-initdb.d/init-user-db.sh
                 """.format(base_image='postgres:13.2'))
-        self.images["postgresql-server"] = self.__build_image(dockerfile)
-        return self.images["postgresql-server"]
+        return self.__build_image(dockerfile)
+
+    def __build_kafka_broker_image(self):
+        return self.__build_image_by_path(self.test_dir + "/resources/kafka_broker", 'minifi-kafka')
 
-    def __get_kafka_broker_image(self):
-        if "kafka-broker" in self.images:
-            return self.images["kafka-broker"]
+    def __build_mqtt_broker_image(self):
+        dockerfile = dedent("""FROM {base_image}
+            RUN echo 'log_dest stderr' >> /mosquitto-no-auth.conf
+            CMD ["/usr/sbin/mosquitto", "--verbose", "--config-file", "/mosquitto-no-auth.conf"]
+            """.format(base_image='eclipse-mosquitto:2.0.12'))
 
-        test_dir = os.environ['PYTHONPATH'].split(':')[-1]  # Based on DockerVerify.sh
-        self.images["kafka-broker"] = self.__build_image_by_path(test_dir + "/resources/kafka_broker", 'minifi-kafka')
-        return self.images["kafka-broker"]
+        return self.__build_image(dockerfile)
 
     def __build_image(self, dockerfile, context_files=[]):
         conf_dockerfile_buffer = BytesIO()
diff --git a/docker/test/integration/minifi/core/MqttBrokerContainer.py b/docker/test/integration/minifi/core/MqttBrokerContainer.py
new file mode 100644
index 0000000..51632b4
--- /dev/null
+++ b/docker/test/integration/minifi/core/MqttBrokerContainer.py
@@ -0,0 +1,23 @@
+import logging
+from .Container import Container
+
+
+class MqttBrokerContainer(Container):
+    def __init__(self, name, vols, network, image_store):
+        super().__init__(name, 'mqtt-broker', vols, network, image_store)
+
+    def get_startup_finished_log_entry(self):
+        return "mosquitto version [0-9\\.]+ running"
+
+    def deploy(self):
+        if not self.set_deployed():
+            return
+
+        logging.info('Creating and running MQTT broker docker container...')
+        self.client.containers.run(
+            self.image_store.get_image(self.get_engine()),
+            detach=True,
+            name=self.name,
+            network=self.network.name,
+            ports={'1883/tcp': 1883})
+        logging.info('Added container \'%s\'', self.name)
diff --git a/docker/test/integration/minifi/core/SingleNodeDockerCluster.py b/docker/test/integration/minifi/core/SingleNodeDockerCluster.py
index 78fc3de..631c7b3 100644
--- a/docker/test/integration/minifi/core/SingleNodeDockerCluster.py
+++ b/docker/test/integration/minifi/core/SingleNodeDockerCluster.py
@@ -11,6 +11,7 @@ from .S3ServerContainer import S3ServerContainer
 from .AzureStorageServerContainer import AzureStorageServerContainer
 from .HttpProxyContainer import HttpProxyContainer
 from .PostgreSQLServerContainer import PostgreSQLServerContainer
+from .MqttBrokerContainer import MqttBrokerContainer
 
 
 class SingleNodeDockerCluster(Cluster):
@@ -77,6 +78,8 @@ class SingleNodeDockerCluster(Cluster):
             return self.containers.setdefault(name, AzureStorageServerContainer(name, self.vols, self.network, self.image_store))
         elif engine == 'postgresql-server':
             return self.containers.setdefault(name, PostgreSQLServerContainer(name, self.vols, self.network, self.image_store))
+        elif engine == 'mqtt-broker':
+            return self.containers.setdefault(name, MqttBrokerContainer(name, self.vols, self.network, self.image_store))
         else:
             raise Exception('invalid flow engine: \'%s\'' % engine)
 
diff --git a/docker/test/integration/minifi/processors/ConsumeMQTT.py b/docker/test/integration/minifi/processors/ConsumeMQTT.py
new file mode 100644
index 0000000..8c5721f
--- /dev/null
+++ b/docker/test/integration/minifi/processors/ConsumeMQTT.py
@@ -0,0 +1,12 @@
+from ..core.Processor import Processor
+
+
+class ConsumeMQTT(Processor):
+    def __init__(self, schedule={'scheduling strategy': 'TIMER_DRIVEN'}):
+        super(ConsumeMQTT, self).__init__(
+            'ConsumeMQTT',
+            properties={
+                'Broker URI': 'mqtt-broker:1883',
+                'Topic': 'testtopic'},
+            auto_terminate=['success'],
+            schedule=schedule)
diff --git a/docker/test/integration/minifi/processors/PublishMQTT.py b/docker/test/integration/minifi/processors/PublishMQTT.py
new file mode 100644
index 0000000..4f84fa8
--- /dev/null
+++ b/docker/test/integration/minifi/processors/PublishMQTT.py
@@ -0,0 +1,12 @@
+from ..core.Processor import Processor
+
+
+class PublishMQTT(Processor):
+    def __init__(self, schedule={'scheduling strategy': 'EVENT_DRIVEN'}):
+        super(PublishMQTT, self).__init__(
+            'PublishMQTT',
+            properties={
+                'Broker URI': 'mqtt-broker:1883',
+                'Topic': 'testtopic'},
+            auto_terminate=['success', 'failure'],
+            schedule=schedule)
diff --git a/docker/test/integration/steps/steps.py b/docker/test/integration/steps/steps.py
index 110ca60..c2fef16 100644
--- a/docker/test/integration/steps/steps.py
+++ b/docker/test/integration/steps/steps.py
@@ -81,6 +81,7 @@ def step_impl(context, processor_type, minifi_container_name):
 @given("a {processor_type} processor set up to communicate with the same s3 server")
 @given("a {processor_type} processor set up to communicate with an Azure blob storage")
 @given("a {processor_type} processor set up to communicate with a kafka broker instance")
+@given("a {processor_type} processor set up to communicate with an MQTT broker instance")
 def step_impl(context, processor_type):
     context.execute_steps("given a {processor_type} processor in the \"{minifi_container_name}\" flow".format(processor_type=processor_type, minifi_container_name="minifi-cpp-flow"))
 
@@ -290,6 +291,13 @@ def step_impl(context):
     context.test.acquire_container("kafka-broker", "kafka-broker")
 
 
+# MQTT setup
+@given("an MQTT broker is set up in correspondence with the PublishMQTT")
+@given("an MQTT broker is set up in correspondence with the PublishMQTT and ConsumeMQTT")
+def step_impl(context):
+    context.test.acquire_container("mqtt-broker", "mqtt-broker")
+
+
 # s3 setup
 @given("a s3 server is set up in correspondence with the PutS3Object")
 @given("a s3 server is set up in correspondence with the DeleteS3Object")
@@ -367,7 +375,7 @@ def step_impl(context, content, topic_name):
 
 @when("a message with content \"{content}\" is published to the \"{topic_name}\" topic using an ssl connection")
 def step_impl(context, content, topic_name):
-    test_dir = os.environ['PYTHONPATH'].split(':')[-1]  # Based on DockerVerify.sh
+    test_dir = os.environ['TEST_DIRECTORY']  # Based on DockerVerify.sh
     producer = Producer({
         "bootstrap.servers": "localhost:29093",
         "security.protocol": "ssl",
@@ -551,3 +559,15 @@ def step_impl(context, log_message, duration):
 @then("the Minifi logs match the following regex: \"{regex}\" in less than {duration}")
 def step_impl(context, regex, duration):
     context.test.check_minifi_log_matches_regex(regex, timeparse(duration))
+
+
+# MQTT
+@then("the MQTT broker has a log line matching \"{log_pattern}\"")
+def step_impl(context, log_pattern):
+    context.test.wait_for_container_logs('mqtt-broker', log_pattern, 30, count=1)
+
+
+@then("an MQTT broker is deployed in correspondence with the PublishMQTT")
+def step_impl(context):
+    context.test.acquire_container("mqtt-broker", "mqtt-broker")
+    context.test.start()

[nifi-minifi-cpp] 01/04: MINIFICPP-1667 Add Azure SDK logging to Minifi

Posted by fg...@apache.org.
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

[nifi-minifi-cpp] 02/04: MINIFICPP-1614 Cleanup limited permission directories in SFTP tests

Posted by fg...@apache.org.
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 3999a3038ac7999f8a9848d5c9d8bf1ffd98ea5d
Author: Gabor Gyimesi <ga...@gmail.com>
AuthorDate: Thu Oct 21 14:19:26 2021 +0200

    MINIFICPP-1614 Cleanup limited permission directories in SFTP tests
    
    Signed-off-by: Ferenc Gerlits <fg...@gmail.com>
    
    This closes #1205
---
 extensions/sftp/tests/FetchSFTPTests.cpp | 1 +
 extensions/sftp/tests/ListSFTPTests.cpp  | 1 +
 2 files changed, 2 insertions(+)

diff --git a/extensions/sftp/tests/FetchSFTPTests.cpp b/extensions/sftp/tests/FetchSFTPTests.cpp
index 460fb7b..d8cee1b 100644
--- a/extensions/sftp/tests/FetchSFTPTests.cpp
+++ b/extensions/sftp/tests/FetchSFTPTests.cpp
@@ -326,6 +326,7 @@ TEST_CASE_METHOD(FetchSFTPTestsFixture, "FetchSFTP Completion Strategy Delete Fi
   REQUIRE(LogTestController::getInstance().contains("key:sftp.remote.port value:" + std::to_string(sftp_server->getPort())));
   REQUIRE(LogTestController::getInstance().contains("key:path value:nifi_test/"));
   REQUIRE(LogTestController::getInstance().contains("key:filename value:tstFile.ext"));
+  REQUIRE(0 == chmod((src_dir + "/vfs/nifi_test").c_str(), 0755));
 }
 #endif
 
diff --git a/extensions/sftp/tests/ListSFTPTests.cpp b/extensions/sftp/tests/ListSFTPTests.cpp
index cc88eac..ebeac3d 100644
--- a/extensions/sftp/tests/ListSFTPTests.cpp
+++ b/extensions/sftp/tests/ListSFTPTests.cpp
@@ -223,6 +223,7 @@ TEST_CASE_METHOD(ListSFTPTestsFixture, "ListSFTP list non-readable dir", "[ListS
   REQUIRE(false == LogTestController::getInstance().contains("from ListSFTP to relationship success"));
   REQUIRE(LogTestController::getInstance().contains("Failed to open remote directory \"nifi_test\", error: LIBSSH2_FX_PERMISSION_DENIED"));
   REQUIRE(LogTestController::getInstance().contains("There are no files to list. Yielding."));
+  REQUIRE(0 == chmod((src_dir + "/vfs/nifi_test").c_str(), 0755));
 }
 #endif