134 enum Level { kOff, kTrace, kDebug, kInfo, kWarn, kError };
136 static constexpr const char* kLogLevelTraceStr =
"trace";
137 static constexpr const char* kLogLevelDebugStr =
"debug";
138 static constexpr const char* kLogLevelInfoStr =
"info";
139 static constexpr const char* kLogLevelWarnStr =
"warn";
140 static constexpr const char* kLogLevelErrorStr =
"error";
144 virtual void Trace(
const std::string& msg,
145 const std::string& filename,
146 const std::string& function,
148 virtual void Debug(
const std::string& msg,
149 const std::string& filename,
150 const std::string& function,
152 virtual void Info(
const std::string& msg,
153 const std::string& filename,
154 const std::string& function,
156 virtual void Warn(
const std::string& msg,
157 const std::string& filename,
158 const std::string& function,
160 virtual void Error(
const std::string& msg,
161 const std::string& filename,
162 const std::string& function,
165 void AddObserver(std::weak_ptr<LoggerObserver> observer);
167 void Notify(
Level log_level,
168 const std::string& message,
169 const std::string& filename,
170 const std::string& function,
173 void BuildFormat() {}
175 template <
class Head,
class... Tail>
176 void BuildFormat(Head&& head, Tail&&... tail) {
178 this->BuildFormat(std::forward<Tail>(tail)...);
181 template <
class FormatString,
class... Args>
182 std::string Format(FormatString fmt_str, Args&&... args) {
183 std::lock_guard<std::mutex> lg(fmt_mtx_);
184 fmt_ = boost::format(fmt_str);
185 this->BuildFormat(args...);
189 static inline std::string GetFileName(
const std::string& path) {
192 pos1 = path.rfind(
'\\');
193 if (pos1 != std::string::npos) {
194 return path.substr(pos1 + 1, path.size() - pos1 - 1);
197 pos1 = path.rfind(
'/');
198 if (pos1 != std::string::npos) {
199 return path.substr(pos1 + 1, path.size() - pos1 - 1);
206 static void SetSharedInstance(std::unique_ptr<Logger> logger);
207 static Logger* Shared();
211 static std::unique_ptr<Logger> shared_;
212 std::weak_ptr<LoggerObserver> observer_;
214 std::vector<LoggerObserver::SdkLog> sdk_log_buffer_;
215 std::mutex sdk_log_buffer_mtx_;