diff --git a/build/chip/chip_test_suite.gni b/build/chip/chip_test_suite.gni
index caaf06f..336450c 100644
--- a/build/chip/chip_test_suite.gni
+++ b/build/chip/chip_test_suite.gni
@@ -94,15 +94,9 @@
       public_deps = []
     }
 
-    # TODO: figure out a way to auto-define dependency on stdio logging.
-    #       This dep is required since libSupportLayer now does not include
-    #       a default implementation.
-    #
-    #       Tests such as TestInetEndPoint need to exercise the system event
-    #       loop however they do not seem to include a logging binding so this
-    #       is forcefully added here.
     if (current_os != "zephyr" && current_os != "mbed") {
-      public_deps += [ "${chip_root}/src/platform/logging:stdio" ]
+      # Depend on stdio logging, and have it take precedence over the default platform backend
+      public_deps += [ "${chip_root}/src/platform/logging:force_stdio" ]
     }
   }
 
diff --git a/examples/chip-tool/BUILD.gn b/examples/chip-tool/BUILD.gn
index a4e87b7..d870c1d 100644
--- a/examples/chip-tool/BUILD.gn
+++ b/examples/chip-tool/BUILD.gn
@@ -120,7 +120,10 @@
 executable("chip-tool") {
   sources = [ "main.cpp" ]
 
-  deps = [ ":chip-tool-utils" ]
+  deps = [
+    ":chip-tool-utils",
+    "${chip_root}/src/platform/logging:force_stdio",
+  ]
 
   output_dir = root_out_dir
 }
diff --git a/examples/chip-tool/commands/interactive/InteractiveCommands.cpp b/examples/chip-tool/commands/interactive/InteractiveCommands.cpp
index 380a6e3..de82f20 100644
--- a/examples/chip-tool/commands/interactive/InteractiveCommands.cpp
+++ b/examples/chip-tool/commands/interactive/InteractiveCommands.cpp
@@ -18,6 +18,8 @@
 
 #include "InteractiveCommands.h"
 
+#include <platform/logging/LogV.h>
+
 #include <editline.h>
 #include <iomanip>
 #include <sstream>
diff --git a/examples/darwin-framework-tool/commands/interactive/InteractiveCommands.mm b/examples/darwin-framework-tool/commands/interactive/InteractiveCommands.mm
index 7fe2d7d..a251d51 100644
--- a/examples/darwin-framework-tool/commands/interactive/InteractiveCommands.mm
+++ b/examples/darwin-framework-tool/commands/interactive/InteractiveCommands.mm
@@ -17,7 +17,8 @@
  */
 
 #include "InteractiveCommands.h"
-#import <Matter/Matter.h>
+
+#include <platform/logging/LogV.h>
 
 #include <editline.h>
 #include <iomanip>
diff --git a/examples/darwin-framework-tool/main.mm b/examples/darwin-framework-tool/main.mm
index f0aeab4..58a37eb 100644
--- a/examples/darwin-framework-tool/main.mm
+++ b/examples/darwin-framework-tool/main.mm
@@ -28,9 +28,15 @@
 #include <zap-generated/cluster/Commands.h>
 #include <zap-generated/test/Commands.h>
 
+#include <cstdio>
+
 int main(int argc, const char * argv[])
 {
     @autoreleasepool {
+        MTRSetLogCallback(MTRLogTypeDetail, ^(MTRLogType type, NSString * component, NSString * message) {
+            fprintf(stdout, "CHIP:%s: %s\n", component.UTF8String, message.UTF8String);
+        });
+
         Commands commands;
         registerCommandsPairing(commands);
         registerCommandsInteractive(commands);
diff --git a/examples/platform/linux/BUILD.gn b/examples/platform/linux/BUILD.gn
index 605c198..08580aa 100644
--- a/examples/platform/linux/BUILD.gn
+++ b/examples/platform/linux/BUILD.gn
@@ -70,6 +70,7 @@
     "${chip_root}/src/lib",
     "${chip_root}/src/lib/shell",
     "${chip_root}/src/lib/shell:shell_core",
+    "${chip_root}/src/platform/logging:force_stdio",
   ]
 
   if (chip_enable_transport_trace) {
diff --git a/scripts/helpers/restyle-diff.sh b/scripts/helpers/restyle-diff.sh
index 4701b0a..bf428dc 100755
--- a/scripts/helpers/restyle-diff.sh
+++ b/scripts/helpers/restyle-diff.sh
@@ -33,9 +33,12 @@
 CHIP_ROOT=$(cd "$here/../.." && pwd)
 
 restyle-paths() {
-    url=https://github.com/restyled-io/restyler/raw/main/bin/restyle-path
-
-    sh <(curl --location --proto "=https" --tlsv1.2 "$url" -sSf) "$@"
+    if hash restyle-path 2>/dev/null; then
+        command restyle-path "$@"
+    else
+        url=https://github.com/restyled-io/restyler/raw/main/bin/restyle-path
+        sh <(curl --location --proto "=https" --tlsv1.2 "$url" -sSf) "$@"
+    fi
 }
 
 cd "$CHIP_ROOT"
diff --git a/src/access/AccessControl.cpp b/src/access/AccessControl.cpp
index 0f6c80c..20b58ee 100644
--- a/src/access/AccessControl.cpp
+++ b/src/access/AccessControl.cpp
@@ -549,11 +549,11 @@
     const char * log = "unexpected error";
     IgnoreUnusedVariable(log); // logging may be disabled
 
-    AuthMode authMode;
-    FabricIndex fabricIndex;
-    Privilege privilege;
-    size_t subjectCount = 0;
-    size_t targetCount  = 0;
+    AuthMode authMode       = AuthMode::kNone;
+    FabricIndex fabricIndex = kUndefinedFabricIndex;
+    Privilege privilege     = static_cast<Privilege>(0);
+    size_t subjectCount     = 0;
+    size_t targetCount      = 0;
 
     SuccessOrExit(entry.GetAuthMode(authMode));
     SuccessOrExit(entry.GetFabricIndex(fabricIndex));
diff --git a/src/darwin/Framework/CHIP/MTRAsyncCallbackWorkQueue.mm b/src/darwin/Framework/CHIP/MTRAsyncCallbackWorkQueue.mm
index 65b8424..edb2265 100644
--- a/src/darwin/Framework/CHIP/MTRAsyncCallbackWorkQueue.mm
+++ b/src/darwin/Framework/CHIP/MTRAsyncCallbackWorkQueue.mm
@@ -19,7 +19,7 @@
 #import <os/lock.h>
 
 #import "MTRAsyncCallbackWorkQueue.h"
-#import "MTRLogging.h"
+#import "MTRLogging_Internal.h"
 
 #pragma mark - Class extensions
 
diff --git a/src/darwin/Framework/CHIP/MTRAttestationInfo.m b/src/darwin/Framework/CHIP/MTRAttestationInfo.mm
similarity index 100%
rename from src/darwin/Framework/CHIP/MTRAttestationInfo.m
rename to src/darwin/Framework/CHIP/MTRAttestationInfo.mm
diff --git a/src/darwin/Framework/CHIP/MTRBaseDevice.mm b/src/darwin/Framework/CHIP/MTRBaseDevice.mm
index a2996d7..c5cbd06 100644
--- a/src/darwin/Framework/CHIP/MTRBaseDevice.mm
+++ b/src/darwin/Framework/CHIP/MTRBaseDevice.mm
@@ -24,7 +24,7 @@
 #import "MTRCluster_internal.h"
 #import "MTRError_Internal.h"
 #import "MTREventTLVValueDecoder_Internal.h"
-#import "MTRLogging.h"
+#import "MTRLogging_Internal.h"
 #import "MTRSetupPayload_Internal.h"
 
 #include "app/ConcreteAttributePath.h"
diff --git a/src/darwin/Framework/CHIP/MTRCSRInfo.m b/src/darwin/Framework/CHIP/MTRCSRInfo.mm
similarity index 100%
rename from src/darwin/Framework/CHIP/MTRCSRInfo.m
rename to src/darwin/Framework/CHIP/MTRCSRInfo.mm
diff --git a/src/darwin/Framework/CHIP/MTRCertificates.mm b/src/darwin/Framework/CHIP/MTRCertificates.mm
index 39735bd..c1699d6 100644
--- a/src/darwin/Framework/CHIP/MTRCertificates.mm
+++ b/src/darwin/Framework/CHIP/MTRCertificates.mm
@@ -16,8 +16,8 @@
 
 #import "MTRCertificates.h"
 #import "MTRError_Internal.h"
-#import "MTRLogging.h"
-#import "MTRMemory.h"
+#import "MTRFramework.h"
+#import "MTRLogging_Internal.h"
 #import "MTROperationalCredentialsDelegate.h"
 #import "MTRP256KeypairBridge.h"
 #import "NSDataSpanConversion.h"
@@ -31,15 +31,17 @@
 
 @implementation MTRCertificates
 
++ (void)initialize
+{
+    MTRFrameworkInit();
+}
+
 + (MTRCertificateDERBytes _Nullable)createRootCertificate:(id<MTRKeypair>)keypair
                                                  issuerID:(NSNumber * _Nullable)issuerID
                                                  fabricID:(NSNumber * _Nullable)fabricID
                                                     error:(NSError * __autoreleasing *)error
 {
-    NSLog(@"Generating root certificate");
-
-    [MTRMemory ensureInit];
-
+    MTR_LOG_DEFAULT("Generating root certificate");
     NSData * rootCert = nil;
     CHIP_ERROR err = MTROperationalCredentialsDelegate::GenerateRootCertificate(keypair, issuerID, fabricID, &rootCert);
     if (error) {
@@ -47,7 +49,7 @@
     }
 
     if (err != CHIP_NO_ERROR) {
-        NSLog(@"Generating root certificate failed: %s", ErrorStr(err));
+        MTR_LOG_ERROR("Generating root certificate failed: %s", ErrorStr(err));
     }
 
     return rootCert;
@@ -60,10 +62,7 @@
                                                          fabricID:(NSNumber * _Nullable)fabricID
                                                             error:(NSError * __autoreleasing *)error
 {
-    NSLog(@"Generating intermediate certificate");
-
-    [MTRMemory ensureInit];
-
+    MTR_LOG_DEFAULT("Generating intermediate certificate");
     NSData * intermediate = nil;
     CHIP_ERROR err = MTROperationalCredentialsDelegate::GenerateIntermediateCertificate(
         rootKeypair, rootCertificate, intermediatePublicKey, issuerID, fabricID, &intermediate);
@@ -72,7 +71,7 @@
     }
 
     if (err != CHIP_NO_ERROR) {
-        NSLog(@"Generating intermediate certificate failed: %s", ErrorStr(err));
+        MTR_LOG_ERROR("Generating intermediate certificate failed: %s", ErrorStr(err));
     }
 
     return intermediate;
@@ -86,10 +85,7 @@
                                            caseAuthenticatedTags:(NSArray<NSNumber *> * _Nullable)caseAuthenticatedTags
                                                            error:(NSError * __autoreleasing _Nullable * _Nullable)error
 {
-    NSLog(@"Generating operational certificate");
-
-    [MTRMemory ensureInit];
-
+    MTR_LOG_DEFAULT("Generating operational certificate");
     NSData * opcert = nil;
     CHIP_ERROR err = MTROperationalCredentialsDelegate::GenerateOperationalCertificate(
         signingKeypair, signingCertificate, operationalPublicKey, fabricID, nodeID, caseAuthenticatedTags, &opcert);
@@ -98,7 +94,7 @@
     }
 
     if (err != CHIP_NO_ERROR) {
-        NSLog(@"Generating operational certificate failed: %s", ErrorStr(err));
+        MTR_LOG_ERROR("Generating operational certificate failed: %s", ErrorStr(err));
     }
 
     return opcert;
@@ -106,12 +102,10 @@
 
 + (BOOL)keypair:(id<MTRKeypair>)keypair matchesCertificate:(NSData *)certificate
 {
-    [MTRMemory ensureInit];
-
     P256PublicKey keypairPubKey;
     CHIP_ERROR err = MTRP256KeypairBridge::MatterPubKeyFromSecKeyRef(keypair.publicKey, &keypairPubKey);
     if (err != CHIP_NO_ERROR) {
-        NSLog(@"Can't extract public key from keypair: %s", ErrorStr(err));
+        MTR_LOG_ERROR("Can't extract public key from keypair: %s", ErrorStr(err));
         return NO;
     }
     P256PublicKeySpan keypairKeySpan(keypairPubKey.ConstBytes());
@@ -119,7 +113,7 @@
     P256PublicKey certPubKey;
     err = ExtractPubkeyFromX509Cert(AsByteSpan(certificate), certPubKey);
     if (err != CHIP_NO_ERROR) {
-        NSLog(@"Can't extract public key from certificate: %s", ErrorStr(err));
+        MTR_LOG_ERROR("Can't extract public key from certificate: %s", ErrorStr(err));
         return NO;
     }
     P256PublicKeySpan certKeySpan(certPubKey.ConstBytes());
@@ -129,12 +123,10 @@
 
 + (BOOL)isCertificate:(MTRCertificateDERBytes)certificate1 equalTo:(MTRCertificateDERBytes)certificate2
 {
-    [MTRMemory ensureInit];
-
     P256PublicKey pubKey1;
     CHIP_ERROR err = ExtractPubkeyFromX509Cert(AsByteSpan(certificate1), pubKey1);
     if (err != CHIP_NO_ERROR) {
-        NSLog(@"Can't extract public key from first certificate: %s", ErrorStr(err));
+        MTR_LOG_ERROR("Can't extract public key from first certificate: %s", ErrorStr(err));
         return NO;
     }
     P256PublicKeySpan keySpan1(pubKey1.ConstBytes());
@@ -142,7 +134,7 @@
     P256PublicKey pubKey2;
     err = ExtractPubkeyFromX509Cert(AsByteSpan(certificate2), pubKey2);
     if (err != CHIP_NO_ERROR) {
-        NSLog(@"Can't extract public key from second certificate: %s", ErrorStr(err));
+        MTR_LOG_ERROR("Can't extract public key from second certificate: %s", ErrorStr(err));
         return NO;
     }
     P256PublicKeySpan keySpan2(pubKey1.ConstBytes());
@@ -154,14 +146,14 @@
     ChipDN subject1;
     err = ExtractSubjectDNFromX509Cert(AsByteSpan(certificate1), subject1);
     if (err != CHIP_NO_ERROR) {
-        NSLog(@"Can't extract subject DN from first certificate: %s", ErrorStr(err));
+        MTR_LOG_ERROR("Can't extract subject DN from first certificate: %s", ErrorStr(err));
         return NO;
     }
 
     ChipDN subject2;
     err = ExtractSubjectDNFromX509Cert(AsByteSpan(certificate2), subject2);
     if (err != CHIP_NO_ERROR) {
-        NSLog(@"Can't extract subject DN from second certificate: %s", ErrorStr(err));
+        MTR_LOG_ERROR("Can't extract subject DN from second certificate: %s", ErrorStr(err));
         return NO;
     }
 
@@ -171,8 +163,6 @@
 + (NSData * _Nullable)createCertificateSigningRequest:(id<MTRKeypair>)keypair
                                                 error:(NSError * __autoreleasing _Nullable * _Nullable)error
 {
-    [MTRMemory ensureInit];
-
     MTRP256KeypairBridge keypairBridge;
     CHIP_ERROR err = CHIP_NO_ERROR;
     do {
@@ -206,7 +196,7 @@
     chip::MutableByteSpan chipCertBytes(chipCertBuffer);
 
     CHIP_ERROR errorCode = chip::Credentials::ConvertX509CertToChipCert(x509CertBytes, chipCertBytes);
-    MTR_LOG_ERROR("ConvertX509CertToChipCert: %{public}s", chip::ErrorStr(errorCode));
+    MTR_LOG_ERROR("ConvertX509CertToChipCert: %s", chip::ErrorStr(errorCode));
 
     if (errorCode != CHIP_NO_ERROR)
         return nil;
@@ -224,7 +214,7 @@
     CHIP_ERROR errorCode = chip::Credentials::ConvertChipCertToX509Cert(tlvCertBytes, derCertBytes);
 
     if (errorCode != CHIP_NO_ERROR) {
-        MTR_LOG_ERROR("ConvertChipCertToX509Cert: %{public}s", chip::ErrorStr(errorCode));
+        MTR_LOG_ERROR("ConvertChipCertToX509Cert: %s", chip::ErrorStr(errorCode));
         return nil;
     }
 
diff --git a/src/darwin/Framework/CHIP/MTRClusterStateCacheContainer.mm b/src/darwin/Framework/CHIP/MTRClusterStateCacheContainer.mm
index 81eb662..72c5517 100644
--- a/src/darwin/Framework/CHIP/MTRClusterStateCacheContainer.mm
+++ b/src/darwin/Framework/CHIP/MTRClusterStateCacheContainer.mm
@@ -23,7 +23,7 @@
 #import "MTRDeviceControllerXPCConnection.h"
 #import "MTRError.h"
 #import "MTRError_Internal.h"
-#import "MTRLogging.h"
+#import "MTRLogging_Internal.h"
 
 #include <app/InteractionModelEngine.h>
 #include <lib/support/ErrorStr.h>
diff --git a/src/darwin/Framework/CHIP/MTRCommissioningParameters.m b/src/darwin/Framework/CHIP/MTRCommissioningParameters.mm
similarity index 100%
rename from src/darwin/Framework/CHIP/MTRCommissioningParameters.m
rename to src/darwin/Framework/CHIP/MTRCommissioningParameters.mm
diff --git a/src/darwin/Framework/CHIP/MTRMemory.mm b/src/darwin/Framework/CHIP/MTRDefines.h
similarity index 69%
rename from src/darwin/Framework/CHIP/MTRMemory.mm
rename to src/darwin/Framework/CHIP/MTRDefines.h
index f6c94bf..0751dda 100644
--- a/src/darwin/Framework/CHIP/MTRMemory.mm
+++ b/src/darwin/Framework/CHIP/MTRDefines.h
@@ -1,4 +1,5 @@
 /**
+ *
  *    Copyright (c) 2022 Project CHIP Authors
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
@@ -14,19 +15,12 @@
  *    limitations under the License.
  */
 
-#import "MTRMemory.h"
+#import <Foundation/Foundation.h>
 
-#include <lib/support/CHIPMem.h>
+#define MTR_EXPORT __attribute__((visibility("default")))
 
-@implementation MTRMemory
-
-+ (void)ensureInit
-{
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        // The malloc version of MemoryInit never fails.
-        chip::Platform::MemoryInit();
-    });
-}
-
-@end
+#ifdef __cplusplus
+#define MTR_EXTERN extern "C" MTR_EXPORT
+#else
+#define MTR_EXTERN extern MTR_EXPORT
+#endif
diff --git a/src/darwin/Framework/CHIP/MTRDevice.mm b/src/darwin/Framework/CHIP/MTRDevice.mm
index 1653737..a145394 100644
--- a/src/darwin/Framework/CHIP/MTRDevice.mm
+++ b/src/darwin/Framework/CHIP/MTRDevice.mm
@@ -25,7 +25,7 @@
 #import "MTRDevice_Internal.h"
 #import "MTRError_Internal.h"
 #import "MTREventTLVValueDecoder_Internal.h"
-#import "MTRLogging.h"
+#import "MTRLogging_Internal.h"
 
 #include "lib/core/CHIPError.h"
 #include "lib/core/DataModelTypes.h"
diff --git a/src/darwin/Framework/CHIP/MTRDeviceAttestationDelegateBridge.mm b/src/darwin/Framework/CHIP/MTRDeviceAttestationDelegateBridge.mm
index 4a489aa..2f0c7f9 100644
--- a/src/darwin/Framework/CHIP/MTRDeviceAttestationDelegateBridge.mm
+++ b/src/darwin/Framework/CHIP/MTRDeviceAttestationDelegateBridge.mm
@@ -18,6 +18,7 @@
 #import "MTRDeviceAttestationDelegateBridge.h"
 #import "MTRDeviceAttestationDelegate_Internal.h"
 #import "MTRError_Internal.h"
+#import "MTRLogging_Internal.h"
 #import "NSDataSpanConversion.h"
 
 void MTRDeviceAttestationDelegateBridge::OnDeviceAttestationCompleted(chip::Controller::DeviceCommissioner * deviceCommissioner,
@@ -25,7 +26,8 @@
     chip::Credentials::AttestationVerificationResult attestationResult)
 {
     dispatch_async(mQueue, ^{
-        NSLog(@"MTRDeviceAttestationDelegateBridge::OnDeviceAttestationFailed completed with result: %hu", attestationResult);
+        MTR_LOG_DEFAULT(
+            "MTRDeviceAttestationDelegateBridge::OnDeviceAttestationFailed completed with result: %hu", attestationResult);
 
         mResult = attestationResult;
 
diff --git a/src/darwin/Framework/CHIP/MTRDeviceController+XPC.m b/src/darwin/Framework/CHIP/MTRDeviceController+XPC.mm
similarity index 100%
rename from src/darwin/Framework/CHIP/MTRDeviceController+XPC.m
rename to src/darwin/Framework/CHIP/MTRDeviceController+XPC.mm
diff --git a/src/darwin/Framework/CHIP/MTRDeviceController.mm b/src/darwin/Framework/CHIP/MTRDeviceController.mm
index c872221..c3e1c71 100644
--- a/src/darwin/Framework/CHIP/MTRDeviceController.mm
+++ b/src/darwin/Framework/CHIP/MTRDeviceController.mm
@@ -27,7 +27,7 @@
 #import "MTRDevice_Internal.h"
 #import "MTRError_Internal.h"
 #import "MTRKeypair.h"
-#import "MTRLogging.h"
+#import "MTRLogging_Internal.h"
 #import "MTROperationalCredentialsDelegate.h"
 #import "MTRP256KeypairBridge.h"
 #import "MTRPersistentStorageDelegateBridge.h"
diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerDelegateBridge.mm b/src/darwin/Framework/CHIP/MTRDeviceControllerDelegateBridge.mm
index 3ac0883..bc7865a 100644
--- a/src/darwin/Framework/CHIP/MTRDeviceControllerDelegateBridge.mm
+++ b/src/darwin/Framework/CHIP/MTRDeviceControllerDelegateBridge.mm
@@ -18,6 +18,7 @@
 #import "MTRDeviceControllerDelegateBridge.h"
 #import "MTRDeviceController.h"
 #import "MTRError_Internal.h"
+#import "MTRLogging_Internal.h"
 
 MTRDeviceControllerDelegateBridge::MTRDeviceControllerDelegateBridge(void)
     : mDelegate(nil)
@@ -59,7 +60,7 @@
 
 void MTRDeviceControllerDelegateBridge::OnStatusUpdate(chip::Controller::DevicePairingDelegate::Status status)
 {
-    NSLog(@"DeviceControllerDelegate status updated: %d", status);
+    MTR_LOG_DEFAULT("DeviceControllerDelegate status updated: %d", status);
 
     id<MTRDeviceControllerDelegate> strongDelegate = mDelegate;
     MTRDeviceController * strongController = mController;
@@ -75,7 +76,7 @@
 
 void MTRDeviceControllerDelegateBridge::OnPairingComplete(CHIP_ERROR error)
 {
-    NSLog(@"DeviceControllerDelegate Pairing complete. Status %s", chip::ErrorStr(error));
+    MTR_LOG_DEFAULT("DeviceControllerDelegate Pairing complete. Status %s", chip::ErrorStr(error));
 
     id<MTRDeviceControllerDelegate> strongDelegate = mDelegate;
     MTRDeviceController * strongController = mController;
@@ -91,14 +92,14 @@
 
 void MTRDeviceControllerDelegateBridge::OnPairingDeleted(CHIP_ERROR error)
 {
-    NSLog(@"DeviceControllerDelegate Pairing deleted. Status %s", chip::ErrorStr(error));
+    MTR_LOG_DEFAULT("DeviceControllerDelegate Pairing deleted. Status %s", chip::ErrorStr(error));
 
     // This is never actually called; just do nothing.
 }
 
 void MTRDeviceControllerDelegateBridge::OnCommissioningComplete(chip::NodeId nodeId, CHIP_ERROR error)
 {
-    NSLog(@"DeviceControllerDelegate Commissioning complete. NodeId %llu Status %s", nodeId, chip::ErrorStr(error));
+    MTR_LOG_DEFAULT("DeviceControllerDelegate Commissioning complete. NodeId %llu Status %s", nodeId, chip::ErrorStr(error));
 
     id<MTRDeviceControllerDelegate> strongDelegate = mDelegate;
     MTRDeviceController * strongController = mController;
diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerFactory.mm b/src/darwin/Framework/CHIP/MTRDeviceControllerFactory.mm
index 9167cd0..81f53c4 100644
--- a/src/darwin/Framework/CHIP/MTRDeviceControllerFactory.mm
+++ b/src/darwin/Framework/CHIP/MTRDeviceControllerFactory.mm
@@ -25,8 +25,8 @@
 #import "MTRDeviceControllerStartupParams_Internal.h"
 #import "MTRDeviceController_Internal.h"
 #import "MTRError_Internal.h"
-#import "MTRLogging.h"
-#import "MTRMemory.h"
+#import "MTRFramework.h"
+#import "MTRLogging_Internal.h"
 #import "MTROTAProviderDelegateBridge.h"
 #import "MTRP256KeypairBridge.h"
 #import "MTRPersistentStorageDelegateBridge.h"
@@ -50,7 +50,6 @@
 static NSString * const kErrorPersistentStorageInit = @"Init failure while creating a persistent storage delegate";
 static NSString * const kErrorAttestationTrustStoreInit = @"Init failure while creating the attestation trust store";
 static NSString * const kErrorDACVerifierInit = @"Init failure while creating the device attestation verifier";
-static NSString * const kInfoFactoryShutdown = @"Shutting down the Matter controller factory";
 static NSString * const kErrorGroupProviderInit = @"Init failure while initializing group data provider";
 static NSString * const kErrorControllersInit = @"Init controllers array failure";
 static NSString * const kErrorControllerFactoryInit = @"Init failure while initializing controller factory";
@@ -85,6 +84,11 @@
 
 @implementation MTRDeviceControllerFactory
 
++ (void)initialize
+{
+    MTRFrameworkInit();
+}
+
 + (instancetype)sharedInstance
 {
     static MTRDeviceControllerFactory * factory = nil;
@@ -105,7 +109,6 @@
     _running = NO;
     _chipWorkQueue = DeviceLayer::PlatformMgrImpl().GetWorkQueue();
     _controllerFactory = &DeviceControllerFactory::GetInstance();
-    [MTRMemory ensureInit];
 
     _groupStorageDelegate = new chip::TestPersistentStorageDelegate();
     if ([self checkForInitError:(_groupStorageDelegate != nullptr) logMsg:kErrorGroupProviderInit]) {
@@ -414,7 +417,7 @@
         [_controllers[0] shutdown];
     }
 
-    MTR_LOG_DEBUG("%@", kInfoFactoryShutdown);
+    MTR_LOG_DEBUG("Shutting down the Matter controller factory");
     _controllerFactory->Shutdown();
 
     [self cleanupStartupObjects];
diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerOverXPC.m b/src/darwin/Framework/CHIP/MTRDeviceControllerOverXPC.mm
similarity index 99%
rename from src/darwin/Framework/CHIP/MTRDeviceControllerOverXPC.m
rename to src/darwin/Framework/CHIP/MTRDeviceControllerOverXPC.mm
index 929e479..b78f498 100644
--- a/src/darwin/Framework/CHIP/MTRDeviceControllerOverXPC.m
+++ b/src/darwin/Framework/CHIP/MTRDeviceControllerOverXPC.mm
@@ -21,7 +21,7 @@
 #import "MTRDeviceControllerXPCConnection.h"
 #import "MTRDeviceOverXPC.h"
 #import "MTRError.h"
-#import "MTRLogging.h"
+#import "MTRLogging_Internal.h"
 
 #import <Foundation/Foundation.h>
 
diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerStartupParams.mm b/src/darwin/Framework/CHIP/MTRDeviceControllerStartupParams.mm
index c2f0242..557864b 100644
--- a/src/darwin/Framework/CHIP/MTRDeviceControllerStartupParams.mm
+++ b/src/darwin/Framework/CHIP/MTRDeviceControllerStartupParams.mm
@@ -17,7 +17,7 @@
 #import "MTRDeviceControllerStartupParams.h"
 #import "MTRCertificates.h"
 #import "MTRDeviceControllerStartupParams_Internal.h"
-#import "MTRLogging.h"
+#import "MTRLogging_Internal.h"
 #import "MTRP256KeypairBridge.h"
 #import "NSDataSpanConversion.h"
 
diff --git a/src/darwin/Framework/CHIP/MTRDeviceControllerXPCConnection.m b/src/darwin/Framework/CHIP/MTRDeviceControllerXPCConnection.mm
similarity index 99%
rename from src/darwin/Framework/CHIP/MTRDeviceControllerXPCConnection.m
rename to src/darwin/Framework/CHIP/MTRDeviceControllerXPCConnection.mm
index a5513da..dc5cec1 100644
--- a/src/darwin/Framework/CHIP/MTRDeviceControllerXPCConnection.m
+++ b/src/darwin/Framework/CHIP/MTRDeviceControllerXPCConnection.mm
@@ -17,7 +17,7 @@
 
 #import "MTRDeviceControllerXPCConnection.h"
 #import "MTRDeviceControllerOverXPC.h"
-#import "MTRLogging.h"
+#import "MTRLogging_Internal.h"
 
 #import <Foundation/Foundation.h>
 
diff --git a/src/darwin/Framework/CHIP/MTRDeviceOverXPC.m b/src/darwin/Framework/CHIP/MTRDeviceOverXPC.mm
similarity index 99%
rename from src/darwin/Framework/CHIP/MTRDeviceOverXPC.m
rename to src/darwin/Framework/CHIP/MTRDeviceOverXPC.mm
index a746d0a..cea5e03 100644
--- a/src/darwin/Framework/CHIP/MTRDeviceOverXPC.m
+++ b/src/darwin/Framework/CHIP/MTRDeviceOverXPC.mm
@@ -23,7 +23,7 @@
 #import "MTRDeviceControllerOverXPC_Internal.h"
 #import "MTRDeviceControllerXPCConnection.h"
 #import "MTRError.h"
-#import "MTRLogging.h"
+#import "MTRLogging_Internal.h"
 
 NS_ASSUME_NONNULL_BEGIN
 
diff --git a/src/darwin/Framework/CHIP/MTRMemory.mm b/src/darwin/Framework/CHIP/MTRFramework.h
similarity index 68%
copy from src/darwin/Framework/CHIP/MTRMemory.mm
copy to src/darwin/Framework/CHIP/MTRFramework.h
index f6c94bf..0017081 100644
--- a/src/darwin/Framework/CHIP/MTRMemory.mm
+++ b/src/darwin/Framework/CHIP/MTRFramework.h
@@ -14,19 +14,7 @@
  *    limitations under the License.
  */
 
-#import "MTRMemory.h"
-
-#include <lib/support/CHIPMem.h>
-
-@implementation MTRMemory
-
-+ (void)ensureInit
-{
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        // The malloc version of MemoryInit never fails.
-        chip::Platform::MemoryInit();
-    });
-}
-
-@end
+/**
+ * Performs per-process initialization of the Matter stack.
+ */
+void MTRFrameworkInit();
diff --git a/src/darwin/Framework/CHIP/MTRFramework.mm b/src/darwin/Framework/CHIP/MTRFramework.mm
new file mode 100644
index 0000000..e6a0e67
--- /dev/null
+++ b/src/darwin/Framework/CHIP/MTRFramework.mm
@@ -0,0 +1,38 @@
+/**
+ *    Copyright (c) 2022 Project CHIP Authors
+ *
+ *    Licensed 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.
+ */
+
+#import "MTRFramework.h"
+
+#include <dispatch/dispatch.h>
+#include <lib/support/CHIPMem.h>
+#include <lib/support/logging/CHIPLogging.h>
+
+void MTRFrameworkInit()
+{
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        // Ensure Matter Platform::Memory is initialized.  This only needs
+        // to happen once per process, because in practice we just use
+        // malloc/free so there is nothing to initialize, so this just needs
+        // to happen to avoid debug assertions.  The malloc version of
+        // MemoryInit() never fails.
+        chip::Platform::MemoryInit();
+
+        // Suppress CHIP logging until we actually need it for redirection
+        // (see MTRSetLogCallback()). Logging to os_log is always enabled.
+        chip::Logging::SetLogFilter(chip::Logging::kLogCategory_None);
+    });
+}
diff --git a/src/darwin/Framework/CHIP/MTRLogging.h b/src/darwin/Framework/CHIP/MTRLogging.h
index f2bcb33..104c798 100644
--- a/src/darwin/Framework/CHIP/MTRLogging.h
+++ b/src/darwin/Framework/CHIP/MTRLogging.h
@@ -1,6 +1,6 @@
 /*
  *
- *    Copyright (c) 2020 Project CHIP Authors
+ *    Copyright (c) 2022 Project CHIP Authors
  *    All rights reserved.
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,12 +16,28 @@
  *    limitations under the License.
  */
 
-#import <os/log.h>
+#import <Matter/MTRDefines.h>
 
-#define MTR_LOG_FAULT(format, ...) os_log_fault(OS_LOG_DEFAULT, format, ##__VA_ARGS__)
-#define MTR_LOG_ERROR(format, ...) os_log_error(OS_LOG_DEFAULT, format, ##__VA_ARGS__)
-#define MTR_LOG_INFO(format, ...) os_log_info(OS_LOG_DEFAULT, format, ##__VA_ARGS__)
-#define MTR_LOG_DEBUG(format, ...) os_log_debug(OS_LOG_DEFAULT, format, ##__VA_ARGS__)
+NS_ASSUME_NONNULL_BEGIN
 
-#define MTR_LOG_METHOD_ENTRY()                                                                                                     \
-    ({ os_log_debug(OS_LOG_DEFAULT, "[<%@: %p> %@]", NSStringFromClass([self class]), self, NSStringFromSelector(_cmd)); })
+typedef NS_ENUM(NSInteger, MTRLogType) {
+    MTRLogTypeError = 1,
+    MTRLogTypeProgress = 2,
+    MTRLogTypeDetail = 3,
+};
+
+typedef void (^MTRLogCallback)(MTRLogType type, NSString * moduleName, NSString * message);
+
+/**
+ * Arranges for log messages from the Matter stack to be delivered to a callback block.
+ *
+ * @param logTypeThreshold only messages up to (and including) the specified log type will be delivered
+ * @param callback the block to call, or nil to disable the log callback.
+ *
+ * The callback block may be called concurrently and/or from arbitrary threads.
+ * It SHALL NOT call back directly or indirectly into any Matter APIs,
+ * nor block the calling thread for a non-trivial amount of time.
+ */
+MTR_EXTERN MTR_NEWLY_AVAILABLE void MTRSetLogCallback(MTRLogType logTypeThreshold, MTRLogCallback _Nullable callback);
+
+NS_ASSUME_NONNULL_END
diff --git a/src/darwin/Framework/CHIP/MTRLogging.mm b/src/darwin/Framework/CHIP/MTRLogging.mm
new file mode 100644
index 0000000..23b310a
--- /dev/null
+++ b/src/darwin/Framework/CHIP/MTRLogging.mm
@@ -0,0 +1,70 @@
+/*
+ *
+ *    Copyright (c) 2022 Project CHIP Authors
+ *    All rights reserved.
+ *
+ *    Licensed 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.
+ */
+
+#import "MTRLogging_Internal.h"
+
+#import "MTRFramework.h"
+
+#import <algorithm>
+#import <atomic>
+#import <os/lock.h>
+
+using namespace chip::Logging;
+
+static_assert(MTRLogTypeError == (NSInteger) kLogCategory_Error, "MTRLogType* != kLogCategory_*");
+static_assert(MTRLogTypeProgress == (NSInteger) kLogCategory_Progress, "MTRLogType* != kLogCategory_*");
+static_assert(MTRLogTypeDetail == (NSInteger) kLogCategory_Detail, "MTRLogType* != kLogCategory_*");
+
+static os_unfair_lock logCallbackLock = OS_UNFAIR_LOCK_INIT;
+static MTRLogCallback logCallback = nil;
+
+static void MTRLogCallbackTrampoline(const char * moduleName, uint8_t category, const char * format, va_list args)
+{
+    os_unfair_lock_lock(&logCallbackLock);
+    MTRLogCallback callback = logCallback;
+    os_unfair_lock_unlock(&logCallbackLock);
+    if (!callback) {
+        return;
+    }
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wformat-nonliteral"
+    // Note: Format using NSString so that '%@' placeholders are supported
+    NSString * message = [[NSString alloc] initWithFormat:@(format) arguments:args];
+#pragma clang diagnostic pop
+
+    auto type = std::min(static_cast<MTRLogType>(category), MTRLogTypeDetail); // hide kLogCategory_Automation
+    callback(type, @(moduleName), message);
+}
+
+void MTRSetLogCallback(MTRLogType logTypeThreshold, MTRLogCallback _Nullable callback)
+{
+    MTRFrameworkInit();
+
+    os_unfair_lock_lock(&logCallbackLock);
+    if (callback) {
+        SetLogRedirectCallback(&MTRLogCallbackTrampoline);
+        SetLogFilter(static_cast<LogCategory>(std::min(std::max(logTypeThreshold, MTRLogTypeError), MTRLogTypeDetail)));
+        logCallback = callback;
+    } else {
+        logCallback = nil;
+        SetLogFilter(kLogCategory_None);
+        SetLogRedirectCallback(nullptr);
+    }
+    os_unfair_lock_unlock(&logCallbackLock);
+}
diff --git a/src/darwin/Framework/CHIP/MTRLogging_Internal.h b/src/darwin/Framework/CHIP/MTRLogging_Internal.h
new file mode 100644
index 0000000..9b2d2fc
--- /dev/null
+++ b/src/darwin/Framework/CHIP/MTRLogging_Internal.h
@@ -0,0 +1,26 @@
+/*
+ *
+ *    Copyright (c) 2020 Project CHIP Authors
+ *    All rights reserved.
+ *
+ *    Licensed 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.
+ */
+
+#import <Matter/MTRLogging.h>
+
+#include <lib/support/logging/CHIPLogging.h>
+
+#define MTR_LOG_ERROR(msg, ...) ChipLogError(NotSpecified, msg, ##__VA_ARGS__)
+#define MTR_LOG_DEFAULT(msg, ...) ChipLogProgress(NotSpecified, msg, ##__VA_ARGS__)
+#define MTR_LOG_INFO(msg, ...) ChipLogDetail(NotSpecified, msg, ##__VA_ARGS__)
+#define MTR_LOG_DEBUG(msg, ...) ChipLogDetail(NotSpecified, msg, ##__VA_ARGS__) // same as INFO
diff --git a/src/darwin/Framework/CHIP/MTRManualSetupPayloadParser.mm b/src/darwin/Framework/CHIP/MTRManualSetupPayloadParser.mm
index fc493af..3a0435d 100644
--- a/src/darwin/Framework/CHIP/MTRManualSetupPayloadParser.mm
+++ b/src/darwin/Framework/CHIP/MTRManualSetupPayloadParser.mm
@@ -17,8 +17,8 @@
 #import "MTRManualSetupPayloadParser.h"
 
 #import "MTRError_Internal.h"
-#import "MTRLogging.h"
-#import "MTRMemory.h"
+#import "MTRFramework.h"
+#import "MTRLogging_Internal.h"
 #import "MTRSetupPayload_Internal.h"
 
 #import <setup_payload/ManualSetupPayloadParser.h>
@@ -29,10 +29,14 @@
     chip::ManualSetupPayloadParser * _chipManualSetupPayloadParser;
 }
 
++ (void)initialize
+{
+    MTRFrameworkInit();
+}
+
 - (id)initWithDecimalStringRepresentation:(NSString *)decimalStringRepresentation
 {
     if (self = [super init]) {
-        [MTRMemory ensureInit];
         _decimalStringRepresentation = decimalStringRepresentation;
         _chipManualSetupPayloadParser = new chip::ManualSetupPayloadParser(std::string([decimalStringRepresentation UTF8String]));
     }
diff --git a/src/darwin/Framework/CHIP/MTRMemory.h b/src/darwin/Framework/CHIP/MTRMemory.h
deleted file mode 100644
index 124e47e..0000000
--- a/src/darwin/Framework/CHIP/MTRMemory.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- *    Copyright (c) 2022 Project CHIP Authors
- *
- *    Licensed 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.
- */
-
-#pragma once
-
-/**
- * Utility to initialize the Matter memory subsystem.  Not a public framework
- * header.
- */
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface MTRMemory : NSObject
-/**
- * Ensure Matter Platform::Memory is initialized.  This only needs to happen
- * once per process, because in practice we just use malloc/free so there is
- * nothing to initialize, so this just needs to happen to avoid debug
- * assertions.  This class handles ensuring the initialization only happens
- * once.
- */
-+ (void)ensureInit;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/src/darwin/Framework/CHIP/MTROnboardingPayloadParser.m b/src/darwin/Framework/CHIP/MTROnboardingPayloadParser.mm
similarity index 100%
rename from src/darwin/Framework/CHIP/MTROnboardingPayloadParser.m
rename to src/darwin/Framework/CHIP/MTROnboardingPayloadParser.mm
diff --git a/src/darwin/Framework/CHIP/MTROperationalCredentialsDelegate.mm b/src/darwin/Framework/CHIP/MTROperationalCredentialsDelegate.mm
index 0703f4c..ba11b3c 100644
--- a/src/darwin/Framework/CHIP/MTROperationalCredentialsDelegate.mm
+++ b/src/darwin/Framework/CHIP/MTROperationalCredentialsDelegate.mm
@@ -21,10 +21,8 @@
 
 #import <Security/Security.h>
 
-#include <Security/SecKey.h>
-
 #import "MTRCertificates.h"
-#import "MTRLogging.h"
+#import "MTRLogging_Internal.h"
 #import "NSDataSpanConversion.h"
 
 #include <controller/CommissioningDelegate.h>
@@ -94,12 +92,12 @@
     uint32_t validityStart, validityEnd;
 
     if (!ToChipEpochTime(0, validityStart)) {
-        NSLog(@"Failed in computing certificate validity start date");
+        MTR_LOG_ERROR("Failed in computing certificate validity start date");
         return CHIP_ERROR_INTERNAL;
     }
 
     if (!ToChipEpochTime(kCertificateValiditySecs, validityEnd)) {
-        NSLog(@"Failed in computing certificate validity end date");
+        MTR_LOG_ERROR("Failed in computing certificate validity end date");
         return CHIP_ERROR_INTERNAL;
     }
 
@@ -378,12 +376,12 @@
     uint32_t validityStart, validityEnd;
 
     if (!ToChipEpochTime(0, validityStart)) {
-        NSLog(@"Failed in computing certificate validity start date");
+        MTR_LOG_ERROR("Failed in computing certificate validity start date");
         return CHIP_ERROR_INTERNAL;
     }
 
     if (!ToChipEpochTime(kCertificateValiditySecs, validityEnd)) {
-        NSLog(@"Failed in computing certificate validity end date");
+        MTR_LOG_ERROR("Failed in computing certificate validity end date");
         return CHIP_ERROR_INTERNAL;
     }
 
@@ -428,12 +426,12 @@
     uint32_t validityStart, validityEnd;
 
     if (!ToChipEpochTime(0, validityStart)) {
-        NSLog(@"Failed in computing certificate validity start date");
+        MTR_LOG_ERROR("Failed in computing certificate validity start date");
         return CHIP_ERROR_INTERNAL;
     }
 
     if (!ToChipEpochTime(kCertificateValiditySecs, validityEnd)) {
-        NSLog(@"Failed in computing certificate validity end date");
+        MTR_LOG_ERROR("Failed in computing certificate validity end date");
         return CHIP_ERROR_INTERNAL;
     }
 
diff --git a/src/darwin/Framework/CHIP/MTRP256KeypairBridge.mm b/src/darwin/Framework/CHIP/MTRP256KeypairBridge.mm
index c1045a4..d253baa 100644
--- a/src/darwin/Framework/CHIP/MTRP256KeypairBridge.mm
+++ b/src/darwin/Framework/CHIP/MTRP256KeypairBridge.mm
@@ -18,11 +18,11 @@
 #import "MTRP256KeypairBridge.h"
 #import "NSDataSpanConversion.h"
 
-#import <Security/SecKey.h>
+#import <Security/Security.h>
 #include <string>
 
 #import "MTRKeypair.h"
-#import "MTRLogging.h"
+#import "MTRLogging_Internal.h"
 
 using namespace chip::Crypto;
 
@@ -31,7 +31,7 @@
     if (![keypair respondsToSelector:@selector(signMessageECDSA_DER:)]
         && ![keypair respondsToSelector:@selector(signMessageECDSA_RAW:)]) {
         // Not a valid MTRKeypair implementation.
-        NSLog(@"Keypair does not support message signing");
+        MTR_LOG_ERROR("Keypair does not support message signing");
         return CHIP_ERROR_INVALID_ARGUMENT;
     }
 
diff --git a/src/darwin/Framework/CHIP/MTRPersistentStorageDelegateBridge.mm b/src/darwin/Framework/CHIP/MTRPersistentStorageDelegateBridge.mm
index fdcde68..69e4103 100644
--- a/src/darwin/Framework/CHIP/MTRPersistentStorageDelegateBridge.mm
+++ b/src/darwin/Framework/CHIP/MTRPersistentStorageDelegateBridge.mm
@@ -17,6 +17,8 @@
 
 #import "MTRPersistentStorageDelegateBridge.h"
 
+#import "MTRLogging_Internal.h"
+
 #define LOG_DEBUG_PERSISTENT_STORAGE_DELEGATE 0
 
 MTRPersistentStorageDelegateBridge::MTRPersistentStorageDelegateBridge(id<MTRStorage> delegate)
@@ -38,7 +40,7 @@
 
     dispatch_sync(mWorkQueue, ^{
 #if LOG_DEBUG_PERSISTENT_STORAGE_DELEGATE
-        NSLog(@"PersistentStorageDelegate Sync Get Value for Key: %@", keyString);
+        MTR_LOG_DEBUG("PersistentStorageDelegate Sync Get Value for Key: %@", keyString);
 #endif
 
         NSData * value = [mDelegate storageDataForKey:keyString];
@@ -81,7 +83,7 @@
     __block CHIP_ERROR error = CHIP_NO_ERROR;
     dispatch_sync(mWorkQueue, ^{
 #if LOG_DEBUG_PERSISTENT_STORAGE_DELEGATE
-        NSLog(@"PersistentStorageDelegate Set Key %@", keyString);
+        MTR_LOG_DEBUG("PersistentStorageDelegate Set Key %@", keyString);
 #endif
 
         if ([mDelegate setStorageData:valueData forKey:keyString] == NO) {
@@ -99,7 +101,7 @@
     __block CHIP_ERROR error = CHIP_NO_ERROR;
     dispatch_sync(mWorkQueue, ^{
 #if LOG_DEBUG_PERSISTENT_STORAGE_DELEGATE
-        NSLog(@"PersistentStorageDelegate Delete Key: %@", keyString);
+        MTR_LOG_DEBUG("PersistentStorageDelegate Delete Key: %@", keyString);
 #endif
 
         if ([mDelegate removeStorageDataForKey:keyString] == NO) {
diff --git a/src/darwin/Framework/CHIP/MTRQRCodeSetupPayloadParser.mm b/src/darwin/Framework/CHIP/MTRQRCodeSetupPayloadParser.mm
index 8d0354c..bbb8042 100644
--- a/src/darwin/Framework/CHIP/MTRQRCodeSetupPayloadParser.mm
+++ b/src/darwin/Framework/CHIP/MTRQRCodeSetupPayloadParser.mm
@@ -17,8 +17,8 @@
 
 #import "MTRQRCodeSetupPayloadParser.h"
 #import "MTRError_Internal.h"
-#import "MTRLogging.h"
-#import "MTRMemory.h"
+#import "MTRFramework.h"
+#import "MTRLogging_Internal.h"
 #import "MTRSetupPayload_Internal.h"
 
 #import <setup_payload/QRCodeSetupPayloadParser.h>
@@ -29,10 +29,14 @@
     chip::QRCodeSetupPayloadParser * _chipQRCodeSetupPayloadParser;
 }
 
++ (void)initialize
+{
+    MTRFrameworkInit();
+}
+
 - (id)initWithBase38Representation:(NSString *)base38Representation
 {
     if (self = [super init]) {
-        [MTRMemory ensureInit];
         _base38Representation = base38Representation;
         _chipQRCodeSetupPayloadParser = new chip::QRCodeSetupPayloadParser(std::string([base38Representation UTF8String]));
     }
diff --git a/src/darwin/Framework/CHIP/MTRThreadOperationalDataset.mm b/src/darwin/Framework/CHIP/MTRThreadOperationalDataset.mm
index fb50d87..dc8876b 100644
--- a/src/darwin/Framework/CHIP/MTRThreadOperationalDataset.mm
+++ b/src/darwin/Framework/CHIP/MTRThreadOperationalDataset.mm
@@ -17,7 +17,7 @@
 
 #import "MTRThreadOperationalDataset.h"
 
-#include "MTRLogging.h"
+#include "MTRLogging_Internal.h"
 #include <lib/support/Span.h>
 #include <lib/support/ThreadOperationalDataset.h>
 
diff --git a/src/darwin/Framework/CHIP/Matter.h b/src/darwin/Framework/CHIP/Matter.h
index 5fd4b14..179c284 100644
--- a/src/darwin/Framework/CHIP/Matter.h
+++ b/src/darwin/Framework/CHIP/Matter.h
@@ -37,6 +37,7 @@
 #import <Matter/MTRClusters.h>
 #import <Matter/MTRCommandPayloadsObjc.h>
 #import <Matter/MTRCommissioningParameters.h>
+#import <Matter/MTRDefines.h>
 #import <Matter/MTRDevice.h>
 #import <Matter/MTRDeviceAttestationDelegate.h>
 #import <Matter/MTRDeviceController+XPC.h>
@@ -46,6 +47,7 @@
 #import <Matter/MTRDeviceControllerStartupParams.h>
 #import <Matter/MTRError.h>
 #import <Matter/MTRKeypair.h>
+#import <Matter/MTRLogging.h>
 #import <Matter/MTRManualSetupPayloadParser.h>
 #import <Matter/MTRNOCChainIssuer.h>
 #import <Matter/MTROTAHeader.h>
diff --git a/src/darwin/Framework/CHIP/Resources/Logging/com.csa.matter.plist b/src/darwin/Framework/CHIP/Resources/Logging/com.csa.matter.plist
new file mode 100644
index 0000000..6826105
--- /dev/null
+++ b/src/darwin/Framework/CHIP/Resources/Logging/com.csa.matter.plist
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>DEFAULT-OPTIONS</key>
+	<dict>
+		<key>Default-Privacy-Setting</key>
+		<string>public</string>
+		<key>Level</key>
+		<dict>
+			<key>Enable</key>
+			<string>info</string>
+			<key>Persist</key>
+			<string>default</string>
+		</dict>
+	</dict>
+</dict>
+</plist>
diff --git a/src/darwin/Framework/CHIP/templates/MTRClusters-src.zapt b/src/darwin/Framework/CHIP/templates/MTRClusters-src.zapt
index b37dd16..dcb06b5 100644
--- a/src/darwin/Framework/CHIP/templates/MTRClusters-src.zapt
+++ b/src/darwin/Framework/CHIP/templates/MTRClusters-src.zapt
@@ -12,7 +12,7 @@
 #import "MTRCluster_internal.h"
 #import "MTRStructsObjc.h"
 #import "MTRCommandPayloadsObjc.h"
-#import "MTRLogging.h"
+#import "MTRLogging_Internal.h"
 
 #include <lib/support/CHIPListUtils.h>
 #include <platform/CHIPDeviceLayer.h>
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm b/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm
index f0d5060..46da7e4 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRClusters.mm
@@ -26,7 +26,7 @@
 #import "MTRCommandPayloadsObjc.h"
 #import "MTRDevice.h"
 #import "MTRDevice_Internal.h"
-#import "MTRLogging.h"
+#import "MTRLogging_Internal.h"
 #import "MTRStructsObjc.h"
 
 #include <lib/support/CHIPListUtils.h>
diff --git a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj
index a839438..af1f6c3 100644
--- a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj
+++ b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj
@@ -33,10 +33,15 @@
 		2CB7163F252F731E0026E2BB /* MTRDeviceControllerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CB7163E252F731E0026E2BB /* MTRDeviceControllerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		2FD775552695557E00FF4B12 /* error-mapping.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2FD775542695557E00FF4B12 /* error-mapping.cpp */; };
 		3CF134A7289D8ADA0017A19E /* MTRCSRInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CF134A6289D8AD90017A19E /* MTRCSRInfo.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		3CF134A9289D8D800017A19E /* MTRCSRInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CF134A8289D8D800017A19E /* MTRCSRInfo.m */; };
+		3CF134A9289D8D800017A19E /* MTRCSRInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3CF134A8289D8D800017A19E /* MTRCSRInfo.mm */; };
 		3CF134AB289D8DF70017A19E /* MTRAttestationInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CF134AA289D8DF70017A19E /* MTRAttestationInfo.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		3CF134AD289D8E570017A19E /* MTRAttestationInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CF134AC289D8E570017A19E /* MTRAttestationInfo.m */; };
+		3CF134AD289D8E570017A19E /* MTRAttestationInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3CF134AC289D8E570017A19E /* MTRAttestationInfo.mm */; };
 		3CF134AF289D90FF0017A19E /* MTRNOCChainIssuer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CF134AE289D90FF0017A19E /* MTRNOCChainIssuer.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		3D69868529383096007314E7 /* com.csa.matter.plist in Copy Logging Preferences */ = {isa = PBXBuildFile; fileRef = 3D69868029382EF4007314E7 /* com.csa.matter.plist */; };
+		3DECCB6E29347D2D00585AEC /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DECCB6D29347D2C00585AEC /* Security.framework */; };
+		3DECCB702934AECD00585AEC /* MTRLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DECCB6F2934AC1C00585AEC /* MTRLogging.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		3DECCB722934AFE200585AEC /* MTRLogging.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3DECCB712934AFE200585AEC /* MTRLogging.mm */; };
+		3DECCB742934C21B00585AEC /* MTRDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DECCB732934C21B00585AEC /* MTRDefines.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		5112F606287CD2C100B827E7 /* privilege-storage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5112F605287CD2C100B827E7 /* privilege-storage.cpp */; };
 		511913FB28C100EF009235E9 /* MTRBaseSubscriptionCallback.mm in Sources */ = {isa = PBXBuildFile; fileRef = 511913F928C100EF009235E9 /* MTRBaseSubscriptionCallback.mm */; };
 		511913FC28C100EF009235E9 /* MTRBaseSubscriptionCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 511913FA28C100EF009235E9 /* MTRBaseSubscriptionCallback.h */; };
@@ -50,8 +55,8 @@
 		514304202914CED9004DC7FE /* generic-callback-stubs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5143041F2914CED9004DC7FE /* generic-callback-stubs.cpp */; };
 		51431AF927D2973E008A7943 /* MTRIMDispatch.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51431AF827D2973E008A7943 /* MTRIMDispatch.mm */; };
 		51431AFB27D29CA4008A7943 /* ota-provider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51431AFA27D29CA4008A7943 /* ota-provider.cpp */; };
-		515C1C6F284F9FFB00A48F0C /* MTRMemory.mm in Sources */ = {isa = PBXBuildFile; fileRef = 515C1C6D284F9FFB00A48F0C /* MTRMemory.mm */; };
-		515C1C70284F9FFB00A48F0C /* MTRMemory.h in Headers */ = {isa = PBXBuildFile; fileRef = 515C1C6E284F9FFB00A48F0C /* MTRMemory.h */; };
+		515C1C6F284F9FFB00A48F0C /* MTRFramework.mm in Sources */ = {isa = PBXBuildFile; fileRef = 515C1C6D284F9FFB00A48F0C /* MTRFramework.mm */; };
+		515C1C70284F9FFB00A48F0C /* MTRFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 515C1C6E284F9FFB00A48F0C /* MTRFramework.h */; };
 		51669AF02913204400F4AA36 /* MTRBackwardsCompatTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 51669AEF2913204400F4AA36 /* MTRBackwardsCompatTests.m */; };
 		517BF3F0282B62B800A8B7DB /* MTRCertificates.h in Headers */ = {isa = PBXBuildFile; fileRef = 517BF3EE282B62B800A8B7DB /* MTRCertificates.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		517BF3F1282B62B800A8B7DB /* MTRCertificates.mm in Sources */ = {isa = PBXBuildFile; fileRef = 517BF3EF282B62B800A8B7DB /* MTRCertificates.mm */; };
@@ -70,15 +75,15 @@
 		51E51FC0282AD37A00FC978D /* MTRDeviceControllerStartupParams_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 51E51FBD282AD37A00FC978D /* MTRDeviceControllerStartupParams_Internal.h */; };
 		51E51FC1282AD37A00FC978D /* MTRDeviceControllerStartupParams.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51E51FBE282AD37A00FC978D /* MTRDeviceControllerStartupParams.mm */; };
 		5A60370827EA1FF60020DB79 /* MTRClusterStateCacheContainer+XPC.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A60370727EA1FF60020DB79 /* MTRClusterStateCacheContainer+XPC.h */; };
-		5A6FEC9027B563D900F25F42 /* MTRDeviceControllerOverXPC.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A6FEC8F27B563D900F25F42 /* MTRDeviceControllerOverXPC.m */; };
+		5A6FEC9027B563D900F25F42 /* MTRDeviceControllerOverXPC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5A6FEC8F27B563D900F25F42 /* MTRDeviceControllerOverXPC.mm */; };
 		5A6FEC9227B5669C00F25F42 /* MTRDeviceControllerOverXPC.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A6FEC8D27B5624E00F25F42 /* MTRDeviceControllerOverXPC.h */; };
-		5A6FEC9627B5983000F25F42 /* MTRDeviceControllerXPCConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A6FEC9527B5983000F25F42 /* MTRDeviceControllerXPCConnection.m */; };
-		5A6FEC9827B5C6AF00F25F42 /* MTRDeviceOverXPC.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A6FEC9727B5C6AF00F25F42 /* MTRDeviceOverXPC.m */; };
+		5A6FEC9627B5983000F25F42 /* MTRDeviceControllerXPCConnection.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5A6FEC9527B5983000F25F42 /* MTRDeviceControllerXPCConnection.mm */; };
+		5A6FEC9827B5C6AF00F25F42 /* MTRDeviceOverXPC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5A6FEC9727B5C6AF00F25F42 /* MTRDeviceOverXPC.mm */; };
 		5A6FEC9927B5C88900F25F42 /* MTRDeviceOverXPC.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A6FEC8B27B5609C00F25F42 /* MTRDeviceOverXPC.h */; };
 		5A6FEC9A27B5C89300F25F42 /* MTRDeviceControllerXPCConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A6FEC9427B5976200F25F42 /* MTRDeviceControllerXPCConnection.h */; };
 		5A6FEC9D27B5E48900F25F42 /* MTRXPCProtocolTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A6FEC9C27B5E48800F25F42 /* MTRXPCProtocolTests.m */; };
 		5A7947DE27BEC3F500434CF2 /* MTRXPCListenerSampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A7947DD27BEC3F500434CF2 /* MTRXPCListenerSampleTests.m */; };
-		5A7947E427C0129600434CF2 /* MTRDeviceController+XPC.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A7947E327C0129500434CF2 /* MTRDeviceController+XPC.m */; };
+		5A7947E427C0129600434CF2 /* MTRDeviceController+XPC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5A7947E327C0129500434CF2 /* MTRDeviceController+XPC.mm */; };
 		5A7947E527C0129F00434CF2 /* MTRDeviceController+XPC.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A7947E227C0101200434CF2 /* MTRDeviceController+XPC.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		5A830D6C27CFCF590053B85D /* MTRDeviceControllerOverXPC_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A830D6B27CFCF590053B85D /* MTRDeviceControllerOverXPC_Internal.h */; };
 		5ACDDD7A27CD129700EFD68A /* MTRClusterStateCacheContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5ACDDD7927CD129700EFD68A /* MTRClusterStateCacheContainer.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -105,7 +110,7 @@
 		88EBF8D027FABDD500686BC1 /* MTRDeviceAttestationDelegateBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 88EBF8CD27FABDD500686BC1 /* MTRDeviceAttestationDelegateBridge.h */; };
 		991DC0842475F45400C13860 /* MTRDeviceController.h in Headers */ = {isa = PBXBuildFile; fileRef = 991DC0822475F45400C13860 /* MTRDeviceController.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		991DC0892475F47D00C13860 /* MTRDeviceController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 991DC0872475F47D00C13860 /* MTRDeviceController.mm */; };
-		991DC08B247704DC00C13860 /* MTRLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 991DC08A247704DC00C13860 /* MTRLogging.h */; };
+		991DC08B247704DC00C13860 /* MTRLogging_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 991DC08A247704DC00C13860 /* MTRLogging_Internal.h */; };
 		9956064426420367000C28DE /* MTRSetupPayload_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 9956064326420367000C28DE /* MTRSetupPayload_Internal.h */; };
 		997DED162695343400975E97 /* MTRThreadOperationalDataset.mm in Sources */ = {isa = PBXBuildFile; fileRef = 997DED152695343400975E97 /* MTRThreadOperationalDataset.mm */; };
 		997DED182695344800975E97 /* MTRThreadOperationalDataset.h in Headers */ = {isa = PBXBuildFile; fileRef = 997DED172695344800975E97 /* MTRThreadOperationalDataset.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -113,7 +118,7 @@
 		998F286D26D55E10001846C6 /* MTRKeypair.h in Headers */ = {isa = PBXBuildFile; fileRef = 998F286C26D55E10001846C6 /* MTRKeypair.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		998F286F26D55EC5001846C6 /* MTRP256KeypairBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 998F286E26D55EC5001846C6 /* MTRP256KeypairBridge.h */; };
 		998F287126D56940001846C6 /* MTRP256KeypairBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = 998F287026D56940001846C6 /* MTRP256KeypairBridge.mm */; };
-		99AECC802798A57F00B6355B /* MTRCommissioningParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 99AECC7F2798A57E00B6355B /* MTRCommissioningParameters.m */; };
+		99AECC802798A57F00B6355B /* MTRCommissioningParameters.mm in Sources */ = {isa = PBXBuildFile; fileRef = 99AECC7F2798A57E00B6355B /* MTRCommissioningParameters.mm */; };
 		99C65E10267282F1003402F6 /* MTRControllerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C65E0F267282F1003402F6 /* MTRControllerTests.m */; };
 		99D466E12798936D0089A18F /* MTRCommissioningParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 99D466E02798936D0089A18F /* MTRCommissioningParameters.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		AF1CB86E2874B03B00865A96 /* MTROTAProviderDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = AF1CB86D2874B03B00865A96 /* MTROTAProviderDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -121,7 +126,7 @@
 		AF5F90FF2878D351005503FA /* MTROTAProviderDelegateBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = AF5F90FE2878D351005503FA /* MTROTAProviderDelegateBridge.mm */; };
 		B20252972459E34F00F97062 /* Matter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B202528D2459E34F00F97062 /* Matter.framework */; };
 		B289D4212639C0D300D4E314 /* MTROnboardingPayloadParser.h in Headers */ = {isa = PBXBuildFile; fileRef = B289D41F2639C0D300D4E314 /* MTROnboardingPayloadParser.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		B289D4222639C0D300D4E314 /* MTROnboardingPayloadParser.m in Sources */ = {isa = PBXBuildFile; fileRef = B289D4202639C0D300D4E314 /* MTROnboardingPayloadParser.m */; };
+		B289D4222639C0D300D4E314 /* MTROnboardingPayloadParser.mm in Sources */ = {isa = PBXBuildFile; fileRef = B289D4202639C0D300D4E314 /* MTROnboardingPayloadParser.mm */; };
 		B2E0D7B1245B0B5C003C5B48 /* Matter.h in Headers */ = {isa = PBXBuildFile; fileRef = B2E0D7A8245B0B5C003C5B48 /* Matter.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		B2E0D7B2245B0B5C003C5B48 /* MTRManualSetupPayloadParser.h in Headers */ = {isa = PBXBuildFile; fileRef = B2E0D7A9245B0B5C003C5B48 /* MTRManualSetupPayloadParser.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		B2E0D7B3245B0B5C003C5B48 /* MTRError.mm in Sources */ = {isa = PBXBuildFile; fileRef = B2E0D7AA245B0B5C003C5B48 /* MTRError.mm */; };
@@ -146,6 +151,20 @@
 		};
 /* End PBXContainerItemProxy section */
 
+/* Begin PBXCopyFilesBuildPhase section */
+		3D69868429383083007314E7 /* Copy Logging Preferences */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 8;
+			dstPath = "$(SYSTEM_LIBRARY_DIR)/Preferences/Logging/Subsystems";
+			dstSubfolderSpec = 0;
+			files = (
+				3D69868529383096007314E7 /* com.csa.matter.plist in Copy Logging Preferences */,
+			);
+			name = "Copy Logging Preferences";
+			runOnlyForDeploymentPostprocessing = 1;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
 /* Begin PBXFileReference section */
 		1E748B3828941A44008A1BE8 /* MTRTestOTAProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MTRTestOTAProvider.m; sourceTree = "<group>"; };
 		1E748B3928941A45008A1BE8 /* MTRTestOTAProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTRTestOTAProvider.h; sourceTree = "<group>"; };
@@ -174,10 +193,15 @@
 		2CB7163E252F731E0026E2BB /* MTRDeviceControllerDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTRDeviceControllerDelegate.h; sourceTree = "<group>"; };
 		2FD775542695557E00FF4B12 /* error-mapping.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "error-mapping.cpp"; path = "../../../app/util/error-mapping.cpp"; sourceTree = "<group>"; };
 		3CF134A6289D8AD90017A19E /* MTRCSRInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRCSRInfo.h; sourceTree = "<group>"; };
-		3CF134A8289D8D800017A19E /* MTRCSRInfo.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRCSRInfo.m; sourceTree = "<group>"; };
+		3CF134A8289D8D800017A19E /* MTRCSRInfo.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRCSRInfo.mm; sourceTree = "<group>"; };
 		3CF134AA289D8DF70017A19E /* MTRAttestationInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRAttestationInfo.h; sourceTree = "<group>"; };
-		3CF134AC289D8E570017A19E /* MTRAttestationInfo.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRAttestationInfo.m; sourceTree = "<group>"; };
+		3CF134AC289D8E570017A19E /* MTRAttestationInfo.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRAttestationInfo.mm; sourceTree = "<group>"; };
 		3CF134AE289D90FF0017A19E /* MTRNOCChainIssuer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRNOCChainIssuer.h; sourceTree = "<group>"; };
+		3D69868029382EF4007314E7 /* com.csa.matter.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = com.csa.matter.plist; sourceTree = "<group>"; };
+		3DECCB6D29347D2C00585AEC /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.1.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; };
+		3DECCB6F2934AC1C00585AEC /* MTRLogging.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRLogging.h; sourceTree = "<group>"; };
+		3DECCB712934AFE200585AEC /* MTRLogging.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRLogging.mm; sourceTree = "<group>"; };
+		3DECCB732934C21B00585AEC /* MTRDefines.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDefines.h; sourceTree = "<group>"; };
 		5112F605287CD2C100B827E7 /* privilege-storage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "privilege-storage.cpp"; path = "../../../app/util/privilege-storage.cpp"; sourceTree = "<group>"; };
 		511913F928C100EF009235E9 /* MTRBaseSubscriptionCallback.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRBaseSubscriptionCallback.mm; sourceTree = "<group>"; };
 		511913FA28C100EF009235E9 /* MTRBaseSubscriptionCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTRBaseSubscriptionCallback.h; sourceTree = "<group>"; };
@@ -191,8 +215,8 @@
 		5143041F2914CED9004DC7FE /* generic-callback-stubs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "generic-callback-stubs.cpp"; path = "../../../app/util/generic-callback-stubs.cpp"; sourceTree = "<group>"; };
 		51431AF827D2973E008A7943 /* MTRIMDispatch.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRIMDispatch.mm; sourceTree = "<group>"; };
 		51431AFA27D29CA4008A7943 /* ota-provider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "ota-provider.cpp"; path = "../../../app/clusters/ota-provider/ota-provider.cpp"; sourceTree = "<group>"; };
-		515C1C6D284F9FFB00A48F0C /* MTRMemory.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRMemory.mm; sourceTree = "<group>"; };
-		515C1C6E284F9FFB00A48F0C /* MTRMemory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTRMemory.h; sourceTree = "<group>"; };
+		515C1C6D284F9FFB00A48F0C /* MTRFramework.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRFramework.mm; sourceTree = "<group>"; };
+		515C1C6E284F9FFB00A48F0C /* MTRFramework.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTRFramework.h; sourceTree = "<group>"; };
 		51669AEF2913204400F4AA36 /* MTRBackwardsCompatTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MTRBackwardsCompatTests.m; sourceTree = "<group>"; };
 		517BF3EE282B62B800A8B7DB /* MTRCertificates.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTRCertificates.h; sourceTree = "<group>"; };
 		517BF3EF282B62B800A8B7DB /* MTRCertificates.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRCertificates.mm; sourceTree = "<group>"; };
@@ -213,14 +237,14 @@
 		5A60370727EA1FF60020DB79 /* MTRClusterStateCacheContainer+XPC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MTRClusterStateCacheContainer+XPC.h"; sourceTree = "<group>"; };
 		5A6FEC8B27B5609C00F25F42 /* MTRDeviceOverXPC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDeviceOverXPC.h; sourceTree = "<group>"; };
 		5A6FEC8D27B5624E00F25F42 /* MTRDeviceControllerOverXPC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDeviceControllerOverXPC.h; sourceTree = "<group>"; };
-		5A6FEC8F27B563D900F25F42 /* MTRDeviceControllerOverXPC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRDeviceControllerOverXPC.m; sourceTree = "<group>"; };
+		5A6FEC8F27B563D900F25F42 /* MTRDeviceControllerOverXPC.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRDeviceControllerOverXPC.mm; sourceTree = "<group>"; };
 		5A6FEC9427B5976200F25F42 /* MTRDeviceControllerXPCConnection.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDeviceControllerXPCConnection.h; sourceTree = "<group>"; };
-		5A6FEC9527B5983000F25F42 /* MTRDeviceControllerXPCConnection.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRDeviceControllerXPCConnection.m; sourceTree = "<group>"; };
-		5A6FEC9727B5C6AF00F25F42 /* MTRDeviceOverXPC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRDeviceOverXPC.m; sourceTree = "<group>"; };
+		5A6FEC9527B5983000F25F42 /* MTRDeviceControllerXPCConnection.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRDeviceControllerXPCConnection.mm; sourceTree = "<group>"; };
+		5A6FEC9727B5C6AF00F25F42 /* MTRDeviceOverXPC.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRDeviceOverXPC.mm; sourceTree = "<group>"; };
 		5A6FEC9C27B5E48800F25F42 /* MTRXPCProtocolTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRXPCProtocolTests.m; sourceTree = "<group>"; };
 		5A7947DD27BEC3F500434CF2 /* MTRXPCListenerSampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRXPCListenerSampleTests.m; sourceTree = "<group>"; };
 		5A7947E227C0101200434CF2 /* MTRDeviceController+XPC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MTRDeviceController+XPC.h"; sourceTree = "<group>"; };
-		5A7947E327C0129500434CF2 /* MTRDeviceController+XPC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "MTRDeviceController+XPC.m"; sourceTree = "<group>"; };
+		5A7947E327C0129500434CF2 /* MTRDeviceController+XPC.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = "MTRDeviceController+XPC.mm"; sourceTree = "<group>"; };
 		5A830D6B27CFCF590053B85D /* MTRDeviceControllerOverXPC_Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDeviceControllerOverXPC_Internal.h; sourceTree = "<group>"; };
 		5ACDDD7927CD129700EFD68A /* MTRClusterStateCacheContainer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRClusterStateCacheContainer.h; sourceTree = "<group>"; };
 		5ACDDD7B27CD14AF00EFD68A /* MTRClusterStateCacheContainer_Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRClusterStateCacheContainer_Internal.h; sourceTree = "<group>"; };
@@ -246,7 +270,7 @@
 		88EBF8CD27FABDD500686BC1 /* MTRDeviceAttestationDelegateBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTRDeviceAttestationDelegateBridge.h; sourceTree = "<group>"; };
 		991DC0822475F45400C13860 /* MTRDeviceController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRDeviceController.h; sourceTree = "<group>"; };
 		991DC0872475F47D00C13860 /* MTRDeviceController.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRDeviceController.mm; sourceTree = "<group>"; };
-		991DC08A247704DC00C13860 /* MTRLogging.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRLogging.h; sourceTree = "<group>"; };
+		991DC08A247704DC00C13860 /* MTRLogging_Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRLogging_Internal.h; sourceTree = "<group>"; };
 		9956064326420367000C28DE /* MTRSetupPayload_Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRSetupPayload_Internal.h; sourceTree = "<group>"; };
 		997DED152695343400975E97 /* MTRThreadOperationalDataset.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRThreadOperationalDataset.mm; sourceTree = "<group>"; };
 		997DED172695344800975E97 /* MTRThreadOperationalDataset.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRThreadOperationalDataset.h; sourceTree = "<group>"; };
@@ -254,7 +278,7 @@
 		998F286C26D55E10001846C6 /* MTRKeypair.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRKeypair.h; sourceTree = "<group>"; };
 		998F286E26D55EC5001846C6 /* MTRP256KeypairBridge.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRP256KeypairBridge.h; sourceTree = "<group>"; };
 		998F287026D56940001846C6 /* MTRP256KeypairBridge.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRP256KeypairBridge.mm; sourceTree = "<group>"; };
-		99AECC7F2798A57E00B6355B /* MTRCommissioningParameters.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRCommissioningParameters.m; sourceTree = "<group>"; };
+		99AECC7F2798A57E00B6355B /* MTRCommissioningParameters.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRCommissioningParameters.mm; sourceTree = "<group>"; };
 		99C65E0F267282F1003402F6 /* MTRControllerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTRControllerTests.m; sourceTree = "<group>"; };
 		99D466E02798936D0089A18F /* MTRCommissioningParameters.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTRCommissioningParameters.h; sourceTree = "<group>"; };
 		AF1CB86D2874B03B00865A96 /* MTROTAProviderDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTROTAProviderDelegate.h; sourceTree = "<group>"; };
@@ -265,7 +289,7 @@
 		B20252962459E34F00F97062 /* MatterTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MatterTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 		B202529D2459E34F00F97062 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		B289D41F2639C0D300D4E314 /* MTROnboardingPayloadParser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTROnboardingPayloadParser.h; sourceTree = "<group>"; };
-		B289D4202639C0D300D4E314 /* MTROnboardingPayloadParser.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTROnboardingPayloadParser.m; sourceTree = "<group>"; };
+		B289D4202639C0D300D4E314 /* MTROnboardingPayloadParser.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MTROnboardingPayloadParser.mm; sourceTree = "<group>"; };
 		B2E0D7A8245B0B5C003C5B48 /* Matter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Matter.h; sourceTree = "<group>"; };
 		B2E0D7A9245B0B5C003C5B48 /* MTRManualSetupPayloadParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTRManualSetupPayloadParser.h; sourceTree = "<group>"; };
 		B2E0D7AA245B0B5C003C5B48 /* MTRError.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRError.mm; sourceTree = "<group>"; };
@@ -289,6 +313,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				3DECCB6E29347D2D00585AEC /* Security.framework in Frameworks */,
 				BA09EB43247477BA00605257 /* libCHIP.a in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -336,6 +361,22 @@
 			name = CHIPGeneratedFiles;
 			sourceTree = "<group>";
 		};
+		3D69867E29382E58007314E7 /* Resources */ = {
+			isa = PBXGroup;
+			children = (
+				3D69867F29382EAD007314E7 /* Logging */,
+			);
+			path = Resources;
+			sourceTree = "<group>";
+		};
+		3D69867F29382EAD007314E7 /* Logging */ = {
+			isa = PBXGroup;
+			children = (
+				3D69868029382EF4007314E7 /* com.csa.matter.plist */,
+			);
+			path = Logging;
+			sourceTree = "<group>";
+		};
 		B20252832459E34F00F97062 = {
 			isa = PBXGroup;
 			children = (
@@ -359,6 +400,7 @@
 		B202528F2459E34F00F97062 /* CHIP */ = {
 			isa = PBXGroup;
 			children = (
+				3D69867E29382E58007314E7 /* Resources */,
 				1EDCE543289049A100E41EC9 /* MTROTAHeader.h */,
 				1EDCE544289049A100E41EC9 /* MTROTAHeader.mm */,
 				27A53C1527FBC6920053F131 /* MTRAttestationTrustStoreBridge.h */,
@@ -385,6 +427,7 @@
 				2C222ADE255C811800E446B9 /* MTRBaseDevice_Internal.h */,
 				2C222ACE255C620600E446B9 /* MTRBaseDevice.h */,
 				2C222ACF255C620600E446B9 /* MTRBaseDevice.mm */,
+				3DECCB732934C21B00585AEC /* MTRDefines.h */,
 				7596A84A287636C1004DAE0E /* MTRDevice_Internal.h */,
 				7596A84228762729004DAE0E /* MTRDevice.h */,
 				7596A84328762729004DAE0E /* MTRDevice.mm */,
@@ -401,7 +444,7 @@
 				2C8C8FBD253E0C2100797F05 /* MTRPersistentStorageDelegateBridge.h */,
 				2C8C8FBF253E0C2100797F05 /* MTRPersistentStorageDelegateBridge.mm */,
 				99D466E02798936D0089A18F /* MTRCommissioningParameters.h */,
-				99AECC7F2798A57E00B6355B /* MTRCommissioningParameters.m */,
+				99AECC7F2798A57E00B6355B /* MTRCommissioningParameters.mm */,
 				2CB7163E252F731E0026E2BB /* MTRDeviceControllerDelegate.h */,
 				2CB71638252E8A7B0026E2BB /* MTRDeviceControllerDelegateBridge.h */,
 				2CB71639252E8A7B0026E2BB /* MTRDeviceControllerDelegateBridge.mm */,
@@ -412,9 +455,11 @@
 				B2E0D7AB245B0B5C003C5B48 /* MTRError_Internal.h */,
 				5129BCFC26A9EE3300122DDF /* MTRError.h */,
 				B2E0D7AA245B0B5C003C5B48 /* MTRError.mm */,
-				991DC08A247704DC00C13860 /* MTRLogging.h */,
+				3DECCB6F2934AC1C00585AEC /* MTRLogging.h */,
+				991DC08A247704DC00C13860 /* MTRLogging_Internal.h */,
+				3DECCB712934AFE200585AEC /* MTRLogging.mm */,
 				B289D41F2639C0D300D4E314 /* MTROnboardingPayloadParser.h */,
-				B289D4202639C0D300D4E314 /* MTROnboardingPayloadParser.m */,
+				B289D4202639C0D300D4E314 /* MTROnboardingPayloadParser.mm */,
 				B2E0D7A9245B0B5C003C5B48 /* MTRManualSetupPayloadParser.h */,
 				B2E0D7AD245B0B5C003C5B48 /* MTRManualSetupPayloadParser.mm */,
 				B2E0D7AC245B0B5C003C5B48 /* MTRQRCodeSetupPayloadParser.h */,
@@ -434,24 +479,24 @@
 				5A7947E227C0101200434CF2 /* MTRDeviceController+XPC.h */,
 				517BF3EE282B62B800A8B7DB /* MTRCertificates.h */,
 				517BF3EF282B62B800A8B7DB /* MTRCertificates.mm */,
-				515C1C6E284F9FFB00A48F0C /* MTRMemory.h */,
-				515C1C6D284F9FFB00A48F0C /* MTRMemory.mm */,
-				5A7947E327C0129500434CF2 /* MTRDeviceController+XPC.m */,
+				515C1C6E284F9FFB00A48F0C /* MTRFramework.h */,
+				515C1C6D284F9FFB00A48F0C /* MTRFramework.mm */,
+				5A7947E327C0129500434CF2 /* MTRDeviceController+XPC.mm */,
 				B20252912459E34F00F97062 /* Info.plist */,
 				998F286C26D55E10001846C6 /* MTRKeypair.h */,
 				998F286E26D55EC5001846C6 /* MTRP256KeypairBridge.h */,
 				998F287026D56940001846C6 /* MTRP256KeypairBridge.mm */,
 				5A6FEC8B27B5609C00F25F42 /* MTRDeviceOverXPC.h */,
-				5A6FEC9727B5C6AF00F25F42 /* MTRDeviceOverXPC.m */,
+				5A6FEC9727B5C6AF00F25F42 /* MTRDeviceOverXPC.mm */,
 				5A6FEC8D27B5624E00F25F42 /* MTRDeviceControllerOverXPC.h */,
 				5A830D6B27CFCF590053B85D /* MTRDeviceControllerOverXPC_Internal.h */,
-				5A6FEC8F27B563D900F25F42 /* MTRDeviceControllerOverXPC.m */,
+				5A6FEC8F27B563D900F25F42 /* MTRDeviceControllerOverXPC.mm */,
 				5A6FEC9427B5976200F25F42 /* MTRDeviceControllerXPCConnection.h */,
-				5A6FEC9527B5983000F25F42 /* MTRDeviceControllerXPCConnection.m */,
+				5A6FEC9527B5983000F25F42 /* MTRDeviceControllerXPCConnection.mm */,
 				3CF134A6289D8AD90017A19E /* MTRCSRInfo.h */,
-				3CF134A8289D8D800017A19E /* MTRCSRInfo.m */,
+				3CF134A8289D8D800017A19E /* MTRCSRInfo.mm */,
 				3CF134AA289D8DF70017A19E /* MTRAttestationInfo.h */,
-				3CF134AC289D8E570017A19E /* MTRAttestationInfo.m */,
+				3CF134AC289D8E570017A19E /* MTRAttestationInfo.mm */,
 				3CF134AE289D90FF0017A19E /* MTRNOCChainIssuer.h */,
 				511913FA28C100EF009235E9 /* MTRBaseSubscriptionCallback.h */,
 				511913F928C100EF009235E9 /* MTRBaseSubscriptionCallback.mm */,
@@ -488,6 +533,7 @@
 		BA09EB3E2474762900605257 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				3DECCB6D29347D2C00585AEC /* Security.framework */,
 				BA09EB3F2474762900605257 /* libCHIP.a */,
 			);
 			name = Frameworks;
@@ -514,7 +560,7 @@
 				7596A85728788557004DAE0E /* MTRClusters.h in Headers */,
 				99D466E12798936D0089A18F /* MTRCommissioningParameters.h in Headers */,
 				5136661528067D550025EDAE /* MTRDeviceControllerFactory_Internal.h in Headers */,
-				515C1C70284F9FFB00A48F0C /* MTRMemory.h in Headers */,
+				515C1C70284F9FFB00A48F0C /* MTRFramework.h in Headers */,
 				7534F12928BFF20300390851 /* MTRDeviceAttestationDelegate_Internal.h in Headers */,
 				D4772A46285AE98400383630 /* MTRClusterConstants.h in Headers */,
 				B289D4212639C0D300D4E314 /* MTROnboardingPayloadParser.h in Headers */,
@@ -551,15 +597,17 @@
 				AF1CB8702874B04C00865A96 /* MTROTAProviderDelegateBridge.h in Headers */,
 				B2E0D7B5245B0B5C003C5B48 /* MTRQRCodeSetupPayloadParser.h in Headers */,
 				1EC4CE6425CC276600D7304F /* MTRBaseClusters.h in Headers */,
+				3DECCB742934C21B00585AEC /* MTRDefines.h in Headers */,
 				2C5EEEF6268A85C400CAE3D3 /* MTRDeviceConnectionBridge.h in Headers */,
 				2C8C8FC0253E0C2100797F05 /* MTRPersistentStorageDelegateBridge.h in Headers */,
 				51E4D121291D0EB400C8C535 /* MTRBaseClustersCpp_Internal.h in Headers */,
 				51E51FC0282AD37A00FC978D /* MTRDeviceControllerStartupParams_Internal.h in Headers */,
+				3DECCB702934AECD00585AEC /* MTRLogging.h in Headers */,
 				998F286F26D55EC5001846C6 /* MTRP256KeypairBridge.h in Headers */,
 				2C222ADF255C811800E446B9 /* MTRBaseDevice_Internal.h in Headers */,
 				511913FC28C100EF009235E9 /* MTRBaseSubscriptionCallback.h in Headers */,
 				51E0310027EA20D20083DC9C /* MTRControllerAccessControl.h in Headers */,
-				991DC08B247704DC00C13860 /* MTRLogging.h in Headers */,
+				991DC08B247704DC00C13860 /* MTRLogging_Internal.h in Headers */,
 				7596A84828762783004DAE0E /* MTRAsyncCallbackWorkQueue.h in Headers */,
 				5A7947E527C0129F00434CF2 /* MTRDeviceController+XPC.h in Headers */,
 				B2E0D7B4245B0B5C003C5B48 /* MTRError_Internal.h in Headers */,
@@ -579,6 +627,7 @@
 				B20252892459E34F00F97062 /* Sources */,
 				B202528A2459E34F00F97062 /* Frameworks */,
 				B202528B2459E34F00F97062 /* Resources */,
+				3D69868429383083007314E7 /* Copy Logging Preferences */,
 			);
 			buildRules = (
 			);
@@ -689,10 +738,10 @@
 			buildActionMask = 2147483647;
 			files = (
 				2C8C8FC2253E0C2100797F05 /* MTRPersistentStorageDelegateBridge.mm in Sources */,
-				99AECC802798A57F00B6355B /* MTRCommissioningParameters.m in Sources */,
+				99AECC802798A57F00B6355B /* MTRCommissioningParameters.mm in Sources */,
 				2CB7163C252E8A7C0026E2BB /* MTRDeviceControllerDelegateBridge.mm in Sources */,
 				997DED162695343400975E97 /* MTRThreadOperationalDataset.mm in Sources */,
-				515C1C6F284F9FFB00A48F0C /* MTRMemory.mm in Sources */,
+				515C1C6F284F9FFB00A48F0C /* MTRFramework.mm in Sources */,
 				27A53C1827FBC6920053F131 /* MTRAttestationTrustStoreBridge.mm in Sources */,
 				998F287126D56940001846C6 /* MTRP256KeypairBridge.mm in Sources */,
 				5136661428067D550025EDAE /* MTRDeviceControllerFactory.mm in Sources */,
@@ -703,7 +752,7 @@
 				51B22C262740CB32008D5055 /* MTRStructsObjc.mm in Sources */,
 				2C222AD1255C620600E446B9 /* MTRBaseDevice.mm in Sources */,
 				1EC3238D271999E2002A8BF0 /* cluster-objects.cpp in Sources */,
-				3CF134A9289D8D800017A19E /* MTRCSRInfo.m in Sources */,
+				3CF134A9289D8D800017A19E /* MTRCSRInfo.mm in Sources */,
 				991DC0892475F47D00C13860 /* MTRDeviceController.mm in Sources */,
 				B2E0D7B7245B0B5C003C5B48 /* MTRQRCodeSetupPayloadParser.mm in Sources */,
 				514304202914CED9004DC7FE /* generic-callback-stubs.cpp in Sources */,
@@ -715,16 +764,16 @@
 				51E51FC1282AD37A00FC978D /* MTRDeviceControllerStartupParams.mm in Sources */,
 				1ED276E026C57CF000547A89 /* MTRCallbackBridge.mm in Sources */,
 				517BF3F1282B62B800A8B7DB /* MTRCertificates.mm in Sources */,
-				5A6FEC9627B5983000F25F42 /* MTRDeviceControllerXPCConnection.m in Sources */,
+				5A6FEC9627B5983000F25F42 /* MTRDeviceControllerXPCConnection.mm in Sources */,
 				511913FB28C100EF009235E9 /* MTRBaseSubscriptionCallback.mm in Sources */,
 				5ACDDD7D27CD16D200EFD68A /* MTRClusterStateCacheContainer.mm in Sources */,
 				513DDB8A2761F6F900DAA01A /* MTRAttributeTLVValueDecoder.mm in Sources */,
 				2FD775552695557E00FF4B12 /* error-mapping.cpp in Sources */,
-				5A7947E427C0129600434CF2 /* MTRDeviceController+XPC.m in Sources */,
-				5A6FEC9027B563D900F25F42 /* MTRDeviceControllerOverXPC.m in Sources */,
-				B289D4222639C0D300D4E314 /* MTROnboardingPayloadParser.m in Sources */,
+				5A7947E427C0129600434CF2 /* MTRDeviceController+XPC.mm in Sources */,
+				5A6FEC9027B563D900F25F42 /* MTRDeviceControllerOverXPC.mm in Sources */,
+				B289D4222639C0D300D4E314 /* MTROnboardingPayloadParser.mm in Sources */,
 				5112F606287CD2C100B827E7 /* privilege-storage.cpp in Sources */,
-				3CF134AD289D8E570017A19E /* MTRAttestationInfo.m in Sources */,
+				3CF134AD289D8E570017A19E /* MTRAttestationInfo.mm in Sources */,
 				2C1B027A2641DB4E00780EF1 /* MTROperationalCredentialsDelegate.mm in Sources */,
 				7560FD1C27FBBD3F005E85B3 /* MTREventTLVValueDecoder.mm in Sources */,
 				7596A84928762783004DAE0E /* MTRAsyncCallbackWorkQueue.mm in Sources */,
@@ -732,9 +781,10 @@
 				B2E0D7B6245B0B5C003C5B48 /* MTRManualSetupPayloadParser.mm in Sources */,
 				7596A85528788557004DAE0E /* MTRClusters.mm in Sources */,
 				88EBF8CF27FABDD500686BC1 /* MTRDeviceAttestationDelegateBridge.mm in Sources */,
-				5A6FEC9827B5C6AF00F25F42 /* MTRDeviceOverXPC.m in Sources */,
+				5A6FEC9827B5C6AF00F25F42 /* MTRDeviceOverXPC.mm in Sources */,
 				51431AF927D2973E008A7943 /* MTRIMDispatch.mm in Sources */,
 				51431AFB27D29CA4008A7943 /* ota-provider.cpp in Sources */,
+				3DECCB722934AFE200585AEC /* MTRLogging.mm in Sources */,
 				7596A84528762729004DAE0E /* MTRDevice.mm in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -826,6 +876,12 @@
 				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
 				MTL_FAST_MATH = YES;
 				ONLY_ACTIVE_ARCH = YES;
+				OTHER_CFLAGS = (
+					"-Wformat",
+					"-Wformat-nonliteral",
+					"-Wformat-security",
+					"-Wconversion",
+				);
 				OTHER_LDFLAGS = "-Wl,-unexported_symbol,\"__Z*\"";
 				SDKROOT = iphoneos;
 				SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos appletvos appletvsimulator watchos watchsimulator";
@@ -872,11 +928,6 @@
 				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
 				IPHONEOS_DEPLOYMENT_TARGET = 13.4;
 				LIBRARY_SEARCH_PATHS = "$(TEMP_DIR)/out/lib";
-				OTHER_CFLAGS = (
-					"-Wformat",
-					"-Wformat-nonliteral",
-					"-Wformat-security",
-				);
 				OTHER_LDFLAGS = "";
 				"OTHER_LDFLAGS[sdk=*]" = (
 					"-framework",
@@ -975,6 +1026,12 @@
 				MTL_ENABLE_DEBUG_INFO = NO;
 				MTL_FAST_MATH = YES;
 				ONLY_ACTIVE_ARCH = YES;
+				OTHER_CFLAGS = (
+					"-Wformat",
+					"-Wformat-nonliteral",
+					"-Wformat-security",
+					"-Wconversion",
+				);
 				OTHER_LDFLAGS = "-Wl,-unexported_symbol,\"__Z*\"";
 				SDKROOT = iphoneos;
 				SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos appletvos appletvsimulator watchos watchsimulator";
@@ -1022,11 +1079,6 @@
 				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
 				IPHONEOS_DEPLOYMENT_TARGET = 13.4;
 				LIBRARY_SEARCH_PATHS = "$(TEMP_DIR)/out/lib";
-				OTHER_CFLAGS = (
-					"-Wformat",
-					"-Wformat-nonliteral",
-					"-Wformat-security",
-				);
 				OTHER_LDFLAGS = "";
 				"OTHER_LDFLAGS[sdk=*]" = (
 					"-framework",
diff --git a/src/lib/core/CHIPConfig.h b/src/lib/core/CHIPConfig.h
index b84fa02..aaa28d0 100644
--- a/src/lib/core/CHIPConfig.h
+++ b/src/lib/core/CHIPConfig.h
@@ -375,6 +375,16 @@
 #endif // CHIP_AUTOMATION_LOGGING
 
 /**
+ *  @def CHIP_LOG_FILTERING
+ *
+ *  @brief
+ *    If asserted (1), enable runtime log level configuration.
+ */
+#ifndef CHIP_LOG_FILTERING
+#define CHIP_LOG_FILTERING 1
+#endif
+
+/**
  * CHIP_CONFIG_LOG_MESSAGE_MAX_SIZE
  *
  * The maximum size (in bytes) of a log message
diff --git a/src/lib/support/BUILD.gn b/src/lib/support/BUILD.gn
index 2f86189..d006b42 100644
--- a/src/lib/support/BUILD.gn
+++ b/src/lib/support/BUILD.gn
@@ -66,8 +66,11 @@
   sources = [ "logging/Constants.h" ]
 }
 
-source_set("enforce_format") {
-  sources = [ "EnforceFormat.h" ]
+source_set("attributes") {
+  sources = [
+    "DLLUtil.h",
+    "EnforceFormat.h",
+  ]
 }
 
 source_set("chip_version_header") {
@@ -165,8 +168,8 @@
   cflags = [ "-Wconversion" ]
 
   public_deps = [
+    ":attributes",
     ":chip_version_header",
-    ":enforce_format",
     ":logging_constants",
     "${chip_root}/src/lib/core:chip_config_header",
     "${chip_root}/src/platform:platform_buildconfig",
@@ -188,6 +191,10 @@
     public_deps += [ "${chip_root}/src/platform/logging:android" ]
   }
 
+  if (current_os == "mac" || current_os == "ios") {
+    public_deps += [ "${chip_root}/src/platform/Darwin:logging" ]
+  }
+
   public_configs = [
     "${chip_root}/src:includes",
     "${chip_root}/src/system:system_config",
diff --git a/src/lib/support/CodeUtils.h b/src/lib/support/CodeUtils.h
index ae61f52..3b754e0 100644
--- a/src/lib/support/CodeUtils.h
+++ b/src/lib/support/CodeUtils.h
@@ -254,11 +254,12 @@
  *
  *  Example usage:
  *
- * @code
+ *  @code
  *    VerifyOrReturn(param != nullptr, LogError("param is nullptr"));
  *  @endcode
  *
  *  @param[in]  expr        A Boolean expression to be evaluated.
+ *  @param[in]  ...         Statements to execute before returning. Optional.
  */
 #define VerifyOrReturn(expr, ...)                                                                                                  \
     do                                                                                                                             \
@@ -271,7 +272,7 @@
     } while (false)
 
 /**
- *  @def VerifyOrReturnError(expr, code)
+ *  @def VerifyOrReturnError(expr, code, ...)
  *
  *  @brief
  *    Returns a specified error code if expression evaluates to false
@@ -284,11 +285,12 @@
  *
  *  @param[in]  expr        A Boolean expression to be evaluated.
  *  @param[in]  code        A value to return if @a expr is false.
+ *  @param[in]  ...         Statements to execute before returning. Optional.
  */
-#define VerifyOrReturnError(expr, code) VerifyOrReturnValue(expr, code)
+#define VerifyOrReturnError(expr, code, ...) VerifyOrReturnValue(expr, code, ##__VA_ARGS__)
 
 /**
- *  @def VerifyOrReturnValue(expr, value)
+ *  @def VerifyOrReturnValue(expr, value, ...)
  *
  *  @brief
  *    Returns a specified value if expression evaluates to false
@@ -301,12 +303,14 @@
  *
  *  @param[in]  expr        A Boolean expression to be evaluated.
  *  @param[in]  value       A value to return if @a expr is false.
+ *  @param[in]  ...         Statements to execute before returning. Optional.
  */
-#define VerifyOrReturnValue(expr, value)                                                                                           \
+#define VerifyOrReturnValue(expr, value, ...)                                                                                      \
     do                                                                                                                             \
     {                                                                                                                              \
         if (!(expr))                                                                                                               \
         {                                                                                                                          \
+            __VA_ARGS__;                                                                                                           \
             return (value);                                                                                                        \
         }                                                                                                                          \
     } while (false)
@@ -468,9 +472,7 @@
  *  }
  *  @endcode
  *
- *  @param[in]  ...         An optional expression or block to execute
- *                          when the assertion fails.
- *
+ *  @param[in]  ...         Statements to execute. Optional.
  */
 // clang-format off
 #define ExitNow(...)                                                   \
@@ -622,6 +624,7 @@
  *  @endcode
  *
  *  @param[in]  expr        A Boolean expression to be evaluated.
+ *  @param[in]  ...         Statements to execute.
  */
 #define VerifyOrDo(expr, ...)                                                                                                      \
     do                                                                                                                             \
diff --git a/src/lib/support/logging/CHIPLogging.cpp b/src/lib/support/logging/CHIPLogging.cpp
index a374893..ca04f60 100644
--- a/src/lib/support/logging/CHIPLogging.cpp
+++ b/src/lib/support/logging/CHIPLogging.cpp
@@ -28,9 +28,10 @@
 #include <lib/core/CHIPCore.h>
 #include <lib/support/CHIPMem.h>
 #include <lib/support/CodeUtils.h>
-#include <lib/support/DLLUtil.h>
 #include <lib/support/Span.h>
 
+#include <platform/logging/LogV.h>
+
 #include <stdarg.h>
 #include <stdio.h>
 #include <string.h>
@@ -69,70 +70,56 @@
 std::atomic<LogRedirectCallback_t> sLogRedirectCallback{ nullptr };
 
 /*
- * Array of strings containing the names for each of the chip log
- * modules.
+ * Array of strings containing the names for each of the chip log modules.
  *
- * NOTE: The names must be in the order defined in the LogModule
- *       enumeration. Each name must be a fixed number of characters
- *       long (chip::Logging::kMaxModuleNameLen) padded with nulls as
- *       necessary.
- *
+ * NOTE: The names must be in the order defined in the LogModule enumeration.
  */
-const char ModuleNames[] = "-\0\0" // None
-                           "IN\0"  // Inet
-                           "BLE"   // BLE
-                           "ML\0"  // MessageLayer
-                           "SM\0"  // SecurityManager
-                           "EM\0"  // ExchangeManager
-                           "TLV"   // TLV
-                           "ASN"   // ASN1
-                           "CR\0"  // Crypto
-                           "CTL"   // Controller
-                           "AL\0"  // Alarm
-                           "SC\0"  // SecureChannel
-                           "BDX"   // BulkDataTransfer
-                           "DMG"   // DataManagement
-                           "DC\0"  // DeviceControl
-                           "DD\0"  // DeviceDescription
-                           "ECH"   // Echo
-                           "FP\0"  // FabricProvisioning
-                           "NP\0"  // NetworkProvisioning
-                           "SD\0"  // ServiceDirectory
-                           "SP\0"  // ServiceProvisioning
-                           "SWU"   // SoftwareUpdate
-                           "FS\0"  // FailSafe
-                           "TS\0"  // TimeService
-                           "HB\0"  // Heartbeat
-                           "CSL"   // chipSystemLayer
-                           "EVL"   // Event Logging
-                           "SPT"   // Support
-                           "TOO"   // chipTool
-                           "ZCL"   // Zcl
-                           "SH\0"  // Shell
-                           "DL\0"  // DeviceLayer
-                           "SPL"   // SetupPayload
-                           "SVR"   // AppServer
-                           "DIS"   // Discovery
-                           "IM\0"  // InteractionModel
-                           "TST"   // Test
-                           "OSS"   // OperationalSessionSetup
-                           "ATM"   // Automation
-                           "CSM"   // CASESessionManager
-    ;
+static const char ModuleNames[kLogModule_Max][kMaxModuleNameLen + 1] = {
+    "-",   // None
+    "IN",  // Inet
+    "BLE", // BLE
+    "ML",  // MessageLayer
+    "SM",  // SecurityManager
+    "EM",  // ExchangeManager
+    "TLV", // TLV
+    "ASN", // ASN1
+    "CR",  // Crypto
+    "CTL", // Controller
+    "AL",  // Alarm
+    "SC",  // SecureChannel
+    "BDX", // BulkDataTransfer
+    "DMG", // DataManagement
+    "DC",  // DeviceControl
+    "DD",  // DeviceDescription
+    "ECH", // Echo
+    "FP",  // FabricProvisioning
+    "NP",  // NetworkProvisioning
+    "SD",  // ServiceDirectory
+    "SP",  // ServiceProvisioning
+    "SWU", // SoftwareUpdate
+    "FS",  // FailSafe
+    "TS",  // TimeService
+    "HB",  // Heartbeat
+    "CSL", // chipSystemLayer
+    "EVL", // Event Logging
+    "SPT", // Support
+    "TOO", // chipTool
+    "ZCL", // Zcl
+    "SH",  // Shell
+    "DL",  // DeviceLayer
+    "SPL", // SetupPayload
+    "SVR", // AppServer
+    "DIS", // Discovery
+    "IM",  // InteractionModel
+    "TST", // Test
+    "OSS", // OperationalSessionSetup
+    "ATM", // Automation
+    "CSM", // CASESessionManager
+};
 
-#define ModuleNamesCount ((sizeof(ModuleNames) - 1) / chip::Logging::kMaxModuleNameLen)
-
-void GetModuleName(char (&buf)[chip::Logging::kMaxModuleNameLen + 1], uint8_t module)
+static char const * GetModuleName(LogModule module)
 {
-
-    const char * module_name = ModuleNames;
-    if (module < ModuleNamesCount)
-    {
-        module_name += module * chip::Logging::kMaxModuleNameLen;
-    }
-
-    memcpy(buf, module_name, chip::Logging::kMaxModuleNameLen);
-    buf[chip::Logging::kMaxModuleNameLen] = 0; // ensure null termination
+    return ModuleNames[(module < kLogModule_Max) ? module : kLogModule_NotSpecified];
 }
 
 } // namespace
@@ -164,7 +151,7 @@
  *                      correspond to the format specifiers in @a msg.
  *
  */
-DLL_EXPORT void Log(uint8_t module, uint8_t category, const char * msg, ...)
+void Log(uint8_t module, uint8_t category, const char * msg, ...)
 {
 
     va_list v;
@@ -173,7 +160,7 @@
     va_end(v);
 }
 
-DLL_EXPORT void LogByteSpan(uint8_t module, uint8_t category, const chip::ByteSpan & span)
+void LogByteSpan(uint8_t module, uint8_t category, const chip::ByteSpan & span)
 {
     // Maximum number of characters needed to print 8 byte buffer including formatting (0x)
     // 8 bytes * (2 nibbles per byte + 4 character for ", 0x") + null termination.
@@ -206,16 +193,8 @@
 
 void LogV(uint8_t module, uint8_t category, const char * msg, va_list args)
 {
-    if (!IsCategoryEnabled(category))
-    {
-        return;
-    }
-
-    char moduleName[chip::Logging::kMaxModuleNameLen + 1];
-    GetModuleName(moduleName, module);
-
+    const char * moduleName        = GetModuleName(static_cast<LogModule>(module));
     LogRedirectCallback_t redirect = sLogRedirectCallback.load();
-
     if (redirect != nullptr)
     {
         redirect(moduleName, category, msg, args);
@@ -228,41 +207,38 @@
 
 #if CHIP_LOG_FILTERING
 uint8_t gLogFilter = kLogCategory_Max;
-DLL_EXPORT bool IsCategoryEnabled(uint8_t category)
-{
-    return (category <= gLogFilter);
-}
 
-DLL_EXPORT uint8_t GetLogFilter()
+uint8_t GetLogFilter()
 {
     return gLogFilter;
 }
 
-DLL_EXPORT void SetLogFilter(uint8_t category)
+void SetLogFilter(uint8_t category)
 {
     gLogFilter = category;
 }
 
 #else  // CHIP_LOG_FILTERING
 
-DLL_EXPORT bool IsCategoryEnabled(uint8_t category)
-{
-    (void) category;
-    return true;
-}
-
-DLL_EXPORT uint8_t GetLogFilter()
+uint8_t GetLogFilter()
 {
     return kLogCategory_Max;
 }
 
-DLL_EXPORT void SetLogFilter(uint8_t category)
+void SetLogFilter(uint8_t category)
 {
-    (void) category;
+    IgnoreUnusedVariable(category);
 }
 #endif // CHIP_LOG_FILTERING
 
-#endif /* _CHIP_USE_LOGGING */
+#if CHIP_LOG_FILTERING
+bool IsCategoryEnabled(uint8_t category)
+{
+    return (category <= gLogFilter);
+}
+#endif // CHIP_LOG_FILTERING
+
+#endif // _CHIP_USE_LOGGING
 
 } // namespace Logging
 } // namespace chip
diff --git a/src/lib/support/logging/CHIPLogging.h b/src/lib/support/logging/CHIPLogging.h
index 9e6dc5c..28bdeb5 100644
--- a/src/lib/support/logging/CHIPLogging.h
+++ b/src/lib/support/logging/CHIPLogging.h
@@ -37,8 +37,7 @@
 
 #include <lib/core/CHIPConfig.h>
 
-#include <platform/logging/LogV.h>
-
+#include <lib/support/DLLUtil.h>
 #include <lib/support/EnforceFormat.h>
 #include <lib/support/logging/Constants.h>
 
@@ -46,6 +45,10 @@
 #include <stdarg.h>
 #include <stdint.h>
 
+#if CHIP_SYSTEM_CONFIG_PLATFORM_LOG && defined(CHIP_SYSTEM_CONFIG_PLATFORM_LOG_INCLUDE)
+#include CHIP_SYSTEM_CONFIG_PLATFORM_LOG_INCLUDE
+#endif
+
 #if CHIP_PW_TOKENIZER_LOGGING
 #include "pw_tokenizer/tokenize_to_global_handler_with_payload.h"
 #endif
@@ -68,7 +71,7 @@
  *        - #CHIP_ERROR_LOGGING
  *        - #CHIP_PROGRESS_LOGGING
  *        - #CHIP_DETAIL_LOGGING
- *         - #CHIP_AUTOMATION_LOGGING
+ *        - #CHIP_AUTOMATION_LOGGING
  *
  */
 
@@ -80,25 +83,13 @@
 
 namespace Logging {
 
+// Log redirection
 using LogRedirectCallback_t = void (*)(const char * module, uint8_t category, const char * msg, va_list args);
+DLL_EXPORT void SetLogRedirectCallback(LogRedirectCallback_t callback);
 
-void SetLogRedirectCallback(LogRedirectCallback_t callback);
-
-void LogV(uint8_t module, uint8_t category, const char * msg, va_list args) ENFORCE_FORMAT(3, 0);
-void Log(uint8_t module, uint8_t category, const char * msg, ...) ENFORCE_FORMAT(3, 4);
-
-void LogByteSpan(uint8_t module, uint8_t category, const ByteSpan & span);
-
-uint8_t GetLogFilter();
-void SetLogFilter(uint8_t category);
-
-#ifndef CHIP_ERROR_LOGGING
-#define CHIP_ERROR_LOGGING 1
-#endif
-
-#ifndef CHIP_LOG_FILTERING
-#define CHIP_LOG_FILTERING 1
-#endif
+// Log filtering (no-op unless CHIP_LOG_FILTERING is enabled)
+DLL_EXPORT uint8_t GetLogFilter();
+DLL_EXPORT void SetLogFilter(uint8_t category);
 
 #if CHIP_ERROR_LOGGING
 /**
@@ -109,23 +100,10 @@
  *   category.
  *
  */
-#ifndef ChipLogError
-#if CHIP_PW_TOKENIZER_LOGGING
-#define ChipLogError(MOD, MSG, ...)                                                                                                \
-    PW_TOKENIZE_TO_GLOBAL_HANDLER_WITH_PAYLOAD(                                                                                    \
-        (pw_tokenizer_Payload)((chip::Logging::kLogCategory_Error << 8) | chip::Logging::kLogModule_##MOD), MSG, __VA_ARGS__)
-#else
-#define ChipLogError(MOD, MSG, ...)                                                                                                \
-    chip::Logging::Log(chip::Logging::kLogModule_##MOD, chip::Logging::kLogCategory_Error, MSG, ##__VA_ARGS__)
-#endif
-#endif
-#else
+#define ChipLogError(MOD, MSG, ...) ChipInternalLog(MOD, Error, MSG, ##__VA_ARGS__)
+#else // CHIP_ERROR_LOGGING
 #define ChipLogError(MOD, MSG, ...) ((void) 0)
-#endif
-
-#ifndef CHIP_PROGRESS_LOGGING
-#define CHIP_PROGRESS_LOGGING 1
-#endif
+#endif // CHIP_ERROR_LOGGING
 
 #if CHIP_PROGRESS_LOGGING
 /**
@@ -136,23 +114,10 @@
  *   category.
  *
  */
-#ifndef ChipLogProgress
-#if CHIP_PW_TOKENIZER_LOGGING
-#define ChipLogProgress(MOD, MSG, ...)                                                                                             \
-    PW_TOKENIZE_TO_GLOBAL_HANDLER_WITH_PAYLOAD(                                                                                    \
-        (pw_tokenizer_Payload)((chip::Logging::kLogCategory_Progress << 8) | chip::Logging::kLogModule_##MOD), MSG, __VA_ARGS__)
-#else
-#define ChipLogProgress(MOD, MSG, ...)                                                                                             \
-    chip::Logging::Log(chip::Logging::kLogModule_##MOD, chip::Logging::kLogCategory_Progress, MSG, ##__VA_ARGS__)
-#endif
-#endif
-#else
+#define ChipLogProgress(MOD, MSG, ...) ChipInternalLog(MOD, Progress, MSG, ##__VA_ARGS__)
+#else // CHIP_PROGRESS_LOGGING
 #define ChipLogProgress(MOD, MSG, ...) ((void) 0)
-#endif
-
-#ifndef CHIP_DETAIL_LOGGING
-#define CHIP_DETAIL_LOGGING 1
-#endif
+#endif // CHIP_PROGRESS_LOGGING
 
 #if CHIP_DETAIL_LOGGING
 /**
@@ -163,32 +128,20 @@
  *   category.
  *
  */
-#ifndef ChipLogDetail
-#if CHIP_PW_TOKENIZER_LOGGING
-#define ChipLogDetail(MOD, MSG, ...)                                                                                               \
-    PW_TOKENIZE_TO_GLOBAL_HANDLER_WITH_PAYLOAD(                                                                                    \
-        (pw_tokenizer_Payload)((chip::Logging::kLogCategory_Detail << 8) | chip::Logging::kLogModule_##MOD), MSG, __VA_ARGS__)
-#else
-#define ChipLogDetail(MOD, MSG, ...)                                                                                               \
-    chip::Logging::Log(chip::Logging::kLogModule_##MOD, chip::Logging::kLogCategory_Detail, MSG, ##__VA_ARGS__)
-#endif
-#endif
-#else
+#define ChipLogDetail(MOD, MSG, ...) ChipInternalLog(MOD, Detail, MSG, ##__VA_ARGS__)
+
+/**
+ * @def ChipLogByteSpan(MOD, DATA)
+ *
+ * @brief
+ *   Log a byte span for the specified module in the 'Detail' category.
+ *
+ */
+#define ChipLogByteSpan(MOD, DATA) ChipInternalLogByteSpan(MOD, Detail, DATA)
+#else // CHP_DETAIL_LOGGING
 #define ChipLogDetail(MOD, MSG, ...) ((void) 0)
-#endif
-
-#if CHIP_DETAIL_LOGGING
-#ifndef ChipLogByteSpan
-#define ChipLogByteSpan(MOD, DATA)                                                                                                 \
-    chip::Logging::LogByteSpan(chip::Logging::kLogModule_##MOD, chip::Logging::kLogCategory_Detail, DATA)
-#endif
-#else
 #define ChipLogByteSpan(MOD, DATA) ((void) 0)
-#endif
-
-#ifndef CHIP_AUTOMATION_LOGGING
-#define CHIP_AUTOMATION_LOGGING 1
-#endif
+#endif // CHIP_DETAIL_LOGGING
 
 #if CHIP_AUTOMATION_LOGGING
 /**
@@ -199,51 +152,10 @@
  *   category.
  *
  */
-#ifndef ChipLogAutomation
-#if CHIP_PW_TOKENIZER_LOGGING
-#define ChipLogAutomation(MSG, ...)                                                                                                \
-    PW_TOKENIZE_TO_GLOBAL_HANDLER_WITH_PAYLOAD(                                                                                    \
-        (pw_tokenizer_Payload)((chip::Logging::kLogModule_Automation << 8) | chip::Logging::kLogModule_Automation), MSG,           \
-        __VA_ARGS__)
-#else
-#define ChipLogAutomation(MSG, ...)                                                                                                \
-    chip::Logging::Log(chip::Logging::kLogModule_Automation, chip::Logging::kLogCategory_Automation, MSG, ##__VA_ARGS__)
-#endif
-#endif
-#else
+#define ChipLogAutomation(MSG, ...) ChipInternalLog(Automation, Automation, MSG, ##__VA_ARGS__)
+#else // CHIP_AUTOMATION_LOGGING
 #define ChipLogAutomation(MOD, MSG, ...) ((void) 0)
-#endif
-
-#if CHIP_ERROR_LOGGING || CHIP_PROGRESS_LOGGING || CHIP_DETAIL_LOGGING || CHIP_AUTOMATION_LOGGING
-#define _CHIP_USE_LOGGING 1
-#else
-#define _CHIP_USE_LOGGING 0
-#endif /* CHIP_ERROR_LOGGING || CHIP_PROGRESS_LOGGING || CHIP_DETAIL_LOGGING || CHIP_AUTOMATION_LOGGING */
-
-#if _CHIP_USE_LOGGING
-
-/**
- * CHIP logging length constants
- */
-static constexpr uint16_t kMaxModuleNameLen  = 3;
-static constexpr uint16_t kMaxPrefixLen      = 3;
-static constexpr uint16_t kMaxSeparatorLen   = 2;
-static constexpr uint16_t kMaxTrailerLen     = 2;
-static constexpr uint16_t kMaxMessagePadding = (chip::Logging::kMaxPrefixLen + chip::Logging::kMaxModuleNameLen +
-                                                chip::Logging::kMaxSeparatorLen + chip::Logging::kMaxTrailerLen);
-
-void GetMessageWithPrefix(char * buf, uint8_t bufSize, uint8_t module, const char * msg);
-
-#else
-
-static inline void GetMessageWithPrefix(char * buf, uint8_t bufSize, uint8_t module, const char * msg)
-{
-    return;
-}
-
-#endif // _CHIP_USE_LOGGING
-
-bool IsCategoryEnabled(uint8_t category);
+#endif // CHIP_AUTOMATION_LOGGING
 
 /**
  *  @def ChipLogIfFalse(aCondition)
@@ -411,5 +323,79 @@
 #define ChipLogFormatScopedNodeId "<" ChipLogFormatX64 ", %d>"
 #define ChipLogValueScopedNodeId(id) ChipLogValueX64((id).GetNodeId()), (id).GetFabricIndex()
 
+/**
+ * CHIP Logging Implementation internals.
+ */
+
+#if CHIP_ERROR_LOGGING || CHIP_PROGRESS_LOGGING || CHIP_DETAIL_LOGGING || CHIP_AUTOMATION_LOGGING
+#define _CHIP_USE_LOGGING 1
+#else
+#define _CHIP_USE_LOGGING 0
+#endif // CHIP_ERROR_LOGGING || CHIP_PROGRESS_LOGGING || CHIP_DETAIL_LOGGING || CHIP_AUTOMATION_LOGGING
+
+#if _CHIP_USE_LOGGING
+
+static constexpr uint16_t kMaxModuleNameLen = 3;
+
+#if CHIP_LOG_FILTERING
+DLL_LOCAL bool IsCategoryEnabled(uint8_t category);
+#else  // CHIP_LOG_FILTERING
+DLL_LOCAL inline bool IsCategoryEnabled(uint8_t category)
+{
+    return true;
+}
+#endif // CHIP_LOG_FILTERING
+
+DLL_LOCAL void Log(uint8_t module, uint8_t category, const char * msg, ...) ENFORCE_FORMAT(3, 4);
+DLL_LOCAL void LogByteSpan(uint8_t module, uint8_t category, const ByteSpan & span);
+DLL_LOCAL void LogV(uint8_t module, uint8_t category, const char * msg, va_list args) ENFORCE_FORMAT(3, 0);
+
+#if CHIP_SYSTEM_CONFIG_PLATFORM_LOG
+#ifndef ChipPlatformLog
+#error "CHIP_SYSTEM_CONFIG_PLATFORM_LOG is enabled but ChipPlatformLog() is not defined"
+#endif
+#ifndef ChipPlatformLogByteSpan
+#error "CHIP_SYSTEM_CONFIG_PLATFORM_LOG is enabled but ChipPlatformLogByteSpan() is not defined"
+#endif
+#define ChipInternalLog(...) ChipPlatformLog(__VA_ARGS__)
+#define ChipInternalLogByteSpan(...) ChipPlatformLogByteSpan(__VA_ARGS__)
+#else // CHIP_SYSTEM_CONFIG_PLATFORM_LOG
+#define ChipInternalLog(MOD, CAT, MSG, ...) ChipInternalLogImpl(MOD, CAT, MSG, ##__VA_ARGS__)
+#define ChipInternalLogByteSpan(MOD, CAT, DATA) ChipInternalLogByteSpanImpl(MOD, CAT, DATA)
+#endif // CHIP_SYSTEM_CONFIG_PLATFORM_LOG
+
+#if CHIP_PW_TOKENIZER_LOGGING
+#define ChipInternalLogImpl(MOD, CAT, MSG, ...)                                                                                    \
+    do                                                                                                                             \
+    {                                                                                                                              \
+        if (chip::Logging::IsCategoryEnabled(chip::Logging::kLogCategory_##CAT))                                                   \
+        {                                                                                                                          \
+            PW_TOKENIZE_TO_GLOBAL_HANDLER_WITH_PAYLOAD(                                                                            \
+                (pw_tokenizer_Payload)((chip::Logging::kLogCategory_##CAT << 8) | chip::Logging::kLogModule_##MOD), MSG,           \
+                __VA_ARGS__);                                                                                                      \
+        }                                                                                                                          \
+    } while (0)
+#else // CHIP_PW_TOKENIZER_LOGGING
+#define ChipInternalLogImpl(MOD, CAT, MSG, ...)                                                                                    \
+    do                                                                                                                             \
+    {                                                                                                                              \
+        if (chip::Logging::IsCategoryEnabled(chip::Logging::kLogCategory_##CAT))                                                   \
+        {                                                                                                                          \
+            chip::Logging::Log(chip::Logging::kLogModule_##MOD, chip::Logging::kLogCategory_##CAT, MSG, ##__VA_ARGS__);            \
+        }                                                                                                                          \
+    } while (0)
+#endif // CHIP_PW_TOKENIZER_LOGGING
+
+#define ChipInternalLogByteSpanImpl(MOD, CAT, DATA)                                                                                \
+    do                                                                                                                             \
+    {                                                                                                                              \
+        if (chip::Logging::IsCategoryEnabled(chip::Logging::kLogCategory_##CAT))                                                   \
+        {                                                                                                                          \
+            chip::Logging::LogByteSpan(chip::Logging::kLogModule_##MOD, chip::Logging::kLogCategory_##CAT, DATA);                  \
+        }                                                                                                                          \
+    } while (0)
+
+#endif // _CHIP_USE_LOGGING
+
 } // namespace Logging
 } // namespace chip
diff --git a/src/platform/Darwin/BUILD.gn b/src/platform/Darwin/BUILD.gn
index 5544ce4..1a23fc1 100644
--- a/src/platform/Darwin/BUILD.gn
+++ b/src/platform/Darwin/BUILD.gn
@@ -13,6 +13,7 @@
 # limitations under the License.
 
 import("//build_overrides/chip.gni")
+import("//build_overrides/nlassert.gni")
 
 import("${chip_root}/src/platform/device.gni")
 
@@ -60,7 +61,7 @@
     "DnssdImpl.cpp",
     "DnssdImpl.h",
     "InetPlatformConfig.h",
-    "Logging.cpp",
+    "LoggingImpl.cpp",
     "MdnsError.cpp",
     "MdnsError.h",
     "NetworkCommissioningDriver.h",
@@ -91,6 +92,7 @@
   }
 
   deps = [
+    ":logging",
     "${chip_root}/src/lib/dnssd:platform_header",
     "${chip_root}/src/setup_payload",
   ]
@@ -123,3 +125,21 @@
     ]
   }
 }
+
+static_library("logging") {
+  sources = [
+    "Logging.h",
+    "Logging.mm",
+  ]
+
+  deps = [
+    "${chip_root}/src/lib/core:chip_config_header",  # for lib/support/Span.h
+    "${chip_root}/src/lib/support:attributes",
+    "${chip_root}/src/lib/support:logging_constants",
+    "${nlassert_root}:nlassert",  # for lib/support/Span.h
+  ]
+
+  configs += [ "${chip_root}/src:includes" ]
+  cflags = [ "-fobjc-arc" ]
+  frameworks = [ "Foundation.framework" ]
+}
diff --git a/src/platform/Darwin/Logging.cpp b/src/platform/Darwin/Logging.cpp
deleted file mode 100644
index 5124ed4..0000000
--- a/src/platform/Darwin/Logging.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/* See Project chip LICENSE file for licensing information. */
-
-#include <lib/support/EnforceFormat.h>
-#include <lib/support/logging/Constants.h>
-#include <platform/logging/LogV.h>
-
-#include <lib/core/CHIPConfig.h>
-
-#include <os/log.h>
-
-#include <inttypes.h>
-#include <pthread.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/time.h>
-
-namespace chip {
-namespace Logging {
-namespace Platform {
-
-void ENFORCE_FORMAT(3, 0) LogV(const char * module, uint8_t category, const char * msg, va_list v)
-{
-    timeval time;
-    gettimeofday(&time, nullptr);
-    long ms = (time.tv_sec * 1000) + (time.tv_usec / 1000);
-
-    uint64_t ktid;
-    pthread_threadid_np(nullptr, &ktid);
-
-    char formattedMsg[CHIP_CONFIG_LOG_MESSAGE_MAX_SIZE];
-    int32_t prefixLen   = snprintf(formattedMsg, sizeof(formattedMsg), "[%ld] [%lld:%lld] CHIP: [%s] ", ms, (long long) getpid(),
-                                 (long long) ktid, module);
-    static os_log_t log = os_log_create("com.csa.matter", "all");
-    if (prefixLen < 0)
-    {
-        // This should not happen
-        return;
-    }
-
-    if (static_cast<size_t>(prefixLen) >= sizeof(formattedMsg))
-    {
-        prefixLen = sizeof(formattedMsg) - 1;
-    }
-
-    vsnprintf(formattedMsg + prefixLen, sizeof(formattedMsg) - static_cast<size_t>(prefixLen), msg, v);
-
-    switch (category)
-    {
-    case kLogCategory_Error:
-        os_log_with_type(log, OS_LOG_TYPE_ERROR, "🔴 %{public}s", formattedMsg);
-#if TARGET_OS_MAC && TARGET_OS_IPHONE == 0
-        fprintf(stdout, "\033[1;31m");
-#endif
-        break;
-
-    case kLogCategory_Progress:
-        os_log_with_type(log, OS_LOG_TYPE_DEFAULT, "🔵 %{public}s", formattedMsg);
-#if TARGET_OS_MAC && TARGET_OS_IPHONE == 0
-        fprintf(stdout, "\033[0;32m");
-#endif
-        break;
-
-    case kLogCategory_Detail:
-        os_log_with_type(log, OS_LOG_TYPE_DEFAULT, "🟢 %{public}s", formattedMsg);
-#if TARGET_OS_MAC && TARGET_OS_IPHONE == 0
-        fprintf(stdout, "\033[0;34m");
-#endif
-        break;
-    }
-#if TARGET_OS_MAC && TARGET_OS_IPHONE == 0
-    fprintf(stdout, "%s\033[0m\n", formattedMsg);
-#endif
-}
-
-} // namespace Platform
-} // namespace Logging
-} // namespace chip
diff --git a/src/platform/Darwin/Logging.h b/src/platform/Darwin/Logging.h
new file mode 100644
index 0000000..7fcb82a
--- /dev/null
+++ b/src/platform/Darwin/Logging.h
@@ -0,0 +1,85 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed 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.
+ */
+
+#pragma once
+
+#include <lib/support/DLLUtil.h>
+#include <lib/support/logging/Constants.h>
+
+#include <os/log.h>
+
+#ifdef __OBJC__
+@class NSString;
+#endif // __OBJC__
+
+#define ChipPlatformLog(MOD, CAT, MSG, ...)                                                                                        \
+    do                                                                                                                             \
+    {                                                                                                                              \
+        ChipPlatformValidateLogFormat(MSG, ##__VA_ARGS__); /* validate once and ignore warnings from os_log() / Log() */           \
+        _Pragma("clang diagnostic push");                                                                                          \
+        _Pragma("clang diagnostic ignored \"-Wformat\"");                                                                          \
+        os_log_with_type(chip::Logging::Platform::LoggerForModule(chip::Logging::kLogModule_##MOD, #MOD),                          \
+                         static_cast<os_log_type_t>(chip::Logging::Platform::kOSLogCategory_##CAT), MSG, ##__VA_ARGS__);           \
+        ChipInternalLogImpl(MOD, CAT, MSG, ##__VA_ARGS__);                                                                         \
+        _Pragma("clang diagnostic pop");                                                                                           \
+    } while (0)
+
+#define ChipPlatformLogByteSpan(MOD, CAT, DATA)                                                                                    \
+    do                                                                                                                             \
+    {                                                                                                                              \
+        chip::Logging::Platform::LogByteSpan(chip::Logging::kLogModule_##MOD, #MOD,                                                \
+                                             static_cast<os_log_type_t>(chip::Logging::Platform::kOSLogCategory_##CAT), DATA);     \
+        ChipInternalLogByteSpanImpl(MOD, CAT, DATA);                                                                               \
+    } while (0)
+
+namespace chip {
+
+// Avoid includes cycle: Span.h indirectly includes CHIPLogging.h
+template <class T>
+class Span;
+using ByteSpan = Span<const uint8_t>;
+
+namespace Logging {
+namespace Platform {
+
+// Names align with chip::Logging::LogCategory
+enum OSLogCategory
+{
+    kOSLogCategory_Error      = OS_LOG_TYPE_ERROR,
+    kOSLogCategory_Progress   = OS_LOG_TYPE_DEFAULT,
+    kOSLogCategory_Detail     = OS_LOG_TYPE_INFO,
+    kOSLogCategory_Automation = OS_LOG_TYPE_DEFAULT,
+};
+
+DLL_LOCAL os_log_t LoggerForModule(chip::Logging::LogModule moduleId, char const * moduleName);
+DLL_LOCAL void LogByteSpan(chip::Logging::LogModule moduleId, char const * moduleName, os_log_type_t type,
+                           const chip::ByteSpan & span);
+
+// Helper constructs for compile-time validation of format strings for C++ / ObjC++ contexts.
+// Note that ObjC++ contexts are restricted to NSString style specifiers. Supporting os_log()
+// specifiers would require these to be emulated or stripped when log redirection is used.
+#ifdef __OBJC__
+DLL_LOCAL bool ValidateLogFormat(NSString * format, ...) __attribute__((format(__NSString__, 1, 0))); // not implemented
+#define ChipPlatformValidateLogFormat(F, ...) ((void) sizeof(chip::Logging::Platform::ValidateLogFormat(@F, ##__VA_ARGS__)))
+#else // __OBJC__
+DLL_LOCAL bool ValidateLogFormat(char const * format, ...) __attribute__((format(printf, 1, 0))); // not implemented
+#define ChipPlatformValidateLogFormat(F, ...) ((void) sizeof(chip::Logging::Platform::ValidateLogFormat(F, ##__VA_ARGS__)))
+#endif // __OBJC__
+
+} // namespace Platform
+} // namespace Logging
+} // namespace chip
diff --git a/src/platform/Darwin/Logging.mm b/src/platform/Darwin/Logging.mm
new file mode 100644
index 0000000..5bb7515
--- /dev/null
+++ b/src/platform/Darwin/Logging.mm
@@ -0,0 +1,68 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed 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.
+ */
+
+#if !__has_feature(objc_arc)
+#error This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC).
+#endif
+
+#include "Logging.h"
+
+#include <lib/support/Span.h>
+
+#import <Foundation/Foundation.h>
+#import <dispatch/dispatch.h>
+
+namespace chip {
+namespace Logging {
+    namespace Platform {
+
+        os_log_t LoggerForModule(chip::Logging::LogModule moduleID, char const * moduleName)
+        {
+            if (moduleID <= kLogModule_NotSpecified || kLogModule_Max <= moduleID) {
+                moduleID = kLogModule_NotSpecified;
+                moduleName = "Default";
+            }
+
+            static struct {
+                dispatch_once_t onceToken;
+                os_log_t logger;
+            } cache[kLogModule_Max];
+            auto & entry = cache[moduleID];
+            dispatch_once(&entry.onceToken, ^{
+                entry.logger = os_log_create("com.csa.matter", moduleName);
+            });
+            return entry.logger;
+        }
+
+        void LogByteSpan(
+            chip::Logging::LogModule moduleId, char const * moduleName, os_log_type_t type, const chip::ByteSpan & span)
+        {
+            os_log_t logger = LoggerForModule(moduleId, moduleName);
+            if (os_log_type_enabled(logger, type)) {
+                auto size = span.size();
+                auto data = span.data();
+                NSMutableString * string = [[NSMutableString alloc] initWithCapacity:(size * 6)]; // 6 characters per byte
+                for (size_t i = 0; i < size; i++) {
+                    [string appendFormat:((i % 8 != 7) ? @"0x%02x, " : @"0x%02x,\n"), data[i]];
+                }
+                os_log_with_type(logger, type, "%@", string);
+            }
+        }
+
+    } // namespace Platform
+} // namespace Logging
+} // namespace chip
diff --git a/src/platform/Darwin/LoggingImpl.cpp b/src/platform/Darwin/LoggingImpl.cpp
new file mode 100644
index 0000000..2d6c1b3
--- /dev/null
+++ b/src/platform/Darwin/LoggingImpl.cpp
@@ -0,0 +1,34 @@
+/*
+ *
+ *    Copyright (c) 2021 Project CHIP Authors
+ *
+ *    Licensed 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 <platform/logging/LogV.h>
+
+namespace chip {
+namespace Logging {
+namespace Platform {
+
+void LogV(const char * module, uint8_t category, const char * msg, va_list v)
+{
+    // ChipPlatformLog expands to an os_log call directly (see Logging.h), so
+    // we don't need to do anything further here. However his function and the
+    // call to it still exist because of scenarios where a different logging
+    // backend (usually stdio) is swapped in at link time, e.g. for unit tests.
+}
+
+} // namespace Platform
+} // namespace Logging
+} // namespace chip
diff --git a/src/platform/Darwin/SystemPlatformConfig.h b/src/platform/Darwin/SystemPlatformConfig.h
index 48613ba..19df500 100644
--- a/src/platform/Darwin/SystemPlatformConfig.h
+++ b/src/platform/Darwin/SystemPlatformConfig.h
@@ -40,5 +40,7 @@
 #define CHIP_SYSTEM_CONFIG_PLATFORM_PROVIDES_TIME 1
 #define CHIP_SYSTEM_CONFIG_USE_POSIX_TIME_FUNCTS 1
 #define CHIP_SYSTEM_CONFIG_POOL_USE_HEAP 1
+#define CHIP_SYSTEM_CONFIG_PLATFORM_LOG 1
+#define CHIP_SYSTEM_CONFIG_PLATFORM_LOG_INCLUDE <platform/Darwin/Logging.h>
 
 // ========== Platform-specific Configuration Overrides =========
diff --git a/src/platform/Linux/PlatformManagerImpl.cpp b/src/platform/Linux/PlatformManagerImpl.cpp
index e29f04b..ff753e4 100644
--- a/src/platform/Linux/PlatformManagerImpl.cpp
+++ b/src/platform/Linux/PlatformManagerImpl.cpp
@@ -285,8 +285,8 @@
 {
 
     GMainContext * context = g_main_loop_get_context(mGLibMainLoop);
-    VerifyOrReturnError(context != nullptr,
-                        (ChipLogDetail(DeviceLayer, "Failed to get GLib main loop context"), CHIP_ERROR_INTERNAL));
+    VerifyOrReturnError(context != nullptr, CHIP_ERROR_INTERNAL,
+                        ChipLogDetail(DeviceLayer, "Failed to get GLib main loop context"));
 
     // If we've been called from the GLib main loop thread itself, there is no reason to wait
     // for the callback, as it will be executed immediately by the g_main_context_invoke() call
diff --git a/src/platform/Linux/bluez/Helper.cpp b/src/platform/Linux/bluez/Helper.cpp
index b00ca75..ff0c73d 100644
--- a/src/platform/Linux/bluez/Helper.cpp
+++ b/src/platform/Linux/bluez/Helper.cpp
@@ -1438,7 +1438,7 @@
 
 CHIP_ERROR SendBluezIndication(BLE_CONNECTION_OBJECT apConn, chip::System::PacketBufferHandle apBuf)
 {
-    VerifyOrReturnError(!apBuf.IsNull(), (ChipLogError(DeviceLayer, "apBuf is NULL in %s", __func__), CHIP_ERROR_INVALID_ARGUMENT));
+    VerifyOrReturnError(!apBuf.IsNull(), CHIP_ERROR_INVALID_ARGUMENT, ChipLogError(DeviceLayer, "apBuf is NULL in %s", __func__));
     return PlatformMgrImpl().ScheduleOnGLibMainLoopThread(BluezC2Indicate, MakeConnectionDataBundle(apConn, apBuf));
 }
 
@@ -1476,33 +1476,32 @@
 CHIP_ERROR StartBluezAdv(BluezEndpoint * apEndpoint)
 {
     CHIP_ERROR err = PlatformMgrImpl().ScheduleOnGLibMainLoopThread(BluezAdvStart, apEndpoint);
-    VerifyOrReturnError(err == CHIP_NO_ERROR,
-                        (ChipLogError(Ble, "Failed to schedule BluezAdvStart() on CHIPoBluez thread"), CHIP_ERROR_INCORRECT_STATE));
+    VerifyOrReturnError(err == CHIP_NO_ERROR, CHIP_ERROR_INCORRECT_STATE,
+                        ChipLogError(Ble, "Failed to schedule BluezAdvStart() on CHIPoBluez thread"));
     return err;
 }
 
 CHIP_ERROR StopBluezAdv(BluezEndpoint * apEndpoint)
 {
     CHIP_ERROR err = PlatformMgrImpl().ScheduleOnGLibMainLoopThread(BluezAdvStop, apEndpoint);
-    VerifyOrReturnError(err == CHIP_NO_ERROR,
-                        (ChipLogError(Ble, "Failed to schedule BluezAdvStop() on CHIPoBluez thread"), CHIP_ERROR_INCORRECT_STATE));
+    VerifyOrReturnError(err == CHIP_NO_ERROR, CHIP_ERROR_INCORRECT_STATE,
+                        ChipLogError(Ble, "Failed to schedule BluezAdvStop() on CHIPoBluez thread"));
     return err;
 }
 
 CHIP_ERROR BluezAdvertisementSetup(BluezEndpoint * apEndpoint)
 {
     CHIP_ERROR err = PlatformMgrImpl().ScheduleOnGLibMainLoopThread(BluezAdvSetup, apEndpoint);
-    VerifyOrReturnError(err == CHIP_NO_ERROR,
-                        (ChipLogError(Ble, "Failed to schedule BluezAdvSetup() on CHIPoBluez thread"), CHIP_ERROR_INCORRECT_STATE));
+    VerifyOrReturnError(err == CHIP_NO_ERROR, CHIP_ERROR_INCORRECT_STATE,
+                        ChipLogError(Ble, "Failed to schedule BluezAdvSetup() on CHIPoBluez thread"));
     return err;
 }
 
 CHIP_ERROR BluezGattsAppRegister(BluezEndpoint * apEndpoint)
 {
     CHIP_ERROR err = PlatformMgrImpl().ScheduleOnGLibMainLoopThread(BluezPeripheralRegisterApp, apEndpoint);
-    VerifyOrReturnError(
-        err == CHIP_NO_ERROR,
-        (ChipLogError(Ble, "Failed to schedule BluezPeripheralRegisterApp() on CHIPoBluez thread"), CHIP_ERROR_INCORRECT_STATE));
+    VerifyOrReturnError(err == CHIP_NO_ERROR, CHIP_ERROR_INCORRECT_STATE,
+                        ChipLogError(Ble, "Failed to schedule BluezPeripheralRegisterApp() on CHIPoBluez thread"));
     return err;
 }
 
@@ -1631,7 +1630,7 @@
 
 CHIP_ERROR BluezSendWriteRequest(BLE_CONNECTION_OBJECT apConn, chip::System::PacketBufferHandle apBuf)
 {
-    VerifyOrReturnError(!apBuf.IsNull(), (ChipLogError(DeviceLayer, "apBuf is NULL in %s", __func__), CHIP_ERROR_INVALID_ARGUMENT));
+    VerifyOrReturnError(!apBuf.IsNull(), CHIP_ERROR_INVALID_ARGUMENT, ChipLogError(DeviceLayer, "apBuf is NULL in %s", __func__));
     return PlatformMgrImpl().ScheduleOnGLibMainLoopThread(SendWriteRequestImpl, MakeConnectionDataBundle(apConn, apBuf));
 }
 
diff --git a/src/platform/Tizen/DnssdImpl.cpp b/src/platform/Tizen/DnssdImpl.cpp
index e2ab151..2bd1ed2 100644
--- a/src/platform/Tizen/DnssdImpl.cpp
+++ b/src/platform/Tizen/DnssdImpl.cpp
@@ -120,8 +120,8 @@
     rCtx->mMainLoop = mainLoop;
 
     int ret = dnssd_register_local_service(rCtx->mServiceHandle, OnRegister, rCtx);
-    VerifyOrReturnError(ret == DNSSD_ERROR_NONE,
-                        (ChipLogError(DeviceLayer, "dnssd_register_local_service() failed. ret: %d", ret), false));
+    VerifyOrReturnValue(ret == DNSSD_ERROR_NONE, false,
+                        ChipLogError(DeviceLayer, "dnssd_register_local_service() failed. ret: %d", ret));
 
     rCtx->mIsRegistered = true;
     return true;
@@ -209,8 +209,8 @@
     VerifyOrExit(ret == DNSSD_ERROR_NONE, ChipLogError(DeviceLayer, "dnssd_service_get_interface() failed. ret: %d", ret));
 
     interfaceId = if_nametoindex(ifaceName);
-    VerifyOrExit(interfaceId > 0,
-                 (ChipLogError(DeviceLayer, "if_nametoindex() failed. errno: %d", errno), ret = DNSSD_ERROR_OPERATION_FAILED));
+    VerifyOrExit(interfaceId > 0, ChipLogError(DeviceLayer, "if_nametoindex() failed. errno: %d", errno);
+                 ret = DNSSD_ERROR_OPERATION_FAILED);
 
     if (state == DNSSD_SERVICE_STATE_AVAILABLE)
     {
@@ -253,8 +253,8 @@
     else
     {
         char iface[IF_NAMESIZE + 1] = "";
-        VerifyOrReturnError(if_indextoname(interfaceId, iface) != nullptr,
-                            (ChipLogError(DeviceLayer, "if_indextoname() failed. errno: %d", errno), false));
+        VerifyOrReturnValue(if_indextoname(interfaceId, iface) != nullptr, false,
+                            ChipLogError(DeviceLayer, "if_indextoname() failed. errno: %d", errno));
         ret = dnssd_browse_service(bCtx->mType, iface, &bCtx->mBrowserHandle, OnBrowse, bCtx);
     }
 
@@ -407,8 +407,7 @@
     rCtx->mMainLoop = mainLoop;
 
     int ret = dnssd_resolve_service(rCtx->mServiceHandle, OnResolve, rCtx);
-    VerifyOrReturnError(ret == DNSSD_ERROR_NONE,
-                        (ChipLogError(DeviceLayer, "dnssd_resolve_service() failed. ret: %d", ret), false));
+    VerifyOrReturnValue(ret == DNSSD_ERROR_NONE, false, ChipLogError(DeviceLayer, "dnssd_resolve_service() failed. ret: %d", ret));
 
     rCtx->mIsResolving = true;
     return true;
@@ -520,7 +519,7 @@
         std::lock_guard<std::mutex> lock(mMutex);
 
         auto iServiceCtx = std::find_if(mContexts.begin(), mContexts.end(), [fullType, service, interfaceId](const auto & ctx) {
-            VerifyOrReturnError(ctx->mContextType == ContextType::Register, false);
+            VerifyOrReturnValue(ctx->mContextType == ContextType::Register, false);
             auto * rCtx = static_cast<RegisterContext *>(ctx.get());
             return strcmp(rCtx->mName, service.mName) == 0 && strcmp(rCtx->mType, fullType.c_str()) == 0 &&
                 rCtx->mPort == service.mPort && rCtx->mInterfaceId == interfaceId;
@@ -552,25 +551,26 @@
     // Local service will be freed by the RegisterContext destructor
     int ret            = dnssd_create_local_service(fullType.c_str(), &serviceCtx->mServiceHandle);
     auto serviceHandle = serviceCtx->mServiceHandle;
-    VerifyOrExit(ret == DNSSD_ERROR_NONE,
-                 (ChipLogError(DeviceLayer, "dnssd_create_local_service() failed. ret: %d", ret), err = GetChipError(ret)));
+    VerifyOrExit(ret == DNSSD_ERROR_NONE, ChipLogError(DeviceLayer, "dnssd_create_local_service() failed. ret: %d", ret);
+                 err = GetChipError(ret));
 
     ret = dnssd_service_set_name(serviceHandle, service.mName);
-    VerifyOrExit(ret == DNSSD_ERROR_NONE,
-                 (ChipLogError(DeviceLayer, "dnssd_service_set_name() failed. ret: %d", ret), err = GetChipError(ret)));
+    VerifyOrExit(ret == DNSSD_ERROR_NONE, ChipLogError(DeviceLayer, "dnssd_service_set_name() failed. ret: %d", ret);
+                 err = GetChipError(ret));
 
     ret = dnssd_service_set_port(serviceHandle, service.mPort);
-    VerifyOrExit(ret == DNSSD_ERROR_NONE,
-                 (ChipLogError(DeviceLayer, "dnssd_service_set_port() failed. ret: %d", ret), err = GetChipError(ret)));
+    VerifyOrExit(ret == DNSSD_ERROR_NONE, ChipLogError(DeviceLayer, "dnssd_service_set_port() failed. ret: %d", ret);
+                 err = GetChipError(ret));
 
     if (interfaceId > 0)
     {
         char iface[IF_NAMESIZE + 1] = "";
         VerifyOrExit(if_indextoname(interfaceId, iface) != nullptr,
-                     (ChipLogError(DeviceLayer, "if_indextoname() failed. errno: %d", errno), err = CHIP_ERROR_INTERNAL));
+                     ChipLogError(DeviceLayer, "if_indextoname() failed. errno: %d", errno);
+                     err = CHIP_ERROR_INTERNAL);
         ret = dnssd_service_set_interface(serviceHandle, iface);
-        VerifyOrExit(ret == DNSSD_ERROR_NONE,
-                     (ChipLogError(DeviceLayer, "dnssd_service_set_interface() failed. ret: %d", ret), err = GetChipError(ret)));
+        VerifyOrExit(ret == DNSSD_ERROR_NONE, ChipLogError(DeviceLayer, "dnssd_service_set_interface() failed. ret: %d", ret);
+                     err = GetChipError(ret));
     }
 
     for (size_t i = 0; i < service.mTextEntrySize; ++i)
@@ -578,8 +578,8 @@
         TextEntry entry = service.mTextEntries[i];
         VerifyOrReturnError(chip::CanCastTo<unsigned short>(entry.mDataSize), CHIP_ERROR_INVALID_ARGUMENT);
         ret = dnssd_service_add_txt_record(serviceHandle, entry.mKey, static_cast<unsigned short>(entry.mDataSize), entry.mData);
-        VerifyOrExit(ret == DNSSD_ERROR_NONE,
-                     (ChipLogError(DeviceLayer, "dnssd_service_add_txt_record() failed. ret: %d", ret), err = GetChipError(ret)));
+        VerifyOrExit(ret == DNSSD_ERROR_NONE, ChipLogError(DeviceLayer, "dnssd_service_add_txt_record() failed. ret: %d", ret);
+                     err = GetChipError(ret));
     }
 
     ok = DeviceLayer::Internal::MainLoop::Instance().AsyncRequest(RegisterAsync, serviceCtx);
@@ -655,12 +655,13 @@
     {
         char iface[IF_NAMESIZE + 1] = "";
         VerifyOrExit(if_indextoname(interfaceId, iface) != nullptr,
-                     (ChipLogError(DeviceLayer, "if_indextoname() failed. errno: %d", errno), err = CHIP_ERROR_INTERNAL));
+                     ChipLogError(DeviceLayer, "if_indextoname() failed. errno: %d", errno);
+                     err = CHIP_ERROR_INTERNAL);
         ret = dnssd_create_remote_service(fullType.c_str(), browseResult.mName, iface, &resolveCtx->mServiceHandle);
     }
 
-    VerifyOrExit(ret == DNSSD_ERROR_NONE,
-                 (ChipLogError(DeviceLayer, "dnssd_create_remote_service() failed. ret: %d", ret), err = GetChipError(ret)));
+    VerifyOrExit(ret == DNSSD_ERROR_NONE, ChipLogError(DeviceLayer, "dnssd_create_remote_service() failed. ret: %d", ret);
+                 err = GetChipError(ret));
 
     ok = DeviceLayer::Internal::MainLoop::Instance().AsyncRequest(ResolveAsync, resolveCtx);
     VerifyOrExit(ok, err = CHIP_ERROR_INTERNAL);
diff --git a/src/platform/Tizen/ThreadStackManagerImpl.cpp b/src/platform/Tizen/ThreadStackManagerImpl.cpp
index c7cca44..75c2dec 100644
--- a/src/platform/Tizen/ThreadStackManagerImpl.cpp
+++ b/src/platform/Tizen/ThreadStackManagerImpl.cpp
@@ -444,9 +444,8 @@
     int threadErr;
 
     threadErr = thread_get_extended_address(mThreadInstance, &extAddr);
-    VerifyOrReturnError(
-        threadErr == THREAD_ERROR_NONE,
-        (ChipLogError(DeviceLayer, "thread_get_extended_address() failed. ret: %d", threadErr), CHIP_ERROR_INTERNAL));
+    VerifyOrReturnError(threadErr == THREAD_ERROR_NONE, CHIP_ERROR_INTERNAL,
+                        ChipLogError(DeviceLayer, "thread_get_extended_address() failed. ret: %d", threadErr));
 
     extAddr = htobe64(extAddr);
     memcpy(buf, &extAddr, sizeof(extAddr));
@@ -592,8 +591,8 @@
 
     /* Get external ip address */
     threadErr = thread_get_ipaddr(mThreadInstance, _ThreadIpAddressCb, THREAD_IPADDR_TYPE_MLEID, nullptr);
-    VerifyOrReturnError(threadErr == THREAD_ERROR_NONE,
-                        (ChipLogError(DeviceLayer, "thread_get_ipaddr() failed. ret: %d", threadErr), CHIP_ERROR_INTERNAL));
+    VerifyOrReturnError(threadErr == THREAD_ERROR_NONE, CHIP_ERROR_INTERNAL,
+                        ChipLogError(DeviceLayer, "thread_get_ipaddr() failed. ret: %d", threadErr));
 
     return CHIP_NO_ERROR;
 }
diff --git a/src/platform/logging/BUILD.gn b/src/platform/logging/BUILD.gn
index 038f942..4025283 100644
--- a/src/platform/logging/BUILD.gn
+++ b/src/platform/logging/BUILD.gn
@@ -16,7 +16,7 @@
     deps = [
       ":headers",
       "${chip_root}/src/lib/core:chip_config_header",
-      "${chip_root}/src/lib/support:enforce_format",
+      "${chip_root}/src/lib/support:attributes",
       "${chip_root}/src/lib/support:logging_constants",
       "${chip_root}/src/platform:platform_buildconfig",
     ]
@@ -25,14 +25,38 @@
   }
 }
 
+# We need to reference the output file of ":stdio" at build time,
+# but get_target_outputs() does not work for binary targets. As a
+# workaround, define a reasonable path and make the target use it.
+stdio_archive = "$root_out_dir/liblogging-stdio.a"
+
 static_library("stdio") {
   sources = [ "impl/stdio/Logging.cpp" ]
 
   deps = [
     ":headers",
     "${chip_root}/src/lib/core:chip_config_header",
-    "${chip_root}/src/lib/support:enforce_format",
+    "${chip_root}/src/lib/support:attributes",
     "${chip_root}/src/lib/support:logging_constants",
     "${chip_root}/src/platform:platform_buildconfig",
   ]
+
+  # Ensure we end up with the expected output file name
+  output_dir = get_path_info(stdio_archive, "dir")
+  output_name = get_path_info(stdio_archive, "name")
+  output_extension = get_path_info(stdio_archive, "extension")
+  output_prefix_override = true
+}
+
+# Depending on this target (via public_deps) pulls in the stdio
+# logger and ensures it takes precendce over the platform backend.
+group("force_stdio") {
+  deps = [ ":stdio" ]
+  public_configs = [ ":force_stdio_config" ]
+}
+
+config("force_stdio_config") {
+  # Ensure the linker sees the stdio implementation first. This
+  # works because ldflags come before inputs on the command line.
+  ldflags = [ rebase_path(stdio_archive, root_build_dir) ]
 }
diff --git a/src/system/SystemConfig.h b/src/system/SystemConfig.h
index 87171af..11ba2a0 100644
--- a/src/system/SystemConfig.h
+++ b/src/system/SystemConfig.h
@@ -175,18 +175,6 @@
 /* Configuration option variables defined below */
 
 /**
- *  @def CHIP_SYSTEM_CONFIG_NO_LOCKING
- *
- *  @brief
- *      Disable the use of locking within the system layer.
- *
- *      Unless you are simulating an LwIP-based system on a Unix-style host, this value should be left at its default.
- */
-#ifndef CHIP_SYSTEM_CONFIG_NO_LOCKING
-#define CHIP_SYSTEM_CONFIG_NO_LOCKING 0
-#endif /* CHIP_SYSTEM_CONFIG_NO_LOCKING */
-
-/**
  *  @def CHIP_SYSTEM_CONFIG_POSIX_LOCKING
  *
  *  @brief
@@ -506,6 +494,18 @@
 #endif /* CHIP_SYSTEM_CONFIG_HEADER_RESERVE_SIZE */
 
 /**
+ *  @def CHIP_SYSTEM_CONFIG_PLATFORM_LOG
+ *
+ *  @brief
+ *      Defines whether (1) or not (0) the system uses a platform-specific logging implementation.
+ *
+ *  See CHIPLogging.h for details.
+ */
+#ifndef CHIP_SYSTEM_CONFIG_PLATFORM_LOG
+#define CHIP_SYSTEM_CONFIG_PLATFORM_LOG 0
+#endif // CHIP_SYSTEM_CONFIG_PLATFORM_LOG
+
+/**
  *  @def CHIP_SYSTEM_CONFIG_PLATFORM_PROVIDES_TIME
  *
  *  @brief
