Fix logging.hh 27/281427/6
authorSangyoon Jang <jeremy.jang@samsung.com>
Mon, 19 Sep 2022 02:26:25 +0000 (11:26 +0900)
committerSangyoon Jang <jeremy.jang@samsung.com>
Tue, 4 Oct 2022 02:32:47 +0000 (02:32 +0000)
Using singleton object in complex applications can cause problem,
for example, it can be a problem when invoked at destructor of global
object.

Change-Id: Id61bbd147f8964a762b98ed2bc3138f9a07fa8d6
Signed-off-by: Sangyoon Jang <jeremy.jang@samsung.com>
src/utils/logging.hh

index 318c2d8..093d63f 100644 (file)
 #endif
 
 #include <cassert>
-#include <climits>
-#include <cstdio>
 #include <cstring>
 #include <iomanip>
 #include <iostream>
-#include <memory>
 #include <sstream>
 #include <string>
-#include <vector>
 
 #ifndef __FILENAME__
 #define __FILENAME__                                                           \
@@ -68,20 +64,14 @@ class StringStream : private std::basic_ostringstream<charT, traits> {
   }
 };
 
-// Interface class for logging backends. The custom LogBackend which wants
-// log using LOG() macro should be implement following interface.
-class ILogBackend {
+class LogCatcher {
  public:
-  virtual void WriteLog(LogLevel level, const std::string& tag,
-      const std::string& logstr) = 0;
-};
+  LogCatcher(LogLevel level, const char* tag)
+    : level_(level), tag_(tag) { }
 
-class DLogBackend : public ILogBackend {
- public:
-  void WriteLog(LogLevel level, const std::string& tag,
-      const std::string& logstr) override {
-    dlog_print(LogLevelToPriority(level), tag.c_str(), "%s",
-        Escape(logstr).c_str());
+  void operator&(const StringStream<char>& str) const {
+    dlog_print(LogLevelToPriority(level_), tag_.c_str(), "%s",
+        Escape(str.str()).c_str());
   }
 
  private:
@@ -100,69 +90,16 @@ class DLogBackend : public ILogBackend {
     }
     return escaped;
   }
-};
-
-class LogCore {
- public:
-  // Do not call this function at destructor of global object
-  static LogCore& GetCore() {
-    static LogCore core;
-    return core;
-  }
-
-  void AddLogBackend(std::shared_ptr<ILogBackend> backend) {
-    backend_list_.emplace_back(backend);
-  }
-
-  void Log(LogLevel level, const std::string& tag, const std::string& log) {
-    for (auto& backend : backend_list_)
-      backend->WriteLog(level, tag, log);
-  }
-
- private:
-  LogCore() {
-    // add default dlog backend
-    AddLogBackend(std::shared_ptr<ILogBackend>(new DLogBackend()));
-  }
-  ~LogCore() = default;
-  LogCore(const LogCore&) = delete;
-  LogCore& operator=(const LogCore&) = delete;
-
-  std::vector<std::shared_ptr<ILogBackend>> backend_list_;
-};
-
-class LogCatcher {
- public:
-  LogCatcher(LogLevel level, const char* tag)
-    : level_(level), tag_(tag) { }
-
-  void operator&(const StringStream<char>& str) const {
-    LogCore::GetCore().Log(level_, tag_, str.str());
-  }
-
- private:
   LogLevel level_;
   std::string tag_;
 };
 
 }  // namespace utils
 
-
-inline static const constexpr char* __tag_for_logging() {
-  return "";
-}
-
 inline static const constexpr char* __tag_for_project() {
   return PROJECT_TAG;
 }
 
-// To be defined in class namespace if user want different log tag for given
-// scope
-#define SCOPE_LOG_TAG(TAG)                                                     \
-  inline static const constexpr char* __tag_for_logging() {                    \
-    return #TAG;                                                               \
-  }                                                                            \
-
 // Simple logging macro of following usage:
 //   LOG(LEVEL) << object_1 << object_2 << object_n;
 //     where:
@@ -172,7 +109,6 @@ inline static const constexpr char* __tag_for_project() {
       ::utils::LogLevel::LOG_ ## LEVEL, __tag_for_project())                   \
       & ::utils::StringStream<char>()                                          \
       << std::string(::utils::LogTag<::utils::LogLevel::LOG_ ## LEVEL>::value) \
-      << " " << std::setw(25) << std::left << __tag_for_logging()              \
       << " : " << std::setw(36)                                                \
       << (std::string(__FILENAME__) + ":" + std::to_string(__LINE__)).c_str()  \
       << std::setw(0) << " : "                                                 \