diff --git a/examples/darwin-framework-tool/BUILD.gn b/examples/darwin-framework-tool/BUILD.gn
index c11da06..76bfeea 100644
--- a/examples/darwin-framework-tool/BUILD.gn
+++ b/examples/darwin-framework-tool/BUILD.gn
@@ -147,6 +147,7 @@
     "commands/provider/OTASoftwareUpdateInteractive.mm",
     "commands/storage/Commands.h",
     "commands/storage/StorageManagementCommand.mm",
+    "logging/logging.mm",
     "main.mm",
   ]
 
diff --git a/examples/darwin-framework-tool/logging/logging.h b/examples/darwin-framework-tool/logging/logging.h
new file mode 100644
index 0000000..0380286
--- /dev/null
+++ b/examples/darwin-framework-tool/logging/logging.h
@@ -0,0 +1,25 @@
+/*
+ *   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.
+ *
+ */
+
+namespace dft {
+namespace logging {
+
+void Setup();
+
+}
+} // namespace dft
diff --git a/examples/darwin-framework-tool/logging/logging.mm b/examples/darwin-framework-tool/logging/logging.mm
new file mode 100644
index 0000000..d57a519
--- /dev/null
+++ b/examples/darwin-framework-tool/logging/logging.mm
@@ -0,0 +1,65 @@
+/*
+ *   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 <Matter/Matter.h>
+
+#import "logging.h"
+
+#include <cstdio>
+#include <pthread.h>
+
+namespace dft {
+namespace logging {
+
+    void Setup()
+    {
+        auto kLoggingColorError = @"\033[1;31m";
+        auto kLoggingColorProgress = @"\033[0;32m";
+        auto kLoggingColorDetail = @"\033[0;34m";
+        auto kLoggingColorEnd = @"\033[0m";
+
+        MTRSetLogCallback(MTRLogTypeDetail, ^(MTRLogType type, NSString * component, NSString * message) {
+            NSString * loggingColor = nil;
+
+            switch (type) {
+            case MTRLogTypeError:
+                loggingColor = kLoggingColorError;
+                break;
+            case MTRLogTypeProgress:
+                loggingColor = kLoggingColorProgress;
+                break;
+            case MTRLogTypeDetail:
+                loggingColor = kLoggingColorDetail;
+                break;
+            }
+
+            auto formatter = [[NSDateFormatter alloc] init];
+            formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss.SSS";
+            auto formattedDate = [formatter stringFromDate:[NSDate date]];
+
+            int pid = [[NSProcessInfo processInfo] processIdentifier];
+
+            auto tid = pthread_mach_thread_np(pthread_self());
+
+            fprintf(stdout, "%s%s [%d:%u] [%s]: %s%s\n", loggingColor.UTF8String, formattedDate.UTF8String, pid, tid,
+                component.UTF8String, message.UTF8String, kLoggingColorEnd.UTF8String);
+        });
+    }
+
+}
+}
diff --git a/examples/darwin-framework-tool/main.mm b/examples/darwin-framework-tool/main.mm
index 58a37eb..dd191d3 100644
--- a/examples/darwin-framework-tool/main.mm
+++ b/examples/darwin-framework-tool/main.mm
@@ -18,6 +18,8 @@
 
 #import <Matter/Matter.h>
 
+#import "logging/logging.h"
+
 #include "commands/common/Commands.h"
 #include "commands/interactive/Commands.h"
 #include "commands/pairing/Commands.h"
@@ -28,14 +30,10 @@
 #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);
-        });
+        dft::logging::Setup();
 
         Commands commands;
         registerCommandsPairing(commands);
