[darwin] Add back the colored output with additional informations for chip-tool (#24094)
diff --git a/src/platform/logging/BUILD.gn b/src/platform/logging/BUILD.gn
index 4025283..5050685 100644
--- a/src/platform/logging/BUILD.gn
+++ b/src/platform/logging/BUILD.gn
@@ -31,7 +31,11 @@
stdio_archive = "$root_out_dir/liblogging-stdio.a"
static_library("stdio") {
- sources = [ "impl/stdio/Logging.cpp" ]
+ if (chip_device_platform == "darwin") {
+ sources = [ "impl/stdio/darwin/Logging.cpp" ]
+ } else {
+ sources = [ "impl/stdio/Logging.cpp" ]
+ }
deps = [
":headers",
diff --git a/src/platform/logging/impl/stdio/darwin/Logging.cpp b/src/platform/logging/impl/stdio/darwin/Logging.cpp
new file mode 100644
index 0000000..f5599f5
--- /dev/null
+++ b/src/platform/logging/impl/stdio/darwin/Logging.cpp
@@ -0,0 +1,72 @@
+/*
+ *
+ * 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.
+ */
+
+#include <lib/core/CHIPConfig.h>
+#include <lib/support/EnforceFormat.h>
+#include <lib/support/logging/Constants.h>
+#include <platform/logging/LogV.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <sys/time.h>
+#include <unistd.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] [%s] ", ms, (long long) getpid(), (long long) ktid, module);
+ 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:
+ printf("\033[1;31m%s\033[0m\n", formattedMsg);
+ break;
+ case kLogCategory_Progress:
+ printf("\033[0;32m%s\033[0m\n", formattedMsg);
+ break;
+ case kLogCategory_Detail:
+ printf("\033[0;34m%s\033[0m\n", formattedMsg);
+ break;
+ }
+}
+
+} // namespace Platform
+} // namespace Logging
+} // namespace chip